Executenonquery возвращаемое значение - PullRequest
1 голос
/ 12 апреля 2011

Я хочу выполнить поиск по таблице, чтобы увидеть, существует ли запись. Я не хочу выполнять вставку или обновление после. Я уже сделал это, но почему-то я не могу заставить это работать. На моей странице asp.net я не могу получить какое-либо возвращаемое значение. Ошибка «входная строка не в правильном формате». Я уверен, что это очевидно, но сейчас я не вижу ее!

вот мой код:

Dim con As New SqlConnection("connstring")
Dim cmd As New SqlCommand("checkname", con)
cmd.CommandType = CommandType.StoredProcedure

cmd.Parameters.Add(New SqlParameter("@d", SqlDbType.Int))
cmd.Parameters("@id").Value = TextBox1.Text

Dim para As New SqlParameter
para.Direction = ParameterDirection.ReturnValue
para.ParameterName = "returnvalue"
cmd.Parameters.Add(para)

con.Open()


cmd.ExecuteNonQuery()
Dim exists As Integer
exists = Convert.ToInt32(cmd.Parameters("returnvalue").Value)
If exists = 1 Then
    Label1.Text = "You......"
         ElseIf exists = 0 Then
    Label1.Text = "You....."

End If
con.Close()

хранимая процедура:

CREATE PROCEDURE checkname 
    -- Add the parameters for the stored procedure here
    @id int
AS
  --This means it exists, return it to ASP and tell us
 -- SELECT 'already exists'

IF EXISTS(SELECT * FROM attendees WHERE id = @id)
BEGIN
RETURN 1
END
ELSE
BEGIN
   RETURN 0
END

Ответы [ 4 ]

1 голос
/ 12 апреля 2011

Вы должны убедиться, что передаете целое число.

int intValue;
if(!int.TryParse(TextBox1.Text, out intValue))
{
     // Update your page to indicate an error

     return;

}

cmd.Parameters.Add(New SqlParameter("id", SqlDbType.Int));
cmd.Parameters("id").Value = intValue; 

(Технически вам не нужен символ "@", когда определение параметров в .NET код.)

0 голосов
/ 23 сентября 2011

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

0 голосов
/ 12 апреля 2011

ExecuteNonQuery используется для операций вставки / удаления / обновления. Не для SELECT, вам нужны методы ExecuteScalar или ExecuteReader. Эта ссылка поможет вам узнать, как использовать выходные параметры: http://aspdotnet -suresh.blogspot.com / 2010/10 / введение-здесь-я-объясню-как-к.html

0 голосов
/ 12 апреля 2011

Вы объявили свой параметр процедуры как @d вместо @id. Также возвращаемый параметр не может быть входным параметром. Возвращаемое значение должно быть кодом выхода. Скорее всего, вы хотите создать выходной параметр и установить его в 1 или ноль внутри вашей хранимой процедуры.

Редактировать: чтобы уточнить, возвращаемое значение обычно рассматривается как индикатор правильного выполнения. Ноль обычно означает успех, где любое другое числовое значение обычно рассматривается как код ошибки. Вот почему я рекомендовал добавить выходной параметр вместо добавления параметра возвращаемого значения.

...