Member 12244977 Ответов: 3

Как я проверяю, существует ли значение уже в базе данных, когда я вставляю значения с помощью C#


это мой код в проекте :-

s = "insert into Cars (Car_id , Car_No, Car_No_2, Car_shs, Car_Motor)
s = s + "values (@Car_id , @Car_No, @Car_No_2, @Car_shs, @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();


Что я уже пробовал:

перед сохранением значения в базе данных проверьте, существует ли Car_id в базе данных

3 Ответов

Рейтинг:
28

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;


Надеюсь, это поможет ^_^
Энди


[no name]

Хороший трюк :)

Andy Lanng

Да, это не очень хорошо рекламируется, что ExecuteNonQuery() возвращает int, поэтому мне нравится распространять эти знания всякий раз, когда я могу ^_^

Рейтинг:
19

Manas_Kumar

Попробуйте ниже код:

// Checking car exist in Database
string s = @"SELECT COUNT(*) FROM Cars WHERE Car_id = @Car_id))";
sCommand = new SqlCommand(s, con);
sCommand.Parameters.AddWithValue("@Car_id", txt_Car_id.Text);
con.Open();
int records = (int)sCommand.ExecuteScalar();

if(records == 0)
{
	sCommand.Parameters.Clear();
	s = @"insert into Cars (Car_id , Car_No, Car_No_2, Car_shs, Car_Motor)
		values (@Car_id , @Car_No, @Car_No_2, @Car_shs, @Car_Motor)";
	sCommand = new SqlCommand(s, con);

	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();
}
else
{
	Response.Write("Records Exists");
}


Рейтинг:
0

SatamDipesh

Я предположил, что вы используете базу данных MSSQL, используйте инструкцию SQL MERGE на стороне базы данных.