我有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});
}
}
答案 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)。这样,即使以后删除记录,您仍然会有严格的数字排序。