Знайте, была ли запись только что вставлена ​​через С# 4.0?

Возможно ли в C#/ASP.NET узнать, вставил ли ExecuteNonQuery запись или нет?

Я проверяю, чтобы убедиться, что адрес электронной почты не существует в таблице, используя подзапрос.

Есть ли способ узнать, была ли вставка сделана в ASP.NET?

CommandPrizeEmails.Parameters.Add("@Email", SqlDbType.VarChar, 50);
CommandPrizeEmails.Parameters.Add("@DateToday", SqlDbType.DateTime);

CommandPrizeEmails.Parameters["@Email"].Value = txtEmail.Text;
CommandPrizeEmails.Parameters["@DateToday"].Value = DateTime.Now;

CommandPrizeEmails.ExecuteNonQuery();

//int newID = (int)CommandPrizeEmails.ExecuteScalar();

//CommandPrizeEmails.ExecuteNonQuery();
//if (newID >= 1) {
//    divSuccesfulEntry.Visible = true;
//} else {
//    divRepeatEntry.Visible = true;
//}

person JoJo    schedule 28.08.2013    source источник
comment
Что не так с ExecuteScalar()? Если я не ошибаюсь, он должен вернуть количество строк, затронутых запросом.   -  person Shimrod    schedule 28.08.2013


Ответы (3)


Вы можете получить затронутые строки взамен, чтобы проверить процесс.

Для инструкций UPDATE, INSERT и DELETE возвращаемое значение — это количество строк, затронутых командой.

Если для вставляемой или обновляемой таблицы существует триггер, возвращаемое значение включает в себя количество строк, на которые повлияла операция вставки или обновления, а также количество

строки, затронутые триггером или триггерами. Для всех остальных типов операторов возвращаемое значение равно -1. Если происходит откат, возвращаемое значение также равно -1.

http://blogs.msdn.com/b/spike/archive/2009/01/27/sqlcommand-executenonquery-returns-1-when-doing-insert-update-delete.aspx

person Neha    schedule 28.08.2013
comment
Делает ли int retVal = CommandPrizeEmails.ExecuteNonQuery(); ОБА Вставку (если возможно) И устанавливает retVal? ... Моя вставка не работает для нового адреса электронной почты. - person JoJo; 28.08.2013
comment
да ... если ваш SQL-запрос работает нормально, он вставит и вернет retVal номер строки. И вы можете проверить retVal, чтобы узнать, работает он или нет. - person Neha; 28.08.2013
comment
Спасибо, но я, должно быть, делаю что-то не так. Я не получаю вставку. ТРЕБУЕТСЯ ли это, чтобы я использовал SP? Мне действительно не нужен SP здесь .. Спасибо. - person JoJo; 28.08.2013
comment
Для вставки вы должны либо использовать sp, либо зависит любой прямой запрос. Нет ничего плохого в использовании sp. Сначала попробуйте, чтобы ваш SP работал в sql напрямую там. - person Neha; 28.08.2013
comment
Я думаю, что что-то не так с моим подзапросом. Вы знаете, что это может быть? INSERT INTO Emails (email, insertDate) VALUES (@Email, @DateToday) WHERE NOT EXISTS (SELECT Emails.email FROM Emails WHERE Emails.email = @Email);" - person JoJo; 28.08.2013
comment
Я использую MS SQL SERVER - person JoJo; 28.08.2013

ExecuteNonQuery Возвращает логическое значение значение захвата

ex:

bool flg;

flg=cmd.ExecuteNonQuery(); 
if (flg)
{ msgbox("successfully inserted");}
else {msgbox("not inserted");}
person senthilkumar2185    schedule 28.08.2013

bool flg;

flg=cmd.ExecuteNonQuery(); 
if (flg)
{ MessageBox.Show("successfully inserted");
}
else 
{
MessageBox.Show("not inserted");
}

Это дает ошибку как:

Невозможно неявно преобразовать тип «int» в «bool»

person ARJUN    schedule 09.01.2014