C# 从存储过程返回int值,并在asp.net代码中检查它以验证登录表单
可能重复:C# 从存储过程返回int值,并在asp.net代码中检查它以验证登录表单,c#,.net,asp.net,C#,.net,Asp.net,可能重复: 大家好,我需要这段代码的帮助,因为它是存储过程验证用户名和密码,这里的问题是表单验证任何数据,即使它没有存储在数据库中,我尝试了很多次修复代码,但实际上我没有更多的事要做,任何人都可以帮助我解决这个问题 这是存储过程 set ANSI_NULLS ON set QUOTED_IDENTIFIER ON GO ALTER PROC [dbo].[login_procedure] @username Varchar =50, @password varchar=50, @result
大家好,我需要这段代码的帮助,因为它是存储过程验证用户名和密码,这里的问题是表单验证任何数据,即使它没有存储在数据库中,我尝试了很多次修复代码,但实际上我没有更多的事要做,任何人都可以帮助我解决这个问题 这是存储过程
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER PROC [dbo].[login_procedure] @username Varchar =50, @password varchar=50, @result int OUTPUT
as
Declare @user_name varchar , @pass_word varchar
Set @user_name = @username
Set @pass_word = @password
if EXISTS (select @username , @password from data where username= @user_name and password=@pass_word)
select @result=1
else
select @result=0
这是asp.net代码
SqlConnection conn = new SqlConnection ("Data Source=ANAGUIB-LAPNEW\\SQLEXPRESS;Initial Catalog=account;Integrated Security=True");
SqlCommand cmd = new SqlCommand("login_procedure", 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);
int resultID = Convert.ToInt32(cmd.ExecuteScalar());
if (Convert.ToInt32(resultID) == 0)
{
Response.Redirect("hello.aspx");
}
else
{
Response.Write("error");
}
conn.Close();
}
存储过程有输出参数,最好在关闭连接后访问输出参数的值 我改变了程序
ALTER PROCEDURE login_procedure
@username Varchar(50),
@password varchar(50),
@result int OUTPUT
AS
IF EXISTS (select username from data where username= @username and password=@password)
set @result=1
else
set @result=0
演示:如何传递参数(输入和输出)
在此代码中
if EXISTS (select @username ,
@password
from data
where username= @user_name and password=@pass_word)
select @result=1
else
select @result=0
如果给定的输入在C#代码中得到验证,则返回1。如果返回值不是0,则返回错误,这就是为什么表中不存在的每个输入都会得到验证的原因。请尝试此操作
if (resultID == 1)
{
Response.Redirect("hello.aspx");
}
else
{
Response.Write("error");
}
您不必两次转换存储过程的返回值,一次就够了。AVD先生,你不认为这只是C代码中的if语句吗?我的意思是,如果用户名和密码存在,他会返回1,但在C代码中,当出现非0的内容时,即使是1,即使给定的输入经过验证,他也会给出错误。@AteşGÜRAL这是真的!他/她正在尝试将Int转换为Int,但在我的帖子中,我已经解释了如何使用输出参数。Thnxxxxxxxxxxxxxxxxxx很多你真的为我解决了一个大问题:),只是我需要你解释这一行,因为我不懂Int.TryParse(resultParam.Value.ToString(),out-retVal)@BasmaOsama你可以在这里阅读解释,我像你一样修改了代码,它给出了逻辑结果,thnx alot:)祝你好运,朋友,你可以通过点击左边的勾号接受我的帖子作为你的答案,这样其他人就可以很容易地看到他们需要的解决方案。不要重复问题。
if (resultID == 1)
{
Response.Redirect("hello.aspx");
}
else
{
Response.Write("error");
}