存储过程 - 过程或函数Validate_User指定了太多参数。 [英] Store procedure - Procedure or function Validate_User has too many arguments specified.

查看:110
本文介绍了存储过程 - 过程或函数Validate_User指定了太多参数。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图在c#中调用一个简单的SP,当我执行我的登录方法时,它会抛出以下异常 - > 过程或函数Validate_User指定的参数太多。



这是我的代码:

  int  user_id =  0 ; 
string constr = ConfigurationManager.ConnectionStrings [ dummyConnectionString]的ConnectionString。
使用(SqlConnection con = new SqlConnection(constr))
{
使用(SqlCommand cmd = new SqlCommand( Validate_User))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue( @ Username,Login1.UserName);
cmd.Parameters.AddWithValue( @ Password,Login1.Password);
cmd.Parameters.AddWithValue( @ id,user_id);
cmd.Connection = con;
con.Open();


SqlDataReader dr = cmd.ExecuteReader();
if (dr.Read())
{
con.Close();
会话[ UserAuthentication] = user_id;
Response.Redirect( 〜/ Port / insert.aspx);
// FormsAuthentication.RedirectFromLoginPage(Login1.UserName,Login1.RememberMeSet);
}





SP

  ALTER   PROCEDURE  [dbo]。[Validate_User] 
@ Username < span class =code-keyword> NVARCHAR ( 50 ),
@ Password NVARCHAR 50
AS
BEGIN
SET NOCOUNT ON ;

SELECT 用户名,[密码],id
FROM [ dbo]。[用户]
WHERE 用户名= @Username AND [密码] = @密码


END





我的SP或上午是否有问题我错过了我的C#代码。

感谢您的帮助。

解决方案

您的SQL存储时,在C#代码中传递三个参数是不是很明显Proc只接受两个参数?



 cmd.Parameters.AddWithValue(  @ Username,Login1.UserName); 
cmd.Parameters.AddWithValue( @ Password,Login1.Password);
cmd.Parameters.AddWithValue( @ id,user_id);





@id参数来自哪里?


你需要指定@id是一个输出参数。



  ALTER   PROCEDURE  [dbo]。[Validate_User] 
@ Username NVARCHAR 50 ),
@ Password NVARCHAR 50
@ id INT 输出
AS
...



在c#中你还需要指定id用于输出,如下所示:

SqlParameter outParam = cmd.Parameters.AddWithValue( @ id,user_id );
outParam.Direction = ParameterDirection.Output;



执行后你还需要读回值,如下所示:

  int  return_id = cmd.Parameters [  @ id]。价值; 



祝你好运!


I am trying to call a simple SP in c#, and when I execute my login method, it throws the following exception --> Procedure or function Validate_User has too many arguments specified..

Here is my code:

int user_id = 0;
            string constr = ConfigurationManager.ConnectionStrings["dummyConnectionString"].ConnectionString;
            using (SqlConnection con = new SqlConnection(constr))
            {
                using (SqlCommand cmd = new SqlCommand("Validate_User"))
                {
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.Parameters.AddWithValue("@Username", Login1.UserName);
                    cmd.Parameters.AddWithValue("@Password", Login1.Password);
                    cmd.Parameters.AddWithValue("@id", user_id);
                    cmd.Connection = con;
                    con.Open();


                    SqlDataReader dr = cmd.ExecuteReader();
                    if (dr.Read())
                    {
                        con.Close();
                        Session["UserAuthentication"] = user_id;
                        Response.Redirect("~/Port/insert.aspx");
                       // FormsAuthentication.RedirectFromLoginPage(Login1.UserName, Login1.RememberMeSet);
                    }



SP

ALTER PROCEDURE [dbo].[Validate_User]
      @Username NVARCHAR(50),
      @Password NVARCHAR(50)
AS
BEGIN
      SET NOCOUNT ON;
     
      SELECT username, [password], id
      FROM [dbo].[User] 
	  WHERE Username = @Username AND [password] = @Password
     

END



Is there issue with my SP or am I missing something my C# code.
Thank you for your help.

解决方案

Isn't it apparent that you are passing three parameters in your C# code while your SQL Stored Proc only accepts two paranmeters?

cmd.Parameters.AddWithValue("@Username", Login1.UserName);
cmd.Parameters.AddWithValue("@Password", Login1.Password);
cmd.Parameters.AddWithValue("@id", user_id);



Where does the @id parameters comes from?


You need to specify that @id is an output parameter.

ALTER PROCEDURE [dbo].[Validate_User]
      @Username NVARCHAR(50),
      @Password NVARCHAR(50)
      @id INT OUTPUT
AS
...


In c# you also need to specify that the id is for output, something like this:

SqlParameter outParam = cmd.Parameters.AddWithValue("@id", user_id);
outParam.Direction = ParameterDirection.Output;


After executing you also need to read back the value, something like this:

int return_id = cmd.Parameters["@id"].Value;


Good luck!


这篇关于存储过程 - 过程或函数Validate_User指定了太多参数。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆