【发布时间】:2012-06-04 03:26:12
【问题描述】:
我正在使用 SQL Server Express 和 VS2008。
我有一个带有表A 的数据库,其中有一列ID 为IDENTITY。 ID 是自动递增的。即使该行被删除,ID 仍然会增加。
经过多次数据操作,例如当前ID已达到15个。
当我运行应用程序时
- 如果至少有 1 行:如果我添加新行,则新 ID 为 16。一切正常。
- 如果表是空的(没有行):如果我添加一个新行,新的ID是0,这是一个错误(我认为)。
进一步的数据操作(例如删除或更新)将导致未处理的异常。
有人遇到过吗?
PS。在我的表定义中,ID 已选择如下:
Identity Increment = 1; Identity Seed =1;
数据库加载代码为:
dataSet = gcnew DataSet();
dataAdapter->Fill(dataSet,"A");
dataTable=dataSet->Tables["A"];
dbConnection->Open();
更新按钮方法
dataAdapter->Update(dataSet,"tblInFlow");
dataSet->AcceptChanges();
dataTable=dataSet->Tables["tblInFlow"];
dataGrid->DataSource=dataTable;
如果我按更新:
如果至少有一行:数据网格视图会更新并正确显示表格。
如果表中没有任何内容(没有数据行),Add 方法将添加一个新行,但从 ID 0 开始。 如果我关闭程序并重新启动它:ID 将是 16,这是正确的。
这是添加方法
row=dataTable->NewRow();
row["column1"]="something";
dataTable->Rows->Add(row);
dataAdapter->Update(dataSet,"A");
dataSet->AcceptChanges();
dataTable=dataSet->Tables["A"];
【问题讨论】:
-
能否给出表格的定义,以及表格为空时添加新行的代码?听起来要么表格最初没有正确播种,要么您正在手动重新播种。如果标识应从 1 开始,则配置应为
IDENTITY(1,1),因此除非发生其他事情,否则不应获得 0。所以你需要提供更多信息。 -
我认为在声明标识列时,您需要指定种子和增量值,例如 CREATE TABLE dbo.MyTable (ID int identity(1,1), Name varchar(20))
-
请看看我上面编辑过的问题。谢谢。
-
你能告诉我你如何重新设置身份列吗?
-
我没有重新播种该列。我让它自动。也许有时更新表格需要时间。如果数据网格显示行 ID 为 14(表中最大的 ID)虽然 ID 达到 16(行 15 和 16 已被删除),数据网格视图上显示的新添加的 ID 为 15,但实际 ID因为数据是 17。如果我关闭程序并重新启动它,它会正确显示 17。
标签: sql-server visual-studio unhandled-exception sqldataadapter