使用带参数的 SqlDataAdapter.Update()
Posted
技术标签:
【中文标题】使用带参数的 SqlDataAdapter.Update()【英文标题】:Using SqlDataAdapter.Update() with Parameters 【发布时间】:2011-08-26 14:20:32 【问题描述】:如何尝试通过参数化查询找出如何使用 SqlDataAdapter.Update(DataTable) 方法。如何在不遍历整个 DataTable 的情况下将值添加到命令中?
如何在事务中执行 SqlDataAdapter 插入和更新方法?
到目前为止,我有以下内容:
internal void InsertUpdate(DataTable dt)
using(var con = new SqlConnection(ConnectionString))
var sb = new StringBuilder();
sb.AppendLine("UPDATE myTable");
sb.AppendLine("SET prop1 = @p1, prop2 = qp2");
sb.AppendLine("WHERE id = @id");
var cmd = new SqlCommand(sb.ToString());
cmd.Parameters.AddWithValue("p1", ????);
cmd.Parameters.AddWithValue("p2", ????);
cmd.Parameters.AddWithValue("id", ????);
var adapter = new SqlDataAdapter(selectQuery, con);
adapter.UpdateCommand = cmd;
adapter.Update(dt);
最好的问候
杰
【问题讨论】:
【参考方案1】:不要使用 Parameters.AddWithValue(...),而是使用 Parameters.Add(new SqlParameter(...)) 并在此处使用 SqlParameter 文档的最后三个构造函数之一:SqlParameter Class MSDN documentation。它们允许您指定将在运行时用于填充参数的列。例如,这是我当前的一个程序中的一行:
UpdateCommand.Parameters.Add(new OleDbParameter("FK_CustomerID", global::System.Data.OleDb.OleDbType.Integer, 0, global::System.Data.ParameterDirection.Input, ((byte)(0)), ((byte)(0)), "FK_CustomerID", global::System.Data.DataRowVersion.Current, false, null));
注意“FK_CustomerID”的第二次使用,表示将这个DataTable列用于参数。
关于使用事务,看看这个以获得一些想法:Transactions with TableAdapters, a lazy man's approach。 问候,德鲁
【讨论】:
以上是关于使用带参数的 SqlDataAdapter.Update()的主要内容,如果未能解决你的问题,请参考以下文章