1

我正在使用 C# 制作具有 sql 数据库的程序,在数据库中我有一个名为 的表Workers,它有一个自动增量和 Primary key 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();
    }
4

4 回答 4

6

通常,出于完整性原因,我们从不更改数据库中的 ID。

在您的情况下,如果出于显示原因,我建议使用Row_Number

数据库中的空白没有问题。

于 2012-11-06T13:16:27.480 回答
4

当人们死后,他们会“重新订购”他们的 SSN 吗?

不要做任何事情,不要重新排序。

试想一下,如果你有一百万个工人,并且有十亿个与此相关的订单,你会遇到什么麻烦。现在,删除 Worker no 1。您不仅要重新排序百万条工人记录 ID,还要重新排序引用工人 ID 的十亿条订单记录。

您遇到的异常可能不是因为“缺少”ID。

您可以发布引发异常的代码和异常本身吗?

于 2012-11-06T13:32:29.533 回答
3

您不应重新排序 ID,因为其他表可能有此 ID 的引用。
如果 ID 是可变的,因此在任何方面都无关紧要,您可以一起删除该列。

于 2012-11-06T13:19:32.003 回答
1

您要重置标识列的种子值:

有可能重新设定标识列的值

DBCC CHECKIDENT('Customer', RESEED, value)

请也查看此链接

http://geekswithblogs.net/TakeNote/archive/2007/11/30/117258.aspx

于 2012-11-06T13:32:37.497 回答