使用SqlDataAdapter和DataSet维护数据库表数据一般按照如下步骤操作:
1.建立数据库连接
2.使用sql查询语句创建SqlDataAdapter实例,并利用SqlCommandBuilder自动生成SqlDataAdapter对象的InsertCommand,UpdateCommand,DeleteCommand属性.
3.创建dataset对象,并用SqlDataAdapter对象的Fill方法对dataset进行填充.
4.利用dataset表的属性和方法,对表的数据进行操作
5.调用SqlDataAdapter对象的Update方法,将维护好的表数据更新到数据源,即sql server数据库.
如下demo实现了使用DataAdapter和DataSet维护数据库的user表中的记录信息,表的主键为ID,另有字段name, 实现如下维护:
(1) 插入两条新记录(DataRow):记录1(124, "Lisi")和记录2(125, "ZhangSan")
(2) 更新记录1(key = 124)的内容为(124, "Lisi‘s sister")
(3)删除记录2(key = 125).
using (SqlConnection cn = new SqlConnection("Connectionstring"))
{cn.Open();SqlDataAdapter sda = new SqlDataAdapter("selectcmd", cn);//使用sqlcommandBuilder对象自动创建sda对象的insertCommand,updateCommand,deleteCommandSqlCommandBuilder sqlbulider = new SqlCommandBuilder(sda);DataSet ds = new DataSet();//设置dataset表的主键字段,DataRowCollection方法Find参数是主键列,否则找不到唯一的单行sda.Fill(ds, "tableName");//将隐式query到的数据填充到ds中的表中,表命名为tableName//dateset此处只返回一个表,所以tables数据索引用索引0或表名都可以.ds.Tables["tableName"].PrimaryKey = new DataColumn[] { ds.Tables[0].Columns["ID"] };//设置主键所在的Datacolumn,一般设例如ID这些唯一数据的列为primarykeds.Tables["tableName"].Rows[0]["ID"] = 123;//向表第一行的ID字段赋新值//add a new DataRow at table of datasetDataRow dr_new = ds.Tables[0].NewRow();dr_new["ID"] = 124;dr_new["name"] = "Lisi";ds.Tables[0].Rows.Add(dr_new);//更新表字段值DataRow dr_key124 = ds.Tables[0].Rows.Find(124);dr_key124["name"] = "Lisa's sister";//dr_key124[1] = "Lisa's sister";//add 2nd new DataRow at table of datasetDataRow dr_new2 = ds.Tables[0].NewRow();dr_new["ID"] = 125;dr_new["name"] = "ZhangSan";ds.Tables[0].Rows.Add(dr_new2);//remove the DataRow from table of dataset which the primary key column value is 124.//Find参数为主键列的字段值,参数为主键。是为了一个值只有一个字段与之对应,否则参数不是主键,则可能出现返回多行,而返回对象是Datarow,就报错了,很巧妙啊!DataRow dr_remove = ds.Tables[0].Rows.Find(124);//找到主键是124所在的行返回ds.Tables[0].Rows.Remove(dr_remove);//将维护更新后的表更新到数据库sda.Update(ds, "tableName");
}