The Eighth Assignment
上回说到...sqlite在windows store app与windows phone app的应用...
今天就说说sqlite在wpf的应用吧...
1.应用前的准备
首先..sqlite在wpf开发中并不像上两个应用那样有内置的库...所以只能利用现有的数据库文件来进行数据库操作...
那么首先要建一个数据库文件...于是经过百度后的多番筛选..选择了一个DatabaseNet4这样一个数据库可视化工具..
支持了很多数据库...我们选择Sqlite
建库.建表.生成的文件放在工程文件夹下bin目录下的debug目录下...
这样数据库文件我们就搞定了...
然后我们要怎么通过C#的代码连接上数据库呢..
这时我们就需要一个接口来实现这个功能...
然而VS2013是不自带这个接口的..所以我们需要自行去sqlite官网下载System.Data.Sqlite.dll文件
http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki
大概就是这个网站..找到与你使用的.net版本和操作系统对应的那个文件..
下载安装后就可以在wpf工程中引用这个接口啦...
右键工程->添加->引用
点击确定旁的浏览.找到刚才安装的那个目录下的System.Data.Sqlite.dll,确定。
还没有结束...还差最后一步
找到工程里的配置文件即App.config,将里面的内容清空,改成下列代码
<?xml version="1.0"?>
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
<requiredRuntime version="v4.0.20506" />
</startup>
</configuration>
这样前期的准备就完成啦。。。。。
2.在程序中的应用
首先是连接数据库。。。
string datasource; SQLiteConnection conn; datasource = Path.Combine("Data Source ="+AppDomain.CurrentDomain.BaseDirectory+ @"\test.sqlite"); conn = new SQLiteConnection(datasource); conn.Open();
插入数据(语句根据之前建表会有所不同,其实就是普通的sql语句
public void insert(Affair affair) { string sql = string.Format("INSERT INTO Affair VALUES('{0}','{1}','{2}',{3},{4},{5},{6})", affair.date,affair.name,affair.content,affair.importance,affair.year,affair.month,affair.day); SQLiteCommand cmd = new SQLiteCommand(sql,conn); cmd.ExecuteNonQuery(); }
删除数据
public void delete(Affair affair) { string sql = string.Format("delete FROM Affair where date='{0}' and name = '{1}' " + " and importance ={2} and year = {3} and month = {4} and day = {5}", affair.date,affair.name,affair.importance,affair.year,affair.month,affair.day); SQLiteCommand cmd = new SQLiteCommand(sql, conn); int a=cmd.ExecuteNonQuery(); if (a == 0) MessageBox.Show("删除失败"); }
选择语句
public DataRow[] selectAll() { string sql = string.Format("SELECT * FROM Affair "); SQLiteCommand cmd = new SQLiteCommand(sql, conn); DataTable dt = new DataTable(); SQLiteDataAdapter da = new SQLiteDataAdapter(); da.SelectCommand = cmd; da.Fill(dt); DataRow[] foundrow = dt.Select(); return foundrow; }
注意。这样写返回的是一个DataRow的数组,相当于一个表,可以通过foundrow[i][j]来访问第i-1行j-1列的元素
列的顺序和你建的表的列的顺序是相同的..
就像下面的代码
database db = new database(); DataRow[] foundrow = db.selectAll(); for(int i=0;i<foundrow.Length;i++) { Affair tempa = new Affair(); tempa.date = (string)foundrow[i][0]; tempa.name = (string)foundrow[i][1]; tempa.content = (string)foundrow[i][2]; tempa.importance = (int)foundrow[i][3]; tempa.year = (int)foundrow[i][4]; tempa.month = (int)foundrow[i][5]; tempa.day = (int)foundrow[i][6]; MyItems item = new MyItems(tempa);//MyItems 是我自己写的控件.就不作解释了.只是想让你们看看选出来的数据该怎么用 listView1.Items.Add(item); // }
当然,如果想选其他的数据可以按照我的SelectAll()的形式自己随意发挥。
恩。今天的课就先讲到这里。。。。。。