ADO.NET 快速入门(五):从 DataSet 更新数据库

该主题说明了如何使用 DataSet 在数据库中更新数据。你依然可以直接使用 SqlCommand 在数据库中插入、更新、和删除数据,记住这一点也很重要。理解“ 从数据库填充DataSet”涵盖的概念有助于你理解这个主题。
 
 
前一篇“ 从数据库填充 DataSet”涵盖的部分主题包括从数据库检索数据和填充到 DataSet,以及 DataSet 怎样有别于数据库。一旦 DataSet 被加载,你可以修改数据,并且DataSet 会跟踪变化。
 
 
DataSet 可以被认为是从数据库检索出的在内存中的缓存数据。DataSet 包含一组表、关系、和约束。示例1中演示如何使用 Add 方法在 DataTable 添加新数据到 DataSet。Add 方法要么接受预期数据列的数组,要么接受 DataRow 作为参数。
 
 
示例1:
 
复制代码
            SqlConnection myConnection = new SqlConnection("server=(local);Integrated Security=SSPI;database=northwind");
            SqlDataAdapter myDataAdapter = new SqlDataAdapter("SELECT * FROM Customers", myConnection);

            DataSet myDataSet = new DataSet();
            DataRow myDataRow;

            // 创建命令构建器,会自动创建更新命令,不必手动提供或创建。
            SqlCommandBuilder myCommandBuilder = new SqlCommandBuilder(myDataAdapter);

            // 为 MissingSchemaAction 属性设置 AddWithKey,除非指定 AddWithKey,Fill 将不会检索到主键 & 唯一键信息。
            myDataAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;
            myDataAdapter.Fill(myDataSet, "Customers");

            myDataRow = myDataSet.Tables["Customers"].NewRow();
            myDataRow["CustomerId"] = "NewID";
            myDataRow["ContactName"] = "New Name";
            myDataRow["CompanyName"] = "New Company Name";
            myDataSet.Tables["Customers"].Rows.Add(myDataRow);

            myDataAdapter.Update(myDataSet, "Customers");
复制代码

 

 
请记住,DataTable 必须通过 NewRow 方法返回 DataRow。NewRow 方法返回了与 DataTable 匹配架构的 DataRow 对象。直到新的 DataRow 被添加到 RowsCollection集合之前,它一直独立于这个表。
 
 
可以通过 DataRow 改动数据。可以通过 Rows 属性的 RowsCollection 集合使用行索引,如示例2:
 
 
示例2:
 
    myDataSet.Tables["Customers"].Rows[0]["ContactName"]="Peach";

 

 
你也可以通过主键值访问一个特定行,如示例3:
 
 
示例3:
 
    DataRow myDataRow1 = myDataSet.Tables["Customers"].Rows.Find("ALFKI");
    myDataRow1["ContactName"]="Peach";

 

 
示例3中的 “ALFKI” 是 “Customers” 表中的主键 “CustomerID” 的值。当使用 SqlDataAdapter 时,主键是从库中建立的。即使没有使用库,你也可以通过 PrimaryKey 属性设置主键值。
 
 
使用 Delete 方法移除行。请记住,发生在 DataSet 上的逻辑删除,只有在 DataSet 被更新到数据库时候才会被物理删除(示例4)。同样地,在行被保存的情况下,你可以使用 DataSet 的 RejectChanges 放弃更改。
 
 
示例4:
 
    myDataSet.Tables["Customers"].Rows[0].Delete();

 

 
行里维护着原始值和新值。原始值和新值皆可以允许被 RowChanging 事件访问,以便决定是否继续编辑。因为我们维护着原始值和新值,所以我们可以建立如乐观锁定和键值改变的场景。
 
 
在提交更改回数据库之前,你需要设置 InsertCommand、UpdateCommand、和 DeleteCommand 命令使数据库的变动和 DataSet 一致。对于受限的场景,你可以使用 SqlCommandBuilder 构建器自动生成那些命令对象,如示例5:
 
 
示例5:
 
    SqlCommandBuilder mySqlCommandBuilder = new SqlCommandBuilder(mySqlDataAdapter);

 

 
从 DataSet 提交数据到数据库,使用 SqlDataAdapter 的 Update 方法,如示例6:
 
 
示例6:
 
    mySqlDataAdapter.Update(myDataSet, "Customers");

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ADO.NET 通过 DataSet 查询 SQL Server 数据库的主要过程如下: 1. 创建 SqlConnection 对象,并打开数据库连接。 2. 创建 SqlDataAdapter 对象,并设置 SelectCommand 属性为查询语句。 3. 创建 DataSet 对象,并使用 SqlDataAdapter 的 Fill 方法将查询结果填充到 DataSet 中。 4. 关闭数据库连接。 5. 使用 DataSet 中的数据进行数据绑定或其他操作。 下面是一个示例代码: ```csharp using System.Data.SqlClient; using System.Data; // 创建 SqlConnection 对象,并打开数据库连接 SqlConnection conn = new SqlConnection("server=.;database=Northwind;uid=sa;pwd=123456"); conn.Open(); // 创建 SqlDataAdapter 对象,并设置 SelectCommand 属性为查询语句 SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM Customers", conn); // 创建 DataSet 对象,并使用 SqlDataAdapter 的 Fill 方法将查询结果填充到 DataSetDataSet ds = new DataSet(); adapter.Fill(ds); // 关闭数据库连接 conn.Close(); // 使用 DataSet 中的数据进行数据绑定或其他操作 dataGridView1.DataSource = ds.Tables[0]; ``` 需要注意的是,使用 ADO.NET 查询 SQL Server 数据库时需要注意以下几点: 1. 数据库连接对象 SqlConnection 需要及时关闭,以释放资源和避免数据库连接池满。 2. 数据库查询语句应该使用参数化查询,避免 SQL 注入攻击。 3. 数据库查询语句应该尽量简单,避免查询性能问题。 4. 数据库查询结果应该进行数据类型转换,避免数据类型不匹配的问题。 5. 数据库查询结果中的数据应该进行编码转换,避免出现乱码问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值