【发布时间】:2012-11-06 13:11:47
【问题描述】:
我正在使用 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();
}
【问题讨论】:
-
为什么需要?大多数系统都不会打扰,因为没有理由这样做。
-
伙计们,你的意思是我不必这样做???
-
主键列不(也不应该)用于排序或任何其他业务逻辑。它只有一个目的:它是标识符。没有理由填补“空白”。
-
不,您不必重新洗牌。想象一下,如果您的 ID 被其他表用作外键。您打算做什么,调整这些其他表中的 ID?如果您的表有数百万条记录,而您决定删除 ID=1 的记录怎么办?
-
@firas 伙计,只是不要假设它们是连续的(例如,在行中移动时不要使用 +1/-1...)
标签: c# sql sql-server database