9.3 ASP.NET更新数据库

  在应用程序的开发中,常常会需要对数据库中现有的内容进行更新操作。ADO.NET提供了若干不同的更新数据库中记录的方法,如果需要更新数据库中的某列的值或者某几列的值,则需要使用SQL UPDATE命令进行数据库更新。

9.3.1 SQL UPDATE数据更新语句
  使用SQL UPDATE语句能够实现数据库中数据的更新,SQL UPDATE语句的一般语法格式如下所示。
+展开
-SQL
    UPDATE
    {table_name}
    {
     SET column1_name=expression1,
         column2_name=expression2,
         .
         .
         columnN_name=expressionN
    {WHERE condition1 AND|OR condition2}
    }

上述代码规范了UPDATE语句的编写规范,其中:
1)UPDATE是SQL更新关键字。
2)table_name是需要更新的表的名称。
3)columnN_name是需要更新的列的名称。
4)expression是列相应的值。
5)WHERE是SQL语句关键字。
6)condition是条件。
  如果需要更新表mytable中的某行的数据,则可以编写SQL UPDATE语句进行更新,示例代码如下所示。
+展开
-SQL
    UPDATE mytable SET title=’修改后的数据’ where id=3

上述代码更新了id为3的数据中的title,并将title字段的值修改为“修改后的数据”。

9.3.2 使用Command对象更新记录
  如需要执行UPDATE语句时,同样可以使用Command对象执行语句。Command对象基本上能够执行所有需要进行数据更新的SQL语句。使用Command对象进行数据库操作的步骤基本如下所示。
1)创建数据库连接。
2)创建一个Command对象,并指定一个SQL UPDATE(或存储过程)。
3)使用Command对象的ExecuteNonQuery()方法执行UPDATE(或存储过程)。
4)关闭数据库连接。
  当需要执行UPDATE语句时,首先必须要打开到数据库的连接,打开连接后,使用Command对象执行SQL语句,示例代码如下所示。
+展开
-C#
            string str = "server='(local)';database='mytable';uid='sa';pwd='sa'";
            SqlConnection con = new SqlConnection(str); //创建连接对象
            con.Open();//打开连接

  其中,str同样是数据连接字串,用来初始化Connection对象,说明如何连接数据库,当数据库连接完毕后,可以使用Open方法打开数据连接。完成数据库连接后,需创建一个新的Command对象进行数据更新,示例代码如下所示。
+展开
-C#
            SqlCommand cmd = new SqlCommand("UPDATE mynews SET title=’修改后的数据’ 
            where id=3", con);//创建Command对象

  Command对象的构造函数的参数有两个,一个是需要执行的SQL语句,令一个是数据库连接对象。创建Command对象后,就可以执行SQL命令,执行后完成并关闭数据连接,示例代码如下所示。
+展开
-C#
            cmd.ExecuteNonQuery();//执行SQL命令
            con.Close();//关闭连接

  上述代码使用了ExecuteNonQuery()方法进行SQL UPDATE语句的执行,从而能够更新数据库中的相应数据。

9.3.3 使用DataSet数据集更新记录
  ADO.NET的DataSet对象提供了更好的编程实现数据库的更新功能。因为DataSet对象与数据库始终不是连接的,开发人员可以向脱离数据库的DataSet对象中增加列、删除列或更新列。当完成了修改后,则可以通过将DataSet对象连接到DataAdapter对象来将记录传输给数据库。DataSet更新记录的步骤如下所示。
1)创建一个Connection对象。
2)创建一个DataAdapter对象。
3)初始化适配器。
4)使用数据适配器的Fill方法执行SELECT命令,并填充DataSet。
5)执行SqlCommandBuilder方法生成UpdataCommand方法。
6)创建DataTable对象并指定相应的DataSet中的表。
7)创建DataRow对象并查找需要修改的相应行。
8)更改DataRow对象中的列的值。
9)使用Update方法进行数据更新。
  在更新记录前,首先需要查询出相应的数据,查询相应的数据后才能够填充DataSet,示例代码如下所示。
+展开
-C#
            string str = "server='(local)';database='mytable';uid='sa';pwd='sa'"; //创建连接字串
            SqlConnection con = new SqlConnection(str);//创建连接对象
            con.Open();//打开连接
            string strsql = "select * from mynews";//执行查询
            SqlDataAdapter da = new SqlDataAdapter(strsql, con);//使用DataAdapter
            DataSet ds = new DataSet(); //使用DataSet
            da.Fill(ds, "datatable");//使用Fill方法填充DataSet

  上述代码将查询出来的数据集保存在表为datatable的DataSet记录集中,DataSet记录集的表的名称可以按照开发人员的喜好来编写,从而区分内存中表的数据和真实的数据库的区别。当需要处理数据时,只需要处理相应名称的表即可,示例代码如下所示。
+展开
-C#
            DataTable tb = ds.Tables["datatable"];

  当需要执行更新时,可直接使用DataSet对象进行更新操作来修改其中的一行或多行记录,示例代码如下所示。
+展开
-C#
            DataTable tb = ds.Tables["datatable"];
            tb.PrimaryKey = new DataColumn[] { tb.Columns["id"] };
            DataRow row = tb.Rows.Find(1);
            row["title"] = "新标题";

  当需要更新某个记录时,必须在更新之前查找到该行的记录。可以使用Rows.Find方法查找到相应的行,然后将数据集表中的该行的列值进行更新。使用DataAdapter的Update方法可以更新DataSet数据集,并保持数据集和数据库中数据的一致性,示例代码如下所示。
+展开
-C#
            da.Update(ds, "datatable");

  在执行以上代码,可能会抛出异常“当传递具有已修改行的DataRow集合时,更新要求有效的UpdateCommand”。这是因为在更新时,并没有为DataAdapter对象配置UpdateCommand方法,可以通过SqlCommandBuilder对象配置UpdateCommand方法,示例代码如下所示。
+展开
-C#
SqlCommandBuilder build = new SqlCommandBuilder(da);

  上述代码为DataAdapter对象自动配置了UpdateCommand,DeleteCommand等方法,当执行更新时,无需手动配置UpdateCommand方法。

加支付宝好友偷能量挖...


评论(0)网络
阅读(121)喜欢(0)Asp.Net/C#/WCF