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()的形式自己随意发挥。

恩。今天的课就先讲到这里。。。。。。

 

posted on 2015-05-11 22:37  Tiny丶  阅读(190)  评论(0编辑  收藏  举报

导航