加载空数据库表

时间:2012-06-04 03:26:12

标签: sql-server visual-studio unhandled-exception sqldataadapter

我正在使用SQL Server Express和VS2008。

我有一个包含表格A的数据库,其中ID列为IDENTITY。 ID自动递增。即使删除了该行,ID仍然会增加。

经过多次数据处理后,当前ID已达到15,例如。

当我运行应用程序时

  • 如果至少有一行:如果我添加一个新行,则新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;

如果我按更新:

  • 如果至少有一行:datagrid视图会更新并正确显示该表。

  • 如果表中没有任何内容(没有数据行),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 个答案:

答案 0 :(得分:1)

如果您使用

删除日期
 Delete from myTable

它不会重置标识列,但另一方面,如果截断表,则会将任何标识列重置为默认种子值(在您的情况下从1开始) 如果要截断表格然后重新播种,则第一个标识重新设定的值如果写入

将为0
 DBCC CHECKIDENT(MyTable, RESEED, 0)

即使您的标识列指定为Identity = 1且seed = 1,插入的第一行也将从Id = 0开始

如果您想从1开始,则需要将列重新设置为

 DBCC CHECKIDENT(MyTable, RESEED, 1)