下面以Access数据库为例说明,用C#的DataSet类访问数据库的一些操作方法。
操作涉及的主要C#类有:
DataSet:对应数据库表的一个集合,实际上是数据库表在内存中的一个缓存
DataTable:对应数据库表,是数据库表行的集合
DataRow:对应数据库表行
OleDbConnection:建立数据库连接
OleDbDataAdapter:由数据库生成DataSet,并负责DataSet与数据库的同步
OleDbCommandBuilder:生成更新数据库所需的指令
DataSet、DataTable、DataRow用于数据在缓存中的操作,这上面的操作只有更新到数据库中,修改结果才会被永久保存。OleDbConnection 是用OLEDB方法连接数据库所必需的。OleDbDataAdapter和OleDbCommandBuilder用来生成DataSet,完成数据库更新。与OleDbDataAdapter和OleDbCommandBuilder相对应,SqlDataAdapter和SqlCommandBuilder也可以完成用SQL语言为指令的数据库更新。
假设在D:盘创建了Access数据库,其路径为d:\0DBAcs\account.mdb,数据库中有一张名为kaizhi的数据库表。表结构如下:
表名;Kaizhi | ||||
字段 | Field Name | 类型 | 说明 | |
1 | 开支ID | kzID | 长整型 | 自动编号 |
2 | 开支人 | Kzren | 文本 | 50字符 |
3 | 开支项目名 | kzname | 文本 | 50字符 |
4 | 日期 | riqi | 日期/时间 | 99-99-99;0掩码 |
5 | 开支说明 | shuoming | 文本 | 225字符 |
6 | 总金额 | zonge | 单精度 | 小数点任意;这项开支的总花费 |
7 | 数量 | shuliang | 长整型 | |
8 | 单价 | Danjia | 单精度 | 小数点任意 |
表建好之后:(1)对表中添加新数据(2)查询表中的某个字段。为了实现这两项功能,以下几个问题要考虑:
1准备工作
声明必须的公共变量
建立与数据库的连接,创建DataSet对象
2添加记录
在DataSet对象上添加记录
同步DataSet对象对象与数据库中的数据,这一点很重要,很多人忘记了数据进行同步,结果往往是添加、修改的数据不能保存到数据库中。
3查询数据库表中某记录的某字段;
我们可以将上述功能用一个类DataOper实现,下面是程序设计的主要活动。
声明要用的C#系统类
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Data;
using System.Data.OleDb;
using System.Data.SqlClient;
声明DataOper类中的公共变量
private string DBlocation;
private OleDbConnection dbconn; //数据库连接
private OleDbDataAdapter da;
建立与数据库的连接,这里采用了OLEDB方法:
dbconn = new OleDbConnection(@"provider=microsoft.jet.oledb.4.0; Data Source=d:\0DBAcs\account.mdb");
dbconn.Open();
创建DataSet对象
da = new OleDbDataAdapter(@"select * from kaizhi", dbconn); //引用数据库连接dbconn并依据SQL语句"select * from kaizhi"创建OleDbDataAdapter对象da
DataSet ds = new DataSet(); //创建DataSet对象
da.Fill(ds); //用OleDbDataAdapter对象da填充、更新刚创建的DataSet对象
添加记录并更新数据库
OleDbCommandBuilder cb = new OleDbCommandBuilder(da); // 创建OleDbCommandBuilder对象cb用于更新OleDbDataAdapter对象da的Insert、Delete、Update指令
da.UpdateCommand = cb.GetUpdateCommand(); //更新OleDbDataAdapter对象da的指令
设计人员可以编写自己的更新指令,也可以象上面所写的那样用系统默认的指令。但不管怎样,上面的语句不能缺少,否则程序在运行中会抛出异常System.InvalidOperationException,并提示:Update requires a valid InsertCommand when passed DataRow collection with new rows.
DataRow drx = ds.Tables[0].NewRow(); //创建一条新记录行
drx["kzren"] = "kzren";
drx["kzname"]="kzname";
drx["riqi"]=2008-10-11;
drx["shuoming"]="shuoming";
drx["zonge"] = 12;
drx["shuliang"] = 3;
drx["danjia"] = 4;
ds.Tables[0].Rows.Add(drx); //在表中追加记录
da.Update(ds); //更新数据库
要查询引用某记录的某字段,直接按如下的方法引用就可以了。
String kx=ds.Tables[0].Rows[0]["kzren"].ToString()
更多推荐
c# 与 Access数据库 dataset操作
发布评论