Использование SqlDataAdapter.Update () с параметрами - PullRequest
0 голосов
/ 26 августа 2011

Как попытаться выяснить, как использовать метод 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);
    }
}

С наилучшими пожеланиями

Jay

1 Ответ

1 голос
/ 27 августа 2011

Вместо использования Parameters.AddWithValue (...) используйте Parameters.Add (новый SqlParameter (...)) и используйте один из трех последних конструкторов для документов SqlParameter: Класс SqlParameter Документация 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, подход ленивого человека .С уважением, Дрю

...