从存储过程返回int值并在asp.net代码中检查它以validation登录表单

这个代码运行的真正顺序是什么,因为我尝试了很多次,但是没有得到有效的结果

// SQL存储过程的代码

set ANSI_NULLS ON set QUOTED_IDENTIFIER ON GO ALTER PROC [dbo].[login_proc] @username Varchar =50, @password varchar=50 as Declare @user_name varchar , @pass_word varchar, @result varchar Set @user_name = @username Set @pass_word = @password if EXISTS (select username , password from data where username= @user_name) set @result= 1 else set @result=0 return @result 

和asp.net代码是

  SqlConnection conn = new SqlConnection ("Data Source=ANAGUIB-LAPNEW\\SQLEXPRESS;Initial Catalog=account;Integrated Security=True"); SqlCommand cmd = new SqlCommand("login_proc",conn); cmd.CommandType = CommandType.StoredProcedure; SqlParameter paramReturnValue = new SqlParameter(); paramReturnValue.ParameterName = "@result"; paramReturnValue.SqlDbType = SqlDbType.Int; cmd.Parameters.Add(paramReturnValue); cmd.Parameters["@result"].Direction = ParameterDirection.Output; conn.Open(); cmd.Parameters.AddWithValue("@username", TextBox1.Text); cmd.Parameters.AddWithValue("@password", TextBox2.Text); cmd.ExecuteScalar(); string retunvalue = (string)cmd.Parameters["@result"].Value; if (retunvalue == "1") { Response.Redirect("hello.aspx"); } else { Response.Write("error"); } conn.Close(); 

您正在执行.ExecuteScalar()因此您希望从存储过程中返回一行包含单行,单列的结果集 – 但您不会在存储过程结束时选择任何内容!

您需要更改存储过程中的最后一行

 return @result 

 SELECT @result 

然后它应该工作。

为返回值添加另一个参数

 ALTER PROC [dbo].[login_proc] @username Varchar = 50, @password Varchar = 50, @result int OUTPUT 

可以在此处查看示例。

你试过这个吗? 使用

 return @result 

并在c#

 int resultID = Convert.ToInt32(cmd.ExecuteScalar()); 

同时删除下一行

 cmd.Parameters[""].value; 

我无法登录任何建议,在存储过程和代码隐藏的情况下,任何人都可以为此提供解决方案,,, plz ,,,