如何自动同步sql行号和ID列

时间:2013-09-05 20:02:37

标签: c# mysql asp.net sql sql-server

我在ASP.NET端使用带有插入/更新/删除按钮的列表框,当我删除学生时,学生ID不再与ID列相等。因此,当我删除学生时,列表框中的顺序不等于SQL端。如何自动同步这两个?我已将主键和标识规范集设置为活动,以供您参考。并包括下面问题的截图。

enter image description here

3 个答案:

答案 0 :(得分:1)

ASP.NET列表框应具有属性以及属性。

通常, key 属性将填充数据库中的ID ...当删除列表框中的选定项目时,您将根据键属性,而不是所选列表框项的索引

Here's a quick tutorial that shows how to populate a list box with key / value pairs

无论您做什么,不要将数据库中的ID重新编号为顺序。这会给你带来很大的麻烦。

答案 1 :(得分:1)

ASP.NET上的列表框项必须由ListBox1.SelectedValue控制,而不是由SelectedIndex控制。删除项目并更改订单后,项目的SelectedIndex可能会更改。这样做会很混乱。

但是,ListBox1.SelectedValue可以帮助您按值控制每个项目(这是EmployeeID,而不是SQL表中的顺序。当您创建listitem时,您必须在这种情况下将EmployeeID赋予HTML列表框的值,当您插入或更新项目时将使用ListBox1.SelectedValue处理

the code when you retrieve data from SQL to the listbox should look like this:

cnn.Open();
SqlCommand cmd = new SqlCommand("SELECT FirstName,LastName,EmployeeID FROM Employees", cnn);
SqlDataReader dr = cmd.ExecuteReader();
if (dr.HasRows)
{
    while (dr.Read())
    {
        ListBox1.Items.Add(new ListItem(dr.GetString(0) + " " + dr.GetString(1),dr.GetInt32(2).ToString()));
    }
}

cnn.Close();

答案 2 :(得分:0)

您所指的“ID列”实际上只是SSMS查询返回的行号。这与返回的记录没有关系,只是它们被返回的顺序。例如,以下查询:

SELECT * FROM ali ORDER BY OgrenciID ASC

SELECT * FROM ali ORDER BY OgrenciID DESC

两个查询都以不同的顺序返回相同的数据。除非您按顺序提供订单,否则SQL没有“保证”方式对数据进行排序。这意味着在输入足够的数据后,您的查询将不会始终显示1,2,3。相反,它可能会显示1,3,2,除非您另有说明。

拥有标识列的目的是确保每行数据都具有唯一ID。假设你有一个名为Permissions的第二个表,它被OgrenciID链接到该表。如果用户1被删除,您不希望用户2获得用户1的权限。

如果要删除该表中的所有数据并将ID列重置为1,则必须在删除记录后截断表或重置密钥。但是,这需要彻底擦除表格。