如何尝试使用参数化查询来确定如何使用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);
}
}
最好的问候
杰
答案 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。 此致,德鲁