使用SQL Server Express获取存储过程的值
本文关键字:存储过程 获取 Express SQL Server 使用 | 更新日期: 2023-09-27 18:20:37
我有一个存储过程,它从SQL Server数据库表中检查用户名和密码。如果用户名和密码正确,存储过程将返回1,或者返回0。这是代码。你能告诉我怎样才能得到1或0吗?rdr.toString
不工作。
SqlCommand cmd = new SqlCommand("sp_IsValidLogon", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@Username", textBox1.Text));
cmd.Parameters.Add(new SqlParameter("@Password", textBox2.Text));
rdr = cmd.ExecuteReader();
label1.Text = rdr.ToString();
试试这个
label1.Text=cmd.ExecuteScalar().ToString();
而不是这个:
rdr = cmd.ExecuteReader();
label1.Text=rdr.ToString();
这应该可以正常工作:
if (rdr.Read())
label1.Text = rdr[0].ToString();
首先必须调用.Read()
方法一次以"初始化"数据读取器,然后获取第一个字段的值——假设这是存储过程返回的所有值,它就会工作。
你可以在没有阅读器的情况下完成所有这些:
label1.Text = cmd.ExecuteScalar().ToString();
ExecuteScalar()
的存在正是为了这个目的——从数据库中读取一个值。
如果使用RETURN语句从存储过程返回,则需要向.NET代码中的SqlCommand添加另一个INTEGER参数,其参数为ParameterDirection=ParameterDirection.ReturnValue.
然后,在执行存储过程后,只需从SqlCommand中检索该参数的值。
指令使用ExecuteScalar。此处的示例:http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executescalar.aspx
我假设您的存储过程有一个实际的"return"语句,它返回0或1。在这种情况下,在ParameterDirection设置为"ReturnValue"的情况下,向命令中添加一个sqlparameter。
在这种情况下,ExecuteNonQuery应该可以正常工作。
ExecuteScalar返回第一行第一列的值。如果您没有将存储过程中的0或1作为查询结果"返回",那么这不是您想要的。
但是,如果没有看到您的存储过程代码,我就无法判断您需要两种方法中的哪一种。