将SqlDataAdapter.Update()与参数一起使用

时间:2011-08-26 14:20:33

标签: .net parameters transactions sqldataadapter

如何尝试使用参数化查询来确定如何使用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 个答案:

答案 0 :(得分: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。 此致,德鲁