0

グリッドビューの削除に問題があります.Id、Name、Address、Phone.Idを持つテーブル名Doctorがあります.Idは自動生成されたフィールドです.グリッドビューに表示しているときにデータを追加した後、グリッドビューからIDを削除すると、新しいものを追加するとフォームの詳細は新しい番号から始まります。つまり、最後の ID 5 を削除してから、5 からではなく ID 値 6 を取得する新しい医師を追加すると、5 から再度開始する必要があります。私のコード.Plsは私を助けます.

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) 列のギャップに問題がある場合は、独自のロジックを使用して一意の ID を生成するか、カスタム SQL スクリプトを使用して Identity 値のギャップをチェックし、それらのギャップを埋めます。

Transact-SQL リファレンスの例 B は、まさにこれを行う方法を示しています。

于 2009-02-15T11:43:54.350 に答える
1

他の人が指摘したように、これがDBから自動生成されたIDである場合、一度使用されると再生成されず、データがまだ存在するかどうかに関係なく、各IDは一意です。ID がリサイクルされた場合、その ID を持つ古いアイテムを指している可能性のある外部参照で問題が発生し、再利用された ID を持つ新しい別のレコードを指すようになる可能性があります。

通常、とにかく ID をユーザーに公開しないため、問題はありません。

于 2009-02-15T12:46:30.113 に答える
1

自動生成された ID シーケンスが順序付けられているか、ギャップがないことに依存しないでください。他の人が指摘しているように、あなたが見ている動作は、自動生成された ID の完全に正常な動作であり、それ以外の場合は、多くのフープをジャンプする必要があります。ID を挿入シーケンスで並べ替える必要がある場合は、自動生成された日付/時刻フィールドを入力し、そのフィールドで並べ替えられたデータを選択 (およびインデックス付け) する必要があります。そうすれば、数値 ID から GUID または挿入順序とは異なる並べ替え順序を持つその他の ID 形式に切り替えることにした場合でも、データは正しく順序付けられます。それぞれの「注文」が必要な場合は、日付順を選択しているため、それを自動的に生成します (行番号など)。

于 2009-02-15T12:48:05.727 に答える
1

したがって、ID はデータベースによって作成されます (autonumber)。ID 5 が使用されると、使い果たされます。これは正常な動作です。

于 2009-02-15T11:36:56.740 に答える