我使用C#制作具有sql数据库的程序,在数据库中我有一个名为Workers
的表,它有一个自动增量和主键ID_column
,当我删除记录ID将彼此之间存在差距。
删除记录后,我该怎么做才能重新订购ID?
更新
我要做的是在找到后在屏幕上显示记录,
所以我尝试使用ID
做到这一点,但由于存在这些差距,它会有一些例外!!
更新2
这是我尝试使用的代码
private void btnFind_Click(object sender, EventArgs e)
{
string searchFor = "";
string searchOn = "";
string searchString = "";
int results = 0;
if (searchTextBox.Text.Trim() == "")
MessageBox.Show("Nothing to search for");
if (cb1.Text == "Last Name")
{
searchFor = searchTextBox.Text.Trim();
searchOn = "last_Name=";
searchString = searchOn + "'" + searchFor + "'";
}
if (cb1.Text == "Job Title")
{
searchFor = searchTextBox.Text.Trim();
searchOn = "job_Title=";
searchString = searchOn + "'" + searchFor + "'";
}
DataRow[] returnedRows;
returnedRows = ds1.Tables["Workers"].Select(searchString);
results = returnedRows.Length;
if (results > 0)
{
DataRow dr1;
dr1 = returnedRows[0];
inc = (int)dr1["Worker_ID"]-1;
NavigateRecords();
}
else
{
MessageBox.Show("No such Record");
}
}
inc
是当前显示的记录,NavigateRecords()
会显示记录,其中包含给定编号inc
void NavigateRecords()
{
DataRow dRow = ds1.Tables["Workers"].Rows[inc];
textBox1.Text = dRow.ItemArray.GetValue(1).ToString();
textBox2.Text = dRow.ItemArray.GetValue(2).ToString();
textBox3.Text = dRow.ItemArray.GetValue(3).ToString();
}
答案 0 :(得分:5)
答案 1 :(得分:2)
当人们死亡时,他们会“重新订购”他们的SSN吗?
不要做任何事情,不要重新排序。
想象一下,如果你拥有一百万名工人,你会得到的麻烦,以及与之相关的十亿订单。现在,删除Worker no 1.您不仅要重新订购百万工人记录ID,还要重新订购引用工人ID的十亿订单记录。
您遇到的例外可能不是因为“丢失”ID。
你可以发布抛出异常的代码和异常本身吗?
答案 2 :(得分:1)
您不应该重新订购ID,因为其他表可能会引用此ID 如果ID是可更改的,因此无论如何都是无关紧要的,您可以一起删除此列。
答案 3 :(得分:1)
您想要重置标识列的种子值:
有可能重新设定标识栏的值
DBCC CHECKIDENT('Customer', RESEED, value)
请查看此链接
http://geekswithblogs.net/TakeNote/archive/2007/11/30/117258.aspx