在WindowsPhone中使用现有的Sqlite

本博文编写环境 VS2010 sp1+WP7.1SDK

之前在Windows Phone可以使用Sqlite数据库,网上的例子有很多,一般的需求就是在程序部署之后,程序运行期间创建的数据库,通过Sqlite Clientfor Windows Phone 7可以实现。具体博文请参阅在Windows Phone上使用SQLite,并获取和编辑模拟器中的数据库文件

上面的使用的数据库,都是程序运行时创建的,可是如何才能使用我们自己有的数据库呢。因为我们操作的数据库是位于隔离存储空间里的,如果把数据库直接放在工程目录下是不可行的。查询各种资料可以把原有的数据库作为资源放在程序的目录下。当程序第一次运行的时候把数据库资源通过二进制流放在程序的隔离空间中,之后的操作就是对数据库的使用了。

可是,把数据库拷入隔离空间这一步也很容易完成。可是接下来使用Sqlite Clientfor Windows Phone 7 发现对数据库操作错误。。不知道为啥。于是考虑使用其他的第三方类库。后来通过各种搜索,各种尝试,终于找到了Vici CoolStorage 具体操作如下。

第一步我使用SqliteManager(火狐浏览器的插件,关于操作sqlite操作的工具有好多的奥)创建一个名字为test.sqlite的数据库。接下来创建一个表格myuser 加入几列内容如下

name

age

"张三"

"20"

"李四"

"21"

"王五"

"22"

"赵六"

"23"

"刘七"

"25"

第二步 把该数据库复制到VS的工程目录下如下,将BuildAction 改为Content 切记这一点。

第三步 就是引入操作数据的DLL了。如果你的VS中已经安装了Nuget,点击Mange Nuget Packages。然后搜索Vici CoolStorage

双击Vici CoolStorage,就会开始下载这个东西了

下载完成之后,发现工程的引用目录下多两个引用。做了这么多就是为了加入这两个dll  。。Vici.CoolStorage.WP7.dll以及Vici.Core.WP7.dll。如果你木有用过nuget,可以在我给的这个地址下载需要的DLL。,手动加入即可。地址

下面开始写代码了。

将数据库复制到隔离存储的代码如下封装好了方法

        /// <summary>
        ///通过!iStorage.FileExists(fn)保证 程序第一次
        ///运行的时候才会将数据库复制
        ///到隔离存储空间中,
        ///fn为复制的数据库路径及名称
        /// </summary>
        private void move(string fn)
        {
            StreamResourceInfo sr = Application.GetResourceStream(new Uri(fn, UriKind.Relative));
            IsolatedStorageFile iStorage = IsolatedStorageFile.GetUserStoreForApplication();
            if (!iStorage.FileExists(fn))
            {
                using (var outputStream = iStorage.OpenFile(fn, FileMode.CreateNew))
                {
                    byte[] buffer = new byte[10000];

                    for (; ; )
                    {
                        int read = sr.Stream.Read(buffer, 0, buffer.Length);

                        if (read <= 0)
                            break;

                        outputStream.Write(buffer, 0, read);
                    }
                }
            }
        }

  

接下来的代码是使用隔离存储空间的sqlite数据库。插入记录,查询记录

private void loaddata_Click(object sender, RoutedEventArgs e)
{
string fn = "test.sqlite";
move(fn);
CSConfig.SetDB(fn);//这句话很重要。设置使用的数据库
int i = CSDatabase.ExecuteNonQuery("insert into myuser (name,age) values ('坤坤',24)");//里面是SQl语句
CSGenericRecordList cslis = CSDatabase.RunQuery("select * from myuser");//可以理解为返回一个表格
string names="";
foreach (CSGenericRecord cs in cslis)
{
names += "名字:" + cs["name"].ToString() + " 年龄:" + cs["age"].ToString() + "\n";
}
MessageBox.Show(names);
}

在以上代码里 实现了连接数据库CSConfig.SetDB(fn); 插入一条记录 ,查询记录。前5条是之前数据库中的数据。

 看运行效果 (真机测试通过)

总结:

以上操作关键内容主要分为两步

使用程序将数据库复制到隔离存储(第一次使用的时候才会复制,判断是否存在,如果存在就不再复制了。)

其次就是对Vici CoolStorage 使用了请参考官方地址。这个东西真的很强大,能够操作的数据库不只是Sqlite 也不限于WP。各种数据库,各种平台。

转载请注明出处

欢迎关注我的新浪微博 http://weibo.com/u/1821556025

原文地址:https://www.cnblogs.com/dubaokun/p/2852469.html