Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从存储过程返回int值,并在asp.net代码中检查它以验证登录表单_C#_.net_Asp.net - Fatal编程技术网

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");       
}