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