zoukankan      html  css  js  c++  java
  • 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+ @"	est.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()的形式自己随意发挥。

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

  • 相关阅读:
    整理牙刷
    color 圆盘染色
    数论の一波流[长期更新]
    生成树
    一维黑白棋
    Factorials
    平面分割问题
    poj1183 反正切函数
    烽火传递
    校门外的树
  • 原文地址:https://www.cnblogs.com/tiny-home/p/4495941.html
Copyright © 2011-2022 走看看