Проблема с пакетным обновлением с использованием DataAdapter - PullRequest
0 голосов
/ 04 марта 2009

Я обновляю базу данных sql server 2005 с помощью пакетного обновления, как показано ниже

 cmd = new SqlCommand("update Table1 set column1 = @column1 where EmpNo = @EmpNo", con);
                cmd.Parameters.Add(new SqlParameter("@column1", SqlDbType.VarChar));
                cmd.Parameters["@column1"].SourceVersion = DataRowVersion.Current;
                cmd.Parameters["@column1"].SourceColumn = "Column";

                cmd.Parameters.Add(new SqlParameter("@EmpNo", SqlDbType.Int));
                cmd.Parameters["@EmpNo"].SourceVersion = DataRowVersion.Current;
                cmd.Parameters["@EmpNo"].SourceColumn = "EmpNo";

                cmd.UpdatedRowSource = UpdateRowSource.None;

                sqlDa = new SqlDataAdapter();
                con.Open();
                sqlDa.UpdateCommand =cmd;
                sqlDa.UpdateBatchSize = 10;
                sqlDa.Update(dt);

                con.Close();

Но данные не обновляются. Я не могу понять, в чем проблема. Любая помощь приветствуется.

Ответы [ 2 ]

1 голос
/ 04 марта 2009

Я бы посоветовал вам взглянуть на dt перед тем, как вводить команду обновления. Убедитесь, что в некоторых строках RowState обновлен или добавлен. Если нет, то в вашей (я предполагаю) базе данных нет ничего, что можно обновить до базы данных.

Также попробуйте удалить операцию набора свойств .SourceVersion.

Если все выглядит хорошо, запустите трассировку в базе данных прямо перед тем, как вводить .Update.

Это всего лишь пара первых шагов, которые нужно попробовать.

0 голосов
/ 19 марта 2012

SqlDataAdapter подход

с использованием (SqlCommand insertCommand = new SqlCommand (

"INSERT BulkLoadTable (FieldA, FieldB) VALUES (@FieldA, @FieldB)", соединение))

{ insertCommand.Parameters.Add ("@ FieldA", SqlDbType.VarChar, 10, "FieldA");

insertCommand.Parameters.Add("@FieldB", SqlDbType.Int, 4, "FieldB");
// Setting UpdatedRowSource is important if you want to batch up the inserts
insertCommand.UpdatedRowSource = UpdateRowSource.None;
using (SqlDataAdapter insertAdapter = new SqlDataAdapter())
{
    insertAdapter.InsertCommand = insertCommand;
    // How many records to send to the database in one go (all of them)
    insertAdapter.UpdateBatchSize = myDataTable.Rows.Count;

    // Send the inserts to the database
    insertAdapter.Update(myDataTable);                   
}

}

...