0

如何尝试使用参数化查询来弄清楚如何使用 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);
    }
}

最好的祝福

周杰伦

4

1 回答 1

1

不要使用 Parameters.AddWithValue(...),而是使用 Parameters.Add(new SqlParameter(...)) 并在此处使用 SqlParameter 文档的最后三个构造函数之一:SqlParameter Class MSDN 文档。它们允许您指定将在运行时用于填充参数的列。例如,这是我当前的一个程序中的一行:

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 列作为参数。

关于使用事务,看看这个有一些想法:使用 TableAdapters 的事务,一个懒人的方法。问候,德鲁

于 2011-08-27T01:03:09.277 回答