C#中关于SqlDataAdapter的Update(dataTable)方法

C#用来更新数据库的方式有两种(暂时我知道两种)一种就是sql语句的update,第二种就是我接下来要说的SqlDataAdapter的Update()方法。

运用SqlDataAdapter的Update()方法可以很方便的将对一张数据表进行大量修改。大致做法如下:
首先定义一个SqlDataAdapter

SqlDataAdapter adapter = new SqlDataAdapter(strQuery, conn);

其中StrQuery是查询语句,conn是一个SqlConnection。
然后定义一个SqlCommandBuilder

SqlCommandBuilder thisBuilder = new SqlCommandBuilder(adapter );

一开始我不知道这句有啥用,就没写,然后报错。参考请看:http://blog.163.com/kongdelu2009@yeah/blog/static/111995207200932111175638/
这个SqlCommandBuilder用来自动生成添加、删除、修改的语句,注意这个参数是刚才建立的SqlDataAdapter。
然后我们可以调用SqlDataAdapter的Fill()方法,将查询出来的数据表内容填充的一张DataTable里面:

thisAdapter.Fill(ds, "TableName");

ds就是dataSet。然后我们可以对这张DataTable进行一些添加、删除、修改操作,然后调用Update()方法,将这些对DataTable进行的更改批量更新到数据库对应的表中:

thisAdapter.Update(ds, "TableName");

参考资料:http://blog.sina.com.cn/s/blog_4dde37650100g8fe.html

  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
C# 的三层架构SqlDataAdapter.Update() 方法同样不会实时返回更新条数。不过,我们可以在数据访问层(DAL)使用 RowUpdated 事件来实现实时获取更新条数的需求。 以下是一个简单的示例代码,演示了如何在 DAL 使用 SqlDataAdapter 的 RowUpdated 事件实时返回更新条数: ```csharp public class MyDataAccessLayer { private SqlConnection connection; public MyDataAccessLayer(string connectionString) { connection = new SqlConnection(connectionString); } public int UpdateData(DataTable table) { SqlDataAdapter adapter = new SqlDataAdapter(); adapter.RowUpdated += (sender, args) => { if (args.StatementType == StatementType.Update) { Console.WriteLine("{0} rows updated", args.RowsAffected); } }; SqlCommand updateCommand = new SqlCommand("UPDATE MyTable SET Column1 = @Column1 WHERE ID = @ID"); updateCommand.Parameters.Add("@Column1", SqlDbType.VarChar, 50, "Column1"); updateCommand.Parameters.Add("@ID", SqlDbType.Int, 4, "ID"); adapter.UpdateCommand = updateCommand; adapter.SelectCommand = new SqlCommand("SELECT * FROM MyTable", connection); SqlCommandBuilder builder = new SqlCommandBuilder(adapter); return adapter.Update(table); } } ``` 在这个示例,我们首先创建了一个 MyDataAccessLayer 类,它包含一个 UpdateData() 方法。在 UpdateData() 方法,我们创建了一个 SqlDataAdapter 对象,并为它的 RowUpdated 事件添加了一个处理程序。在处理程序,我们判断当前更新操作的 StatementType 是否为 Update,如果是,则输出当前更新操作所影响的行数。 接着,我们创建了一个 SqlCommand 对象,用于执行 UPDATE 操作,并将它关联到 SqlDataAdapterUpdateCommand 属性上。我们还设置了 SqlDataAdapter 的 SelectCommand 属性,用于执行 SELECT 操作。最后,我们通过 SqlCommandBuilder 自动生成 INSERT、UPDATE 和 DELETE 命令,并调用 SqlDataAdapterUpdate() 方法执行更新操作。Update() 方法返回的是总的更新条数。 需要注意的是,以上代码只是一个简单的示例,实际情况可能更为复杂。例如,可能需要处理并发更新冲突等问题。同时,为了更好地实现三层架构的分离,建议将 DAL SqlDataAdapter 替换为更为灵活的 ORM 框架,例如 Entity Framework、NHibernate 等。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值