将参数传递给C#中的存储过程 [英] Passing parameter to stored procedure in C#

查看:124
本文介绍了将参数传递给C#中的存储过程的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个存储过程,该过程返回设置为1或0(数据类型位)的变量@result。我正在使用以下代码在C#中访问它。它抛出一个错误,说明参数过多。

I have a stored procedure that returns a variable @result set to 1 or 0 (datatype bit). I am accessing it in my C# with the following code. Its throwing an error saying too many parameters.

 protected void btnRegister_Click(object sender, EventArgs e)
    {

        SqlConnection con = new SqlConnection(System.Configuration.ConfigurationManager.AppSettings["ConnectionString"]);
        con.Open();



        SqlCommand Cmd = new SqlCommand("usp_CheckEmailMobile", con);
        Cmd.CommandType = CommandType.StoredProcedure;
        Cmd.CommandText = "Registration";
        Cmd.Parameters.AddWithValue("@Name", txtName.Text);
        Cmd.Parameters.AddWithValue("@Email", txtEmailAddress.Text);
        Cmd.Parameters.AddWithValue("@Password", txtPassword.Text);
        Cmd.Parameters.AddWithValue("@CountryCode", ddlCountryCode.Text);
        Cmd.Parameters.AddWithValue("@Mobile", txtMobileNumber.Text);
        //Cmd.Parameters.Add("@Result", DbType.Boolean);
        SqlParameter sqlParam = new SqlParameter("@Result", DbType.Boolean);
        //sqlParam.ParameterName = "@Result";
        //sqlParam.DbType = DbType.Boolean;
        sqlParam.Direction = ParameterDirection.Output;
        Cmd.Parameters.Add(sqlParam);
        Cmd.ExecuteNonQuery();
        con.Close();
        Response.Write(Cmd.Parameters["@Result"].Value); 



    }

存储过程: (我认为这很好...)并且请更正我的CS代码...

the stored procedure: (this I think is fine...) And please correct my CS code...

ALTER PROCEDURE [dbo].[usp_CheckEmailMobile]
  ( @Name VARCHAR(50), 
@Email NVARCHAR(50), 
@Password NVARCHAR(50), 
@CountryCode INT, 
@Mobile VARCHAR(50), 
@Result BIT OUTPUT)
 AS 
BEGIN 

IF EXISTS (SELECT COUNT (*) FROM AUser WHERE  [Email] = @Email AND [Mobile] = @Mobile) 
 Begin 
 Set @Result=0; --Email &/or Mobile does not exist in database
End
ELSE
Begin
  --Insert the record & register the user 
INSERT INTO [AUser] ([Name], [Email], [Password], [CountryCode], [Mobile]) VALUES (@Name, @Email, @Password, @CountryCode, @Mobile)  
Set @Result=1;
 End

END


推荐答案

您可以尝试以下代码:

bool result=false;
SqlCommand scCommand = new SqlCommand("usp_CheckEmailMobile", sqlCon);
scCommand.CommandType = CommandType.StoredProcedure;
scCommand.Parameters.Add("@Name", SqlDbType.VarChar, 50).Value = txtName.Text;
scCommand.Parameters.Add("@Email", SqlDbType.NVarChar, 50).Value = txtEmailAddress.Text;
scCommand.Parameters.Add("@Password ", SqlDbType.NVarChar, 50).Value = txtPassword.Text;
scCommand.Parameters.Add("@CountryCode", SqlDbType.VarChar.50).Value =ddlCountryCode.SelectedText;
scCommand.Parameters.Add("@Mobile", SqlDbType.NVarChar, 50).Value = txtMobileNumber.Text;
scCommand.Parameters.Add("@Result ", SqlDbType.Bit).Direction = ParameterDirection.Output;
try
{
    if (scCommand.Connection.State == ConnectionState.Closed)
    {
        scCommand.Connection.Open();
    }
    scCommand.ExecuteNonQuery();
    result = Convert.ToBoolean(scCommand.Parameters["@Result"].Value);


}
catch (Exception)
{

}
finally
{                
    scCommand.Connection.Close();
    Response.Write(result); 
}

这篇关于将参数传递给C#中的存储过程的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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