1

我想对表执行搜索以查看记录是否存在。我不想在之后执行插入或更新。我已经这样做了,但不知何故我无法让它发挥作用。在我的 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

4 回答 4

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 代码中定义参数时不需要“@”字符。)

于 2011-04-12T03:19:59.283 回答
0

您已将过程参数声明为@d 而不是@id。返回参数也不能是输入参数。返回值应该是退出代码。您很可能希望在存储过程中创建一个输出参数并将其设置为 1 或零。

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

于 2011-04-12T03:19:06.117 回答
0

ExecuteNonQuery returns the number of rows affected. Therefore the return values that you set in your stored procedure are thrown away and will not be returned by the ExecuteNonQuery method.

于 2011-09-23T09:25:21.073 回答
-2

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

于 2011-04-12T03:25:40.697 回答