-6

名 lastname 、Id 、到着の場合は日付、今日の日付の列を持つデータベースを作成しました。すべて nchar() のデータ型です。Web ページで主キーとして ID を使用しています。値を入力して [送信] をクリックしましたが、次のようなエラーが発生しています。

PRIMARY KEY 制約の違反: オブジェクト 'dbo.Accomdation' に重複するキーを挿入できません。ステートメントは終了されました。

コードは次のように与えられます

    SqlConnection con = new SqlConnection(@"Data Source=.\sqlexpress;Initial Catalog=Accomdation;Integrated Security=True");
    con.Open();

    string f = TextBox1.Text;
    string g = TextBox5.Text;
    string d = DropDownList1.Text;
    string s = TextBox1.Text;
    string a = TextBox2.Text;
    string h = TextBox7.Text;
    string k = TextBox6.Text;
    string u = TextBox8.Text;
    string sql=("INSERT INTO Accomdation ([First Name], [LAst Name], Gender, [UHCL ID], [Date OF arrival], [FLight No], Email)VALUES        ('tya', 'tya', 'tya', 'tya', 'tya', 'tya', 'tya')");

    SqlCommand sw = new SqlCommand(sql,con);
4

2 に答える 2

2

ID に値を挿入しないため、その ID を null ではなく自動インクリメントにする必要があります。

以下のようなもの。

create table Accomdation(
   AccID int not null identity(1,1) primary key,

   define other columns 

 )

SqlCommand でパラメーター化されたクエリを使用します。サンプル コードは次のとおりです。

string commandText = "INSERT INTO Accomdation ([First Name], [LAst Name]) VALUES (@FirstName, @LastName)";
using (SqlConnection connection = new SqlConnection(connectionString))
{
    SqlCommand command = new SqlCommand(commandText, connection);
    command.Parameters.AddWithValue("@FirstName", firstName);
    command.Parameters.AddWithValue("@LastName", lastName);

    try
    {
        connection.Open();
        command.ExecuteNonQuery();
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
}
于 2012-06-20T03:25:37.297 に答える
1

ID (主キー) は ID ですか? そうである必要があります。主キーは複合クラスター化インデックスですか?/どのように? このエラーは、既に存在する PK に何かを挿入しようとしていることを意味します。

表から選択して、存在するものを確認します。異なる値を使用して、管理スタジオで挿入ステートメントだけを実行してみてください。

于 2012-06-20T02:34:14.550 に答える