Executenonquery返回值

时间:2011-04-12 03:14:46

标签: asp.net return-value executenonquery

我想在表上执行搜索以查看记录是否存在。我不想在之后执行插入或更新。我已经这样做了但不知何故我不能让这个工作。在我的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 个答案:

答案 0 :(得分:1)

您需要确保传递整数。

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中定义参数    代码。)

答案 1 :(得分:0)

您已将过程参数声明为@d而不是@id。返回参数也不能是输入参数。返回值应该是退出代码。您最有可能想要创建一个输出参数,并将其设置为存储过程内的1或零。

编辑:澄清一下,返回值通常被视为正确执行的指标。零通常意味着成功,其中任何其他数值通常被视为错误代码。这就是我建议添加输出参数而不是添加返回值参数的原因。

答案 2 :(得分:0)

ExecuteNonQuery返回受影响的行数。因此,您在存储过程中设置的返回值将被丢弃,并且ExecuteNonQuery方法不会返回。

答案 3 :(得分:-2)

ExecuteNonQuery用于插入/删除/更新操作。不适用于SELECT,您需要ExecuteScalar或ExecuteReader方法。此链接将帮助您了解如何使用输出参数:http://aspdotnet-suresh.blogspot.com/2010/10/introduction-here-i-will-explain-how-to.html