asp.net gridview的问题

时间:2009-02-15 11:26:27

标签: asp.net sql gridview identity

我有gridview删除的问题。我有表名医生 Id,Name,Address,Phone.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 个答案:

答案 0 :(得分:4)

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

Transact-SQL reference中的示例B显示了一种方法。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

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