0

我在删除gridview时遇到问题。我有带有Id,Name,Address,Phone的表名Doctor。Id是自动生成的字段。在我在gridview中显示时添加数据后,如果再次从gridview中删除任何id,那么如果我添加任何新的表格中的详细信息从新数字开始。我的意思是,如果我删除最后一个 id 号 5,那么如果我添加任何新医生,它的 id 值 6 而不是从 5 开始。我的查询是它应该从 5 重新开始。这里是我的代码。请帮助我。

public class Doctor
{  
  public int Id { get; set; }
  public string Name { get; set; }
  public string Address { get; set; }
  public string Phone { get; set; }
}

public static class DoctorDataLayer
{
  public static void AddDoctor(Doctor doctor) 
  {
    string connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString; // JohannesH: Changed from .ToString() to .ConnectionString
    using(var connection = new SqlConnection(connectionString))
    {
      using (var command = new  SqlCommand("insert into doctor values(@name,@address,@phone)", connection))
      {      
        command.Parameters.AddWithValue("@name", doctor.Name);
        command.Parameters.AddWithValue("@address", doctor.Address);
        command.Parameters.AddWithValue("@phone", doctor.Phone);
        connection.Open();
        command.ExecuteNonQuery();
        connection.Close();
      }
    }
  }
}
public static class DoctorBusinessLayer
{
  public static void CreateDoctor(string name, string address, string phone) 
  {
    DoctorDataLayer.AddDoctor(new Doctor {Name = name, Address = address, Phone = phone});
  }
}
4

4 回答 4

4

这是完全正常的数据库行为,与您的 GridView 无关。如果您对自动生成的(身份)列中的空白有疑问,请使用您自己的逻辑来生成唯一 ID,或使用自定义 SQL 脚本来检查身份值中的空白并填补这些空白。

Transact-SQL 参考中的示例 B显示了执行此操作的方法。

于 2009-02-15T11:43:54.350 回答
1

所以 Id 是由数据库创建的(自动编号)。当 id 5 被使用时,它就用完了。这是正常行为。

于 2009-02-15T11:36:56.740 回答
1

正如其他人所指出的,如果这是来自数据库的自动生成的 ID,那么一旦使用它就不会重新生成,每个 ID 都是唯一的,无论数据是否仍然存在。如果 ID 被回收,您可能会遇到外部引用的问题,这些引用可能指向具有该 ID 的旧项目,现在将指向具有重用 ID 的新的不同记录。

通常,您不会向用户公开 ID,因此这不是问题。

于 2009-02-15T12:46:30.113 回答
1

您不应该依赖自动生成的 ids 序列被排序或没有间隙。正如其他人所指出的那样,您看到的行为对于自动生成的 id 来说是完全正常的行为,否则您将需要跳过很多圈。如果您需要按插入顺序对 id 进行排序,则应放入一个自动生成的日期/时间字段,然后选择按该字段排序的数据(并对其进行索引)。这样,如果您决定从数字 id 切换到 GUID 或其他排序顺序与插入顺序不同的 id 格式,您的数据仍将正确排序。如果您需要为每个“下订单”,请在您选择按日期排序时自动生成(例如行号)。

于 2009-02-15T12:48:05.727 回答