我正在用C#为库系统创建一个数据库系统(使用Access数据库),而且我遇到了一堵砖墙。我有一个名为“BSUser”的表,它有一个主键的自动增量列,“UserID”;如果用户在定义新用户时没有输入值,我希望自动生成此值,但我也希望它能够接受手动定义的值。根据用户输入的信息,我使用以下代码创建新行。请注意检查用户ID是否为空...
BookshelfDataSet.BSUserRow user = dataSet.BSUser.NewBSUserRow();
if (userID != null) user.UserID = userID.Value;
user.Forename = forename;
user.Surname = surname;
user.IsAdmin = isAdmin;
dataSet.BSUser.AddBSUserRow(user);
SaveDataSetToDatabase();
这是应该更新数据库的代码......
private void SaveDataSetToDatabase()
{
this.bookTableAdapter.Update(this.dataSet);
this.copyTableAdapter.Update(this.dataSet);
this.userTableAdapter.Update(this.dataSet);
this.loanTableAdapter.Update(this.dataSet);
this.ratingTableAdapter.Update(this.dataSet);
}
该行已成功保存到数据库,但尽管我手动设置了该ID,但仍会自动生成其ID。这是一个问题,因为库的现有用户已经拥有旧系统的ID,所以我需要将这些ID带到新系统中。请有人告诉我我做错了什么以及如何解决问题?
答案 0 :(得分:2)
对于使用Access 2010或更高版本的用户,可以使用Before Change数据宏来实现所需的结果。对于名为[BSUser]的示例表:
[UserID] - 长整数,主键
[ExistingID] - 长整数
[Forename] - 文字(100)
[姓] - 文字(100)
和之前更改数据宏
如果我们包含[ExistingID]值,那么它将被用作[UserID]主键(假设它不存在于表中)
var ta = new Database1DataSetTableAdapters.BSUserTableAdapter();
ta.Insert(null, 3, "Gord", "Thompson"); // insert with ExistingID = 3
导致
UserID ExistingID Forename Surname
------ ---------- -------- -----------
3 3 Gord Thompson
如果我们不包含[ExistingID]值,则宏将为我们分配一个
var ta = new Database1DataSetTableAdapters.BSUserTableAdapter();
ta.Insert(null, null, "Nora", "Newuser"); // insert with ExistingID = null
喜欢这样
UserID ExistingID Forename Surname
------ ---------- -------- -----------
3 3 Gord Thompson
1000 Nora Newuser
答案 1 :(得分:0)
您必须使用自动递增值,或自行设置。没有选择同时做到这两点。