使用带参数的 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()的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 如何执行 带参数的 存储过程

带参数的方法

查看带参数的sql语句

如何定义带参数或不带参数调用的函数? [复制]

使用带条件默认参数的部分

使用带参数的 SqlDataAdapter.Update()