使用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();

使用SQL Server Express获取存储过程的值

试试这个

    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作为查询结果"返回",那么这不是您想要的。

但是,如果没有看到您的存储过程代码,我就无法判断您需要两种方法中的哪一种。