2016-10-26 14 views
0

データベースに重複して追加されないように、現在のコードに機能を追加したいと考えています。誰かが既に自分の名前と電子メールを登録している場合は、代わりにメッセージがポップアップして、すでに情報をデータベースに追加したと言います。私のフォームはasp.netを使用しているデータは、C#を使用して設定されています。私はこのようなものを含めることができますか:cmd.CommandText = "select * from Table1 where pName='"+t1.Text+"' and pEmail='"+t2.Text+"'";これを達成するには?ユーザーデータが既にデータベースに存在するかどうかを確認してください

C#コード:

using System.Data.OleDb; 
using System.Configuration; 

public partial class Default2 : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 

    protected void Button1_Click(object sender, EventArgs e) 
    { 
     OleDbConnection con = new OleDbConnection(); 
     con.ConnectionString = ConfigurationManager.ConnectionStrings["NorthwindConnectionString2"].ToString(); 
     con.Open(); 
     OleDbCommand cmd = new OleDbCommand(); 
     cmd.CommandText = "insert into[Table1](pName)values(@nm)"; 
     cmd.Parameters.AddWithValue("@nm", TextBox1.Text); 
     cmd.CommandText = "insert into[Table1](pEmail)values(@nm)"; 
     cmd.Parameters.AddWithValue("@nm", TextBox2.Text); 
     cmd.Connection = con; 
     int a = cmd.ExecuteNonQuery(); 
     if (a>0) 
     { 
      Label1.Text = "Inserted Sucessfully!"; 
     } 
    } 
} 
+0

をトライキャッチを使用して、はい、あなたのことができ、およびレコードの数を返すために、 'COUNT(*)を'を使用します。しかし、文字列concatの代わりに 'Parameters'を使う方が良い – Prisoner

+1

列をユニークにして、try-catchでコードを囲んでください。重複したデータが挿入された場合、SQL例外を介して例外がキャッチされ、メッセージが表示されます –

+0

ありがとうございました!私はそれを試してみましょう! – penmas

答えて

0

私はあなたが最初のINSERT文の前にSELECTクエリを持っていることを示唆しています。また、SELECT文のパラメータとして電子メールを使用することはできますが、名前が含まれていないのは、同じ名前の人がいる可能性があるためです。

string query = "SELECT COUNT(ID) FROM tblUsers WHERE email = @email 
int count = db.ExecuteReader(query);  


if (count > 0){ 
    return "email is already in use"; 
} else { 
    //Call the insert statement here with try catch inside. In this way you can handle if error occur on the execution itself. 
} 
+0

この場合、クエリはintではないのですか? – penmas

+0

私はintの代わりにvarを使用してクエリを宣言していると私の間違いです。 select countはint(レコード数)を返します。 – bogzy

+0

は上記のコードを更新しました。そこにはいくつかの変更を加える必要があるだろうという考えがあります。 – bogzy

0

あなたはこれを使用することができますが、私はこれはリターンの無い持つ単一のクエリであるSQLサーバーに2014 ..Tryこの.. スキーマ

CREATE TABLE [dbo].[Dummy](
    [id] [bigint] IDENTITY(1,1) NOT NULL, 
    [Name] [nvarchar](50) NULL, 
) 

とクエリ

if not exists(select 1 from Dummy where Name='akash') 
    insert into Dummy(Name) values('aka') 

を使用しています行in int a = cmd.ExecuteNonQuery();

方法2: 作成UNIQUE制約と...重複行が挿入されていないことが判明し、短い中

ALTER TABLE [dbo].[Dummy] ADD CONSTRAINT [uc_Name] UNIQUE 
NONCLUSTERED 
(
    Name ASC 
) 
関連する問題