2009-02-15 81 views
0

我有gridview刪除的問題。我有表名Doctor與 ID,名稱,地址,Phone.Id是自動生成的字段。添加數據後,當我在gridview中顯示 然後如果刪除從GridView控件 再次任何ID,然後,如果我從形式出發,從 添加任何新的細節,新number.I意思是,如果我還是那句話刪除最後一個號5,如果我 從添加任何新的價值醫生6其採取ID不5.我的查詢是 應該從5開始。這裏是我的code.Pls幫我。問題與asp.net gridview

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}); 
    } 
} 

回答

1

所以Id由數據庫(自動編號)創建。當使用ID 5時,它已經用完了。這是正常的行爲。

4

這是完全正常的數據庫行爲,並且與您的GridView無關。如果您在自動生成(身份)列中存在空白問題,請使用您自己的邏輯來生成唯一的ID或使用自定義SQL腳本來檢查身份值中的空白並填補這些空白。

實施例B在Transact-SQL reference示出的方法來做到這只是。

1

作爲其它所指出的,如果這是從DB自動生成的ID,然後,一旦它被用於它不會再生,每個ID無論是獨特如果數據仍然存在與否。如果ID被回收了,你可能會遇到與外部引用有關的問題,這些引用可能指向帶有該ID的舊項目,並且現在將指向帶有重用ID的新的不同記錄。

通常,您不會將ID暴露給用戶,因此這不是問題。

1

您不應該依賴自動生成的ID序列被排序或沒有空位。正如其他人所指出的那樣,你所看到的行爲對於自動生成的id來說是完全正常的行爲,否則你需要跳過很多圈。如果您需要通過插入順序對ID進行排序,則應該放入自動生成的日期/時間字段,然後選擇該字段排序的數據(並對其進行索引)。這樣,如果您決定從數字ID切換到GUID或某種其他ID格式的排序順序不同於插入順序,您的數據仍然會被正確排序。如果您需要爲每個訂單「下訂單」,請根據日期排序選擇自動生成該訂單(如排班)。這樣,即使記錄稍後被刪除,您仍然會有嚴格的數字排序。