存储过程 - 过程或函数Validate_User指定了太多参数。 [英] Store procedure - Procedure or function Validate_User has too many arguments specified.
问题描述
我试图在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屋!