我使用Visual Studio构建了一个数据库(Microsoft SqlServerCe.4.0)和一个包含两个字段的表:
然后我构建了一个包含此表作为DataTable的DataSet,我有一个像这样的DataAdapter:
marque_adapter = factory.CreateDataAdapter();
command = connection.CreateCommand();
command.CommandText = "SELECT * FROM " + DB_TABLE_MARQUE + ";";
marque_adapter.SelectCommand = command;
command = connection.CreateCommand();
command.CommandText = "UPDATE " + DB_TABLE_MARQUE + " SET nom = @nom WHERE id = @id;";
CreateAndAddParameterFromSource(command, "id", "id");
CreateAndAddParameterFromSource(command, "nom", "nom");
marque_adapter.UpdateCommand = command;
command = connection.CreateCommand();
command.CommandText = "DELETE " + DB_TABLE_MARQUE + " WHERE id = @id;";
CreateAndAddParameterFromSource(command, "id", "id");
marque_adapter.DeleteCommand = command;
command = connection.CreateCommand();
command.CommandText = "INSERT INTO " + DB_TABLE_MARQUE + " (nom) VALUES (@nom);";
CreateAndAddParameterFromSource(command, "nom", "nom");
marque_adapter.InsertCommand = command;
//...
data = new DataSet();
marque_adapter.Fill(data, DB_TABLE_MARQUE);
当我尝试插入新行时出现问题。 我这样做:
如果我不做任何其他事情,稍后当我尝试获取此行的ID时我会遇到问题(我想它会将其设置在上述四条指令之间)。 我期待DataTable能够生成一个,但是......
所以我尝试提醒DataTable来处理自动递增:
idColumn.Unique = true;
idColumn.AutoIncrement = true;
现在它第一次运行了,但是当我第二次运行程序时,它再次从一个程序开始计数,我被告知ID应该是唯一的。如果我删除数据库(由Visual生成的sdf文件的副本),或者如果我使用Visual手动删除行,它第一次运行良好,之后我得到相同的错误。
问题实际上是当我尝试保存我的DataSet时,特别是在添加新行时(选择,更新,删除很好)。
显然,当涉及DataTable和数据库时,我没有得到如何管理主键(仅数据表是可以的)。 特别要同步两个......
我错过了什么? 我很确定我误解了一些事情。