我有一个数据库表,其中一个字段称为 ID,是一个自动增量整数。使用 TableAdapter,我可以读取和修改现有行以及创建新行。
但是,如果我尝试修改新插入的行,则会收到 DBConcurrencyException:
OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Shift.mdb;Persist Security Info=True");
ShiftDataSetTableAdapters.ShiftTableAdapter shiftTA = new ShiftDataSetTableAdapters.ShiftTableAdapter();
shiftTA.Connection = conn;
ShiftDataSet.ShiftDataTable table = new ShiftDataSet.ShiftDataTable();
ShiftDataSet.ShiftRow row = table.NewShiftRow();
row.Name = "life";
table.Rows.Add(row);
shiftTA.Update(row); // row.ID == -1
row.Name = "answer"; // <-- all fine up to here
shiftTA.Update(row); // DBConcurrencyException: 0 rows affected
单独的问题,是否有任何静态类型的 NewShiftRow() 方法我可以使用,这样我就不必在每次想要插入新行时创建表。
我猜代码中的问题来自第一次 Update() 调用后仍为 -1 的 row.ID。插入成功,并且在数据库中该行具有有效的 ID 值。
如何获取该 ID 以便继续第二次更新调用?
更新:
看起来这可以使用此设置自动完成。但是根据msdn social上的回答,OLEDB 驱动程序不支持此功能。
不知道从这里去哪里,使用 oledb 以外的其他东西?
更新:
试过 SQLCompact 但发现它有同样的限制,它不支持多语句。
最后一个问题:是否有任何简单的(基于单个文件的)数据库可以让您获取插入行的值。