【问题标题】:Creating a local database in windows phone app 8 using vs2012使用 vs2012 在 windows phone app 8 中创建本地数据库
【发布时间】:2015-11-27 16:39:45
【问题描述】:

我想在 windows phone 8 中开发一个应用程序。 我对此完全陌生。我想为该应用程序创建一个数据库,我可以从中执行 CRUID 操作。 我在浏览和观看视频时发现了一些信息,但我不太了解。

我做了一些步骤:

  1. 为 vs2012 安装了 windows phone app 8 sdk
  2. 从 Manage Nuget Packages 添加了一些 Sqlite 扩展。
  3. 为应用开发了一个基本界面。
  4. 复制并粘贴了代码,几乎没有更改

我想要什么:

  1. 从数据库中永久插入和获取数据(我从某个网站下载了一个代码,但是运行它后,当我关闭模拟器并尝试查看之前输入的数据时,它不会返回它)
  2. 就像它应该存储在手机内存或任何类似的地方

  3. 在列表视图或网格中显示获取的数据

请给我发送我可以通过的链接或此处提出的任何类似问题

MainPage.xaml.cs 代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Navigation;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Shell;
using CustomerPhoneApp.Resources;
using SQLite;
using System.IO;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.Storage;
using Windows.UI.Popups;
using System.Data.Linq;
using System.Diagnostics;

namespace CustomerPhoneApp
{
public partial class MainPage : PhoneApplicationPage
{
    [Table("Users")]
    public class User
    {
        [PrimaryKey, Unique]

        public string Name { get; set; }
        public string Age { get; set; }
    }

    protected async override void OnNavigatedTo(NavigationEventArgs e)
    {
        try
        {
            var path = ApplicationData.Current.LocalFolder.Path + @"\users.db";
            var db = new SQLiteAsyncConnection(path);
            await db.CreateTableAsync<User>();
        }
        catch (Exception)
        {
        }
    }

    // Constructor
    public MainPage()
    {
        InitializeComponent();
    }

    private async void Button_Click(object sender, RoutedEventArgs e)
    {
        if (txtName.Text != "" && txtAge.Text != "")
        {
            var path = ApplicationData.Current.LocalFolder.Path + @"\users.db";
            var db = new SQLiteAsyncConnection(path);
            var data = new User
            {
                Name = txtName.Text,
                Age = txtAge.Text,
            };

            int x = await db.InsertAsync(data);
        }
        else
        {
            MessageBox.Show("enter the title and Notes");
        }
    }

    private void Button_Click_1(object sender, RoutedEventArgs e)
    { 
        RetriveUserSavedData();
    }

    private async void RetriveUserSavedData()
    {
        string Result = "";
        var path = ApplicationData.Current.LocalFolder.Path + @"\users.db";
        var db = new SQLiteAsyncConnection(path);

        List<User> allUsers = await db.QueryAsync<User>("Select * From Users");
        var count = allUsers.Any() ? allUsers.Count : 0;

        foreach (var item in allUsers)
        {
            Result += "Name: " + item.Name + "\nAge: " + item.Age.ToString() + "\n\n";
        }

        if (Result.ToString() == "")
        {
            MessageBox.Show("No Data");
        }

        else
        {
            MessageBox.Show(Result.ToString());
        }
    }

    private void txtName_TextChanged(object sender, TextChangedEventArgs e)
    {

    }

    private void txtName_GotFocus(object sender, RoutedEventArgs e)
    {
        txtName.Text = "";
    }

    private void txtAge_GotFocus(object sender, RoutedEventArgs e)
    {
        txtAge.Text = "";
    }
}
}

【问题讨论】:

  • @Gahendra Rajput。确切的问题是什么?
  • @Eldho 当模拟器关闭时,使用上面的代码输入的数据会丢失。当我单击查看客户按钮时,它不显示以前输入的客户。我希望显示之前输入的数据。有没有可能?

标签: visual-studio-2012 windows-phone-8 windows-phone-8-emulator windows-phone-8-sdk


【解决方案1】:

1.-从数据库中永久插入和获取数据(我从某个网站下载了一个代码,但是运行它后,当我关闭模拟器并尝试查看之前输入的数据时,它不会返回它)

当你关闭模拟器时,你失去了它上面的所有应用程序安装,所以如果你关闭它,你就失去了一切。如果您想测试您的数据保存,您可以关闭应用程序(仅 de 应用程序,而不是模拟器)并从 WP 模拟器中的应用程序列表中打开它。

就像它应该存储在手机内存或任何类似的地方 SQL lite不能将数据存储在SD中,它将存储在您的应用程序目录中,如果您想使用SD存储数据,可以使用二进制文件

在列表视图或网格中显示获取的数据 要在列表视图或网格中显示您的数据,您需要创建一个 ViewModel 或 DataContext,然后使用 Binding 将数据“发送”到查看。

【讨论】:

  • 嗨@Brakyo考虑到现实世界的场景,在这种情况下,当模拟器关闭时,输入的数据会丢失。如果我在 Windows 手机中部署该特定应用程序,它会保留输入的数据吗?否则会丢失?
  • @GajendraRajput 在卸载应用程序之前,数据将可用。数据库存储在每个应用程序的IsolatedStorage 中。一旦用户卸载应用程序,“AppData”例如您的数据库将丢失。如果用户重新启动手机,您仍然可以使用。模拟器每次都在初始化,所以这意味着一个新的手机实例,所以已经保存的数据会从内存中删除。尝试在手机中调试。
  • 感谢@Eldho 的解释。它大大澄清了我的疑问。
  • @GajendraRajput 是的,如果您部署在实体手机中,数据将被保留。
  • 谢谢@Brakyo 的解释
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-20
  • 1970-01-01
相关资源
最近更新 更多