2016-03-24 6 views
-2

WebフォームがSQL Serverに既に接続されています。私は挿入することができますが、テーブルにすでに同じ情報がある場合、データを挿入しないように検証を行う方法はわかりません。asp.netからSQL Serverに挿入されたデータを検証する方法

この処理はどのように実行できますか?

using (SqlConnection con = new SqlConnection("Data Source=hans-pc;Initial Catalog=CntExp;Integrated Security=True")) 
{ 
    SqlCommand cmd = new SqlCommand("INSERT INTO PreExp1 (Expe, Usuario) values (@Expe, @Usuario)", con); 
    cmd.Parameters.AddWithValue("@Expe", TextBox1.Text); 
    cmd.Parameters.AddWithValue("@Usuario", TextBox2.Text); 
    //cmd.Parameters.AddWithValue("@Fecha", Datenow()); 

    con.Open(); 

    int insertar = cmd.ExecuteNonQuery(); 

    Response.Write("Inserted" + insertar.ToString()); 
} 
+0

ユニークなインデックスを挿入し、障害を処理してください。また、接続が完了したら明示的に接続を閉じる必要があります。 –

+0

ようこそStackOverflow!あなたの質問は、それを達成するためのさまざまな方法がたくさんあるので、少し広いです。コード内(トランザクション内)からデータベースを照会するか、データベース内のトリガーを使用してデータが存在するかどうかを確認できます。 SOは、特定のコーディングの問題であなたを助ける可能性が高くなります。だから、「同じ情報」が何を意味するのかをより具体的に説明する必要があります。セマンティクスは、コードまたはDBレベルで検証するかどうかを決定するのに役立ちます。 –

+0

@OmarLopez正しい参照整合性を持ってテーブルを構築すると、適切にキャッチして処理できる例外がスローされます。 –

答えて

0

入力パラメータを使用しています。このような行は:

cmd.Parameters.AddWithValue("@Expe", TextBox1.Text); 

入力パラメータとみなされます。データを検証する1つの方法は、Outputパラメーターを使用することです。ような何か:

SqlParameter outParam = cmd.Parameters.Add("@MyParam", sqlDbType.Uniqueidentifier); 
outParam.Direction = ParameterDirection.Output; 

は、レコードが存在するか否かを判断するストアドプロシージャにそれを渡し、渡しブール戻ってあなたのC#コードを「true」または「false」。 次に、outParamの値をチェックして、コードの処理を続行するかどうかを判断できます。

0

データベースで正しい整合性チェックを行うことは別として、WHERE NOT EXISTSサブクエリを適用することができます。

INSERT INTO PreExp1 (Expe, Usuario) 
VALUES (@Expe, @Usuario) 
WHERE NOT EXISTS (SELECT * FROM PreExp1 
        WHERE Expe = @Expe 
        AND Usuario = @Usuario) 
関連する問題