Andy Lanng
Есть два пути.
Первый: создайте select или select count(*) с теми же параметрами и проверьте, есть ли возвращенные результаты > 0. Не выполняйте вторую вставку, если выбор не имеет никаких результатов
Два: (правильный путь) Вы можете использовать Select
даже если у вас есть только переменные для вставки. Вы можете использовать этот синтаксис для добавления Where
пункт
Добавьте предложение на вставку, чтобы избежать дублирования:
//use @ for a literal string. That way you just just multiline it
s = @"
insert into Cars (Car_id , Car_No, Car_No_2, Car_shs, Car_Motor)
Select @Car_id , @Car_No, @Car_No_2, @Car_shs, @Car_Motor
Where not exists (
select *
from Cars
where
Car_id = @Car_id
and Car_No = @Car_No,
and Car_No_2 = @Car_No_2
and Car_shs = @Car_shs
and Car_Motor = @Car_Motor)
"
sCommand = new SqlCommand(s, con);
con.Open();
sCommand.Parameters.AddWithValue("@Car_id", txt_Car_id.Text);
sCommand.Parameters.AddWithValue("@Car_No", txt_Car_No.Text);
sCommand.Parameters.AddWithValue("@Car_No_2", txt_Car_No_2.Text);
sCommand.Parameters.AddWithValue("@Car_shs", txt_Car_shs.Text);
sCommand.Parameters.AddWithValue("@Car_Motor", txt_Mator_No.Text);
sCommand.ExecuteNonQuery();
Это не будет вставляться, если оно существует.
Вы можете проверить, был ли он вставлен, проверив возвращаемое значение
sCommand.ExecuteNonQuery()
. Он возвращает количество затронутых строк:
var recordsAffected = sCommand.ExecuteNonQuery();
return recordsAffected == 1;
Надеюсь, это поможет ^_^
Энди
Andy Lanng
Да, это не очень хорошо рекламируется, что ExecuteNonQuery() возвращает int, поэтому мне нравится распространять эти знания всякий раз, когда я могу ^_^