2016-06-11 55 views
0

私のASPのウェブサイトに私はデータベースにデータを送信する登録フォームを持っています。ユーザーがデータを入力すると、送信後に次のようなエラーが表示されます。オブジェクト 'dbo.UserInfo'に重複キーを挿入できません。重複するキー値は()です。声明は終了しました

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

これはコードです: ` signup.aspx.cs-

protected void submit_Click(object sender, EventArgs e) 
{ 
    string name = Request.Form["name"]; 
    string email = Request.Form["email"]; 
    string password = Request.Form["password"]; 
    string fileName = "Database.mdf"; 
    string sql = "INSERT INTO UserInfo VALUES('" + name + "','" + email + "','" + password + "')"; 
    MyAdoHelper.DoQuery(fileName,sql); 
} 

MyAdoHelper.DoQuery-

public static void DoQuery(string fileName, string sql) 
{ 

    SqlConnection conn = ConnectToDb(fileName); 
    conn.Open(); 
    SqlCommand com = new SqlCommand(sql, conn); 
    com.ExecuteNonQuery(); 
    com.Dispose(); 
    conn.Close(); 

} 

MyAdoHelper.ConnectToDb-

public static SqlConnection ConnectToDb(string fileName) 
{ 
    string path = HttpContext.Current.Server.MapPath("App_Data/"); 
    path += fileName; 
    //string path = HttpContext.Current.Server.MapPath("App_Data/" + fileName); 
    string connString = @"Data Source = (LocalDB)\MSSQLLocalDB; AttachDbFilename = C:\Users\User\Documents\Visual Studio 2015\WebSites\WebSite6\App_Data\Database.mdf; Integrated Security = True"; 
    SqlConnection conn = new SqlConnection(connString); 
    return conn; 

} 

ことができる人助けて? thx!

+1

前に確認することができますか? –

+0

私はその名前は と思うPRIMARY KEY CLUSTERED([Name] ASC) –

+0

名前はあなたのためのプライマリコラムです! ( '+ name + "'、+" + email + "')を入力すると、sql ="次のように入力する必要があります。 、 '"+パスワード+"')END ";その名前がす​​でにあなたのテーブルに存在するかどうかを確認するのに役立ちますので、そのエラーを避けることができます! – Akhilesh

答えて

0

あなたのスキーマはわかりませんが、あなたのemail変数が空であると思います。

SQL Serverインスタンスに固有のキーが設定されていて、その列に空の値を2回目に追加しようとしているようです。

クエリをビルドするときにブレークポイントを追加して、各変数をダブルチェックして、クライアントが受け取るのと同じ形式でデータを渡すようにしてください。

+0

私は理解していない、なぜあなたは電子メールvaribaleが空だと思うだろう –

+0

@OplItayそれは少しのストレッチだったが、私は電子メールがそれにユニークなキーを持つ列であると推測する危険にさらされている。それが他のものの1つである可能性もあります。 –

+0

あなたのスキーマを説明してもらえますか?サイドノート:私は、ある種のORMを使用し始めたり、少なくともユーザーの入力を消毒する時が来たと思います。あなたがデータレイヤーとやりとりする方法を見ているのは恐ろしいです –

0

エラーごとに、プライマリキーを有効にした列に同じ値を挿入しようとしていますが、ユニークな値のみを保持するため許可されていません。

チェックテーブルのスキーマを、同じ値が挿入倍数であるプライマリー列のいずれかの「name」と「メール」(ここではわからない、正確な列名)、その後、デバッグがある列を識別:

だから、手順の下に試すことができます時間。

そのユーザが既に電子メールが主キーである場合、それをチェック

を更新し、再び他のそれを挿入していないが存在するかのように、ユーザがバックエンドの変更コードで主キーである場合にも確認することができます!

あなたは挿入データのUserInfo talbeの主キーです列

IF NOT EXISTS(SELECT 1 from tablename where primarycolumn=value) 
BEGIN 
//insert into this table 
END 
ELSE 
//update it 
+0

私は本当にsqlについてよく分かりません。 プライマリ列をチェックするにはどうすればよいですか? プライマリキーとは何ですか? –

+0

クールな名前があなたのプライマリコラムです! ( '+ name + "'、+" + email + "')を入力すると、sql ="次のように入力する必要があります。 、 '"+パスワード+"')END ";その名前がす​​でにあなたのテーブルに存在するかどうかを確認するのに役立ちますので、そのエラーを避けることができます! – Akhilesh

+0

私はそれを行った、そのエラー(thx神)を表示していないが、私はそのテーブルにデータを挿入するとは思わない –

関連する問題