2011-08-26 23 views
0

如何試圖找出如何使用SqlDataAdapter.Update(DataTable)方法使用參數化查詢。我如何將這些值添加到命令中而無需遍歷整個DataTable?在參數中使用SqlDataAdapter.Update()

如何在事務中執行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(新的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」的指示使用此數據表中列的參數。

關於使用交易,請看看這個想法:Transactions with TableAdapters, a lazy man's approach。 此致,Drew