#c# #ado.net #sqlclient
#c# #ado.net #sqlclient
Вопрос:
У меня есть следующий код. Как вставка, так и удаление работают, за исключением обновления. Я использовал профилировщик SQL Server, чтобы отследить его и обнаружил, что SQL не выдается для обновления. Я тестировал со dt.Rows[0].RowState
значением «Изменено».
using(var scope = new TransactionScope())
{
using (var con = new SqlConnection(ConnectionString))
{
con.Open();
var da = new SqlDataAdapter("select * from table", con);
var cb = new SqlCommandBuilder(da);
cb.ConflictOption = ConflictOption.OverwriteChanges;
da.UpdateCommand = cb.GetUpdateCommand();
da.InsertCommand = cb.GetInsertCommand();
da.DeleteCommand = cb.GetDeleteCommand();
da.UpdateBatchSize = 2000;
da.Update(dt);
}
scope.Complete();
}
Комментарии:
1. вы проверили, что сгенерированная команда update sql выглядит нормально?
2. Обновление SQL будет в порядке, если я построчно отслеживаю метод. Это было
update table where Id = @p1
, если я установил точку останова в последней строке в блоке. Ошибки / исключения нет.3. ваша команда обновления должна выглядеть следующим образом: UPDATE [table] SET [x] = @p1, [y] = @p2, ГДЕ [x] = @p3 … без SET это не может работать…
4. Я знаю. Как ни странно, отладчик показал два разных результата. И ошибки нет.