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

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

时间: 2024-10-08 18:43:28

The Eighth Assignment的相关文章

Algorithm Part I:Programming Assignment(2)

问题描述: Programming Assignment 2: Randomized Queues and Deques Write a generic data type for a deque and a randomized queue. The goal of this assignment is to implement elementary data structures using arrays and linked lists, and to introduce you to g

RailsCast26 Hackers Love Mass Assignment rails中按params创建、更新model时存在的安全隐患

Mass assignment是rails中常用的将表单数据存储起来的一种方式.不幸的是,它的简洁性成了黑客攻击的目标.下面将解释为什么及如何解决. 上述表单为一个简单的注册表单.当用户填入name,点击提交时,一个新用户被创建.用户模型被如下定义: ruby create_table :users do |t| t.string :name t.boolean :admin, :default => false, :null => false end 当用户点击提交时,如下的action被执

hdu4781 Assignment For Princess(构造)

题目链接:hdu4781 Assignment For Princess 题意:n个点m条边,每条有向边的权值分别是1,2,3…m,一个点能到达任意一个点,没有重边和自环,没有任何两条边的权值相同,任意一个有向环的权值和必须是3的倍数,现在需要把这个图输出来. 题解:注意到题目给出的范围m >= n+3,所以一定是可以构造出一个1~n的回路使得权值和为3的倍数的,可以让前n-1条边权值为1~n-1,第n条边(n->1)可以为n, n+1, n+2从而满足题意,后面再连任意两条不相邻的边时,边权

&lt;Effective C++&gt;读书笔记--Ctors、Dtors and Assignment Operators

<Item 5> Know what functions C++ silently writes and calls 1.If you don't declare them yourself, compilers will declare their own versions of a copy constructor, a copy assignment operator, and a destructor. Furthermore, if you declare no constructo

POJ 3189 Steady Cow Assignment(最大流)

POJ 3189 Steady Cow Assignment 题目链接 题意:一些牛,每个牛心目中都有一个牛棚排名,然后给定每个牛棚容量,要求分配这些牛给牛棚,使得所有牛对牛棚的排名差距尽量小 思路:这种题的标准解法都是二分一个差值,枚举下界确定上界,然后建图判断,这题就利用最大流进行判断,值得一提的是dinic的效率加了减枝还是是卡着时间过的,这题理论上用sap或者二分图多重匹配会更好 代码: #include <cstdio> #include <cstring> #inclu

hdu 1845 Jimmy’s Assignment (二分图)

Jimmy's Assignment Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) Total Submission(s): 896    Accepted Submission(s): 379 Problem Description Jimmy is studying Advanced Graph Algorithms at his university. His most

FreeRTOS的application assignment

Please follow the steps precisely in order to complete the objectives of the assignment. If you use the C++ FreeRTOS framework, it should make the assignment significantly easy. Create a producer task that takes 1 light sensor value every 1ms. Collec

用户无法进入SDSF,报NO GROUP ASSIGNMENT错误

注:命令行小写部分表出需要根据自己的情况改变!! a)激活SDSF资源类 SETROPTS CLASSACT(SDSF) b)查看SDSF资源类的PROFILE RLIST SDSF * c)如果不存在GROUP.ISFUSER.servername的PROFILE,则需要定义, RDEFINE SDSF (GROUP.ISFUSER.servername) OWNER(userid or group name) UACC(READ) 这样,所有用户都可以有读取权限,就都可以访问SDSF了 附1

THE EIGHTH DAY

#include<iostream> #include<cstdio> using namespace std; int N,M,cnt=0; int a[10010]; bool f[10010]; bool flag; int main() { freopen("T1.in","r",stdin); freopen("T1.out","w",stdout); cin>>N>>