Не зная слишком много о вашем коде, попробуйте прочитать это как из MSDN:
http://msdn.microsoft.com/en-us/library/ms233812(v=VS.80).aspx
Обновление: с наборами данных, что обычно происходит(предполагая, что набор данных заполнен), строки будут добавлены, отредактированы или удалены в коде.Эти строки будут иметь соответствующий RowState
, обозначающий их как добавленные, отредактированные, удаленные или неизмененные.В течение .Update
связанный адаптер таблицы вместе со связанными командами вставки / обновления / удаления будет выполнять итерацию строк и выполнять команду в данной строке в зависимости от состояния строки.Когда строки были повторены, вызывается .AcceptChanges
, возвращая состояние строки в состояние по умолчанию.
Если вы вызываете AcceptChanges
перед обновлением, то ничего не произойдет.RowState
каждой строки будет потеряно, поэтому .Update
не будет иметь необходимой информации, необходимой для обновления базы данных.Если у вас есть специальный код для переноса всего этого в транзакцию, то вам нужно убедиться, что вы зафиксировали транзакцию.
В вашем примере вы, похоже, подразумеваете, что используете адаптер таблицы, а не сам набор данных,Я бы посоветовал против этого - адаптеры таблиц обычно помещают методы в таблицы в наборе данных, который вы должны использовать.
Обновление 2: код выглядит хорошо для меня, хотя вы этого не делаетеНе нужно вызывать Insert
на адаптере или AcceptChanges
после обновления (последнее выполняется автоматически).Это заставляет меня поверить, что в вашей команде вставки SQL есть ошибка - попробуйте извлечь SQL, используемый командой, и запустить его вручную для базы данных.
Обновление 3: работает следующий кодхорошо для меня:
static void Main(string[] args)
{
db1DataSet set = new db1DataSet();
set.Users.AddUsersRow("asd", "asd");
foreach (DataRow row in set.Users.Rows)
{
object foo = row.RowState; // Confirm row state in debugger.
}
UsersTableAdapter adap = new UsersTableAdapter();
adap.Update(set.Users);
Console.Read();
}