私の質問は非常に簡単です: 私は列名が「lastname」で、フィールドが lastname1、lastname2、lastname3 の SQL テーブルを持っています...
私のC#コードでは、列lastnameのフィールドがテーブルに存在しない場合にのみ、テーブルに行を挿入するメソッドがあります。入力のこのメソッドには姓があるため、INSERT はパラメーターです。
フィールドlastnameがすでにテーブルにあるかどうかを比較して確認するにはどうすればよいですか?
ありがとう
私の質問は非常に簡単です: 私は列名が「lastname」で、フィールドが lastname1、lastname2、lastname3 の SQL テーブルを持っています...
私のC#コードでは、列lastnameのフィールドがテーブルに存在しない場合にのみ、テーブルに行を挿入するメソッドがあります。入力のこのメソッドには姓があるため、INSERT はパラメーターです。
フィールドlastnameがすでにテーブルにあるかどうかを比較して確認するにはどうすればよいですか?
ありがとう
フィールドを一意にする必要がある場合は、テーブルで常に一意の制約を使用する必要があります。そうすれば、入力が SSMS または別のアプリケーションから直接行われた場合でも、常に重複を防ぐことができます。
次に、その番号に従って発生した sql-exception を処理するのが最も簡単です。
....
try
{
int inserted = cmd.ExecuteNonQuery();
} catch (SqlException ex)
{
if (ex.Number == 2601)
{
// show meaningful error message
MessageBox.Show("Cannot insert duplicate key row in object");
}
else
throw;
}
....
2 つのオプションがあります。1 つは SQL 側から、もう 1 つはコード ビハインドからです。
残念ながら、SQL コードを変更することはできません。@David に同意します。
コードビハインドから、このようなことをしなければなりません。
まず、テーブルからすべてのデータを選択し、そのデータを確認する必要があります。このようなもの。
SqlConnection con = new SqlConnection();
SqlCommand cmd = new SqlCommand();
cmd.Connection = con; //Your connection string"
cmd.CommandText = "Select * from table1"; // your query
cmd.CommandType = CommandType.Text;
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
DataTable dt = new DataTable();
dt = ds.Tables[0];
int count=0;
for (int i = 0; i > dt.Rows.Count; i++)
{
if (Convert.ToString(dt.Rows[i]["LastName"]) == Lastname)
{
count++;
}
}
if (count > 0)
{
//insert code for data
}
else
{
var script = "alert('"+ Lastname + "already exist.');";
ClientScript.RegisterStartupScript(typeof(Page), "Alert", script, true);
// or you can use here your Update statement
}
これがあなたを助け、あなたが理解できるように。
この SQL は、値がまだテーブルにない場合にのみ、新しいレコードを挿入します。
INSERT INTO Your_Table ( LastName )
SELECT @NewLastName
WHERE NOT EXISTS( SELECT * FROM Your_Table WHERE LastName = @NewLastName )