WinPhone开发数据库相关操作总结

1.首先来说下wp对.sqlite数据库的操作支持,从google,百度,codeplex..等等网站找寻到以下方式;

(1)最古老的要数引用第三方Community.CsharpSqlite.WP.dll程序集来使用的(注意:如果你要操作现有存在的.sqlite数据库,而不是自己从头开始创建数据表,添加数据...等,那么你需要在codeplex网站上找到这个源码,进行相应的修改,这样才能够支持使用,不然会碰到很郁闷的"无法打开数据库连接.."之类的错误)

(2)第二种跟第一种有所类似,不过它的封装有所不同C#-SQLiteWP7.Preview1.Release,这个也在Codeplex上面,代码使用跟第一种类似,不过里面的方法有返回DataReader之类的对象,这样方便我们做相应数据读取操作,虽然数据库也是copy到独立存储根目录下的,不过这里的连接字符串有所不同,格式如下:

"Version=数据库版本号,uri=file:你的数据库完整名称"
 
简单的Code操作流程:
 1 using (SqliteConnection conn = new SqliteConnection("Version=3,uri=file:test.db"))
 2 
 3 {
 4 
 5 conn.Open();
 6 
 7 using (SqliteCommand cmd = conn.CreateCommand())
 8 
 9 {
10 
11 cmd.CommandText = "sql语句";
12 
13 cmd.ExecuteNonQuery();
14 
15  
16 
17 cmd.Transaction = conn.BeginTransaction();
18 
19 //sql语句加入参数
20 cmd.CommandText = "INSERT INTO test(col, col2, col3, col4, col5) VALUES(@col, @col2, @col3, @col4, @col5);SELECT last_insert_rowid();";
21 
22 cmd.Parameters.Add("@col", null);
23 
24 cmd.Parameters.Add("@col2", null);
25 
26 cmd.Parameters.Add("@col3", null);
27 
28 cmd.Parameters.Add("@col4", null);
29 
30 cmd.Parameters.Add("@col5", null);
31 
32 cmd.Transaction.Commit();
33 
34 cmd.Transaction = null;
View Code

 

 

(3)如果自己不想改Community.CsharpSqlite.WP这个源码的话,那就在网上找找Vici.CoolStorage.WP7和Vici.Core.WP7这两个程序集,个人感觉这个方式,代码操作简单,性能较第一种好些许;

 1 //注意:先往项目添加Vici.CoolStorage.WP7.dll和Vici.Core.WP7.dll         
 2 string fn = "MNSECRET.DB";//您的数据库名称,注意放在项目根目录下,且设置生成操作为Resource,不复制
 3             Assembly assem = Assembly.GetExecutingAssembly();
 4             string assemeblyName=assem.FullName.Substring(0, assem.FullName.IndexOf(,));
 5             Uri dbURi= new Uri("/" + assemeblyName + ";component/" + fn,
 6       UriKind.Relative);
 7             //程序第一次运行把SQLite数据库Copy到本地存储
 8             StreamResourceInfo sr = Application.GetResourceStream(dbURi);
 9             IsolatedStorageFile iStorage = IsolatedStorageFile.GetUserStoreForApplication();
10             if (!iStorage.FileExists(fn))
11             {
12                 using (var outputStream = iStorage.OpenFile(fn, FileMode.CreateNew))
13                 {
14                     byte[] buffer = new byte[10000];
15                     for (; ; )
16                     {
17                         int read = sr.Stream.Read(buffer, 0, buffer.Length);
18 
19                         if (read <= 0)
20                             break;
21 
22                         outputStream.Write(buffer, 0, read);
23                     }
24                 }
25             }
26             //连接数据库
27             CSConfig.SetDB(fn);
28             //数据操作
29             CSGenericRecordList cslis = CSDatabase.RunQuery("SELECT* FROM CITY");//可以理解为返回一个表格
30              foreach (CSGenericRecord cs in cslis)
31              {
32                  //取表中的每一行数据
33                  string result= cs["数据表字段名"].ToString();
34 
35              }
View Code

关于CSDatabase里面的操作方法,大家可以到http://viciproject.com/wiki/Projects/CoolStorage/WindowsPhone这个网站去看看,可能我使用的有些许性能耗损,请大家一起探讨学习

2.第三方.sqlite数据库性能有点问题,这时候就需要用到自带的.sdf数据库了,这里推荐Vs插件SQL Server Compact Toolbox,它可以创建3.5和4.0版本的数据库,注意Wp貌似支持3.5的,之前我用4.0的,结果悲剧了,后来还是靠SQL Server Compact Toolbox重新创建3.5的,导入数据啥的(建议一张张表导入数据,不然Vs会卡死),利用这个工具我们还可以创建表映射的业务对象和数据上下文啥的,大家一起摸索吧

3.最后附上一个之前大学时代做过的wp7.5应用:http://www.windowsphone.com/zh-cn/store/app/%E6%81%B6%E9%AD%94%E6%9E%9C%E5%AE%9E%E5%9B%BE%E9%89%B4/9a491e8f-29b4-499b-a24b-81e3484eb404  大家多多吐槽哈!!!

(当时只是练练数据库操作技术和开发者提交app操作流程...个人感觉这个应用没多大意义)

 

 

http://www.silverlightchina.net/html/zhuantixilie/winphone7/2012/0318/14558.html

http://www.oschina.net/translate/generate-windows-phone-8-local-database?print

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。