从存储过程返回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 ,,,