ADO.NET学习之(二)

ADO.NET学习之

2ADO.NET影响一行的数据操作

 上一节复习了数据库的连接和数据库的访问方式。本章将讲解ADO.NET影响行的数据操作。在实际应用中,可以向数据库插入、更新或删除一条数据,这些都称为仅影响一行的数据操作。通过ADO.NET提供的DataSet对象和DataAdapter对象可以实现以上操作,操作流程如下:




1DataSet对象

DataSetADO.NET的核心概念,它是支持ADO.NET断开式、分布式数据方案的核心对象。DataSet对象时创建在内存中的集合对象,它可以包含任何数量的数据表,以及所有表的约束、索引和关系,相当于在内存中的一个小型关系数据库。一个DataSet对象包括一组DataTable对象,其中每个DataTable对象是由DataColumnDataRow对象组成的。

可以使用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("数据插入成功!");

    }

}


2DataAdapter对象更新数据(利用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影响多行的数据操作

1DataAdapter对象插入多条记录

对于多行操作,其实跟一行操作时类似的。只是在数据集中的代码稍微复杂一点,通过调用DataRow对象的NewRowAdd方法为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,然后对数据集进行插入、更改和删除的操作,大家应该熟练掌握DataAdapterDataSet对象的各种属性和方法,以便以后有用武之处。

下一章将介绍数据集的一些错误操作,有利于我们养成良好的编程习惯。




本文出自 “左瞳 |@右眸” 博客,转载请与作者联系!

你可能感兴趣的:(数据库一行或多行操作;数据表)