ADO.NET学习之(二)
2、ADO.NET影响一行的数据操作
上一节复习了数据库的连接和数据库的访问方式。本章将讲解ADO.NET影响行的数据操作。在实际应用中,可以向数据库插入、更新或删除一条数据,这些都称为仅影响一行的数据操作。通过ADO.NET提供的DataSet对象和DataAdapter对象可以实现以上操作,操作流程如下:
(1)DataSet对象
DataSet是ADO.NET的核心概念,它是支持ADO.NET断开式、分布式数据方案的核心对象。DataSet对象时创建在内存中的集合对象,它可以包含任何数量的数据表,以及所有表的约束、索引和关系,相当于在内存中的一个小型关系数据库。一个DataSet对象包括一组DataTable对象,其中每个DataTable对象是由DataColumn和DataRow对象组成的。
可以使用DataAdapter示例来填充DataSet。代码如下:
SqlDataAdapter Da = new SqlDataAdapter(sqlStr, myConn); //创建DataAdapter实例
DataSet Ds = new DataSet(); //创建DataSet实例
Da.Fill(Ds,”Student”); //填充DataSet
(2)DataAdapter对象
DataAdapter对象时DataSet对象和数据源之间联系的桥梁,主要是从数据源中检索数据、填充DataSet对象中的表或者把用户对DataSet对象做出的更改写入到数据源。
下面介绍DataAdapter对象的常用属性,如表1、表2所示:
表1 DataAdapter对象的常用属性及说明
属性 |
说明 |
SelectCommand |
获取或设置用于在数据源中选择记录的命令 |
InsertCommand |
获取或设置用于将新纪录插入到数据源中的命令 |
UpdateCommand |
获取或设置用于更新数据源中记录的命令 |
DeleteCommand |
获取或设置用于从数据集中删除记录的命令 |
表2 DataAdapter对象的常用方法及说明
方法 |
说明 |
Fill |
从数据源中提取数据以填充数据集 |
Update |
更新数据源 |
接下来讲解如何使用DataAdapter对象插入、更新和删除数据。
(1)DataAdapter对象插入数据(利用InsertCommand属性)
这里提醒一下,在使用DataAdapter对象插入数据时,如果未设置InsertCommand属性,在保证DataSet中存在主键信息的前提下设置其SelectCommand属性并使用CommandBuilder类可以自动生成InsertCommand以完成插入数据的操作。代码如下;
static void Main(string[] args)
{
string conStr = "Server=.;database=db_10;uid=sa;pwd=";
using (SqlConnection conn = newSqlConnection(conStr))
{
conn.Open();//打开数据库连接
string sqlStr = "select * from tb_UserInfo";
SqlCommand insertcmd = newSqlCommand(sqlStr, conn);
SqlDataAdapter da = newSqlDataAdapter();
//da.InsertCommand = insertcmd; 用下面两句代码代替
//自动生成插入数据的SQL语句
SqlCommandBuilder cb = newSqlCommandBuilder(da);
da.SelectCommand = insertcmd;//设置命令对象属性
DataSet ds = newDataSet();
int count = da.Fill(ds, "tb_UserInfo");//填充DataSet
if (count >= 0)
{
DataRow dr = ds.Tables["tb_UserInfo"].NewRow();//添加新行
dr["UserName"] = "小赵";
dr["Pwd"] = "123";
ds.Tables["tb_UserInfo"].Rows.Add(dr);//向数据集中添加新行
da.Update (ds,"tb_UserInfo");//更新数据库
}
ds.Clear();
Console.WriteLine("数据插入成功!");
}
}
(2)DataAdapter对象更新数据(利用UpdateCommand属性)
再次强调,在使用DataAdapter对象插入数据时,如果未设置UpdateCommand属性,在保证DataSet中存在主键信息的前提下设置其SelectCommand属性并使用CommandBuilder类可以自动生成UpdateCommand以完成插入数据的操作。
下面例子就是修改数据库中一行数据Pwd列的值(即修改用户密码):
static void Main(string[] args)
{
string conStr = "Server=.;database=db_10;uid=sa;pwd=";
using (SqlConnection conn = newSqlConnection(conStr))
{
conn.Open();
string sqlStr="select * from tb_UserInfo where UserName=@UserName";
SqlCommand updatecmd=newSqlCommand (sqlStr,conn);
updatecmd .Parameters.Add ("@UserName", SqlDbType.VarChar,50).Value ="小赵";
SqlDataAdapter da=newSqlDataAdapter();
//自动生成更新数据的SQL语句
SqlCommandBuilder cb=newSqlCommandBuilder(da);
da.SelectCommand =updatecmd ;
DataSet ds = newDataSet();
int count = da.Fill(ds, "tb_UserInfo");
if (count > 0)
{
ds.Tables["tb_UserInfo"].Rows[0]["Pwd"] = "111"; //修改密码字段的值
da.Update(ds, "tb_UserInfo"); //将DataSet中的数据更新到数据库中
}
ds.Clear();
Console.WriteLine("数据更新成功!");
}
}
(3)DataAdapter对象删除数据(利用DeleteCommand属性)
与上面例子差不多,可以调用DataRow对象的Delete方法删除DataSet数据集中的一行。
ds.Tables[“tb_UserInfo”].Rows[0].Delete(); //删除行数据
da.Update(ds, “tb_UserInfo”); //更新数据库
3、ADO.NET影响多行的数据操作
(1)DataAdapter对象插入多条记录
对于多行操作,其实跟一行操作时类似的。只是在数据集中的代码稍微复杂一点,通过调用DataRow对象的NewRow和Add方法为DataSet数据集添加新行数据:
DataRow dr = ds.Tables["tb_UserInfo"].NewRow();//添加新行
dr["UserName"] = "小明";
dr["Pwd"] = "123";
ds.Tables["tb-UserInfo"].Rows.Add();//向数据集中添加第一行
dr = ds.Tables["tb_UserInfo"].NewRow();//继续添加新行
dr["UserName"] = "小张";
dr["Pwd"] = "111";
ds.Tables["tb-UserInfo"].Rows.Add();//向数据集中添加第二行
da.Update(ds, "tb_UserInfo");//更新数据库
(2)DataAdapter对象批量更新多行数据
填充完DataSet后,通过for循环语句为DataSet中的每行数据(除第一行)的Pwd字段赋值,并更新数据库。
for (int i = 1; i < count; i++)
{
ds.Tables["tb_UserInfo"].Rows[i]["Pwd"] = "000";//修改DataSet中的数据到数据库
}
da.Update(ds, "tb_UserInfo");
注意:在上面代码中,for循环语句中变量i的初始值是1而不是0,表明从表中的第二行数据开始更新。
(3)DataAdapter对象批量删除多行数据
同样利用for语句循环调用DataRow对象的Delete()方法删除多行数据:
for (int i = 2; i < count; i++)
{
ds.Tables["tb_UserInfo"].Rows[i].Delete();//删除数据集中的指定数据行
}
da.Update(ds, "tb_UserInfo");
这里要提醒一下,DataAdapter对象的Fill()方法返回一个整型数值,即填充到DataSet中的数据行数。
本文章重点讲解了数据库中影响一行或多行的数据操作,主要涉及到使用DataAdapter对象填充DataSet,然后对数据集进行插入、更改和删除的操作,大家应该熟练掌握DataAdapter和DataSet对象的各种属性和方法,以便以后有用武之处。
下一章将介绍数据集的一些错误操作,有利于我们养成良好的编程习惯。
本文出自 “左瞳 |@右眸” 博客,转载请与作者联系!