C# 过程或函数SP_XXX指定的参数太多

C# 过程或函数SP_XXX指定的参数太多,c#,asp.net,sql-server-2008,C#,Asp.net,Sql Server 2008,我正在处理某个项目,出现以下错误消息: *过程或函数SP_XXX指定的参数太多* 下面是我通过ASP c#应用程序传递的SQL参数 检查了许多站点,但什么都没有:) 非常感谢你的帮助 cmd.Parameters.Add(new SqlParameter() { Value = user.CODE, ParameterName = "@CODE" });cmd.Parameters.Add(new SqlParameter() { Value = CODE, ParameterN

我正在处理某个项目,出现以下错误消息:

*过程或函数SP_XXX指定的参数太多* 下面是我通过ASP c#应用程序传递的SQL参数 检查了许多站点,但什么都没有:) 非常感谢你的帮助

        cmd.Parameters.Add(new SqlParameter() { Value = user.CODE, ParameterName = "@CODE" });cmd.Parameters.Add(new SqlParameter() { Value = CODE, ParameterName = "@OLD_CODE" });
        cmd.Parameters.Add(new SqlParameter() { Value = COCODE, ParameterName = "@OLD_COCODE" });
        cmd.Parameters.Add(new SqlParameter() { Value = user.COCODE, ParameterName = "@COCODE" });
        cmd.Parameters.Add(new SqlParameter() { Value = user.MEMBERTYPE, ParameterName = "@MEMBERTYPE" });
        cmd.Parameters.Add(new SqlParameter() { Value = user.ENNAME, ParameterName = "@ENNAME" });
        cmd.Parameters.Add(new SqlParameter() { Value = user.ARNAME, ParameterName = "@ARNAME" });
        cmd.Parameters.Add(new SqlParameter() { Value = user.NATIONALITY, ParameterName = "@NATIONALITY" });
        cmd.Parameters.Add(new SqlParameter() { Value = user.GENDER, ParameterName = "@GENDER" });
        cmd.Parameters.Add(new SqlParameter() { Value = user.SPECIAL, ParameterName = "@SPECIAL" });
        cmd.Parameters.Add(new SqlParameter() { Value = (object)user.BIRTHDATE ?? DBNull.Value, ParameterName = "@BIRTHDATE" });
        cmd.Parameters.Add(new SqlParameter() { Value = user.Religion, ParameterName = "@RELIGION" });
        cmd.Parameters.Add(new SqlParameter() { Value = user.QUALIFY, ParameterName = "@QUALIFY" });
        cmd.Parameters.Add(new SqlParameter() { Value = user.MEMBERPOS, ParameterName = "@MEMBERPOS" });
        cmd.Parameters.Add(new SqlParameter() { Value = (object)user.JOINDATE ?? DBNull.Value, ParameterName = "@JOINDATE" });
        cmd.Parameters.Add(new SqlParameter() { Value = (object)user.EXPIRYDATE ?? DBNull.Value, ParameterName = "@EXPIRYDATE" });
        cmd.Parameters.Add(new SqlParameter() { Value = user.POBOX, ParameterName = "@POBOX" });
        cmd.Parameters.Add(new SqlParameter() { Value = user.WORKTEL, ParameterName = "@WORKTEL" });
        cmd.Parameters.Add(new SqlParameter() { Value = user.HOMETEL, ParameterName = "@HOMETEL" });
        cmd.Parameters.Add(new SqlParameter() { Value = user.MOBILE, ParameterName = "@MOBILE" });
        cmd.Parameters.Add(new SqlParameter() { Value = user.FAX, ParameterName = "@FAX" });
        cmd.Parameters.Add(new SqlParameter() { Value = user.EMAIL, ParameterName = "@EMAIL" });
        cmd.Parameters.Add(new SqlParameter() { Value = user.WEBSITE, ParameterName = "@WEBSITE" });
        cmd.Parameters.Add(new SqlParameter() { Value = user.ACCCODE, ParameterName = "@ACCCODE" });

        cmd.Parameters.Add(new SqlParameter() { Value = user.AMOUNT, ParameterName = "@AMOUNT" });
        cmd.Parameters.Add(new SqlParameter() { Value = user.PAIDAMOUNT, ParameterName = "@PAIDAMOUNT" });
        cmd.Parameters.Add(new SqlParameter() { Value = user.EMIRATE, ParameterName = "@EMIRATE" });
        cmd.Parameters.Add(new SqlParameter() { Value = user.MILIT_NO, ParameterName = "@MILIT_NO" });
        cmd.Parameters.Add(new SqlParameter() { Value = user.GRADE, ParameterName = "@GRADE" });

        //need job

        cmd.Parameters.Add(new SqlParameter() { Value = user.NEEDJOB, ParameterName = "@NEEDJOB" });
        cmd.Parameters.Add(new SqlParameter() { Value = user.DEBIT, ParameterName = "@DEBIT" });
        cmd.Parameters.Add(new SqlParameter() { Value = user.JOBNAME, ParameterName = "@JOBNAME" });
        cmd.Parameters.Add(new SqlParameter() { Value = user.BNKNAME, ParameterName = "@BNKNAME" });
        cmd.Parameters.Add(new SqlParameter() { Value = (object)user.BNKAMOUNT ?? DBNull.Value, ParameterName = "@BNKAMOUNT" });
        cmd.Parameters.Add(new SqlParameter() { Value = user.COMPAGNY, ParameterName = "@COMPAGNY" });
        cmd.Parameters.Add(new SqlParameter() { Value = (object)user.COMPAMOUNT ?? DBNull.Value, ParameterName = "@COMPAMOUNT" });
        cmd.Parameters.Add(new SqlParameter() { Value = user.PRSN, ParameterName = "@PRSN" });
        cmd.Parameters.Add(new SqlParameter() { Value = (object)user.PRSNAMOUNT ?? DBNull.Value, ParameterName = "@PRSNAMOUNT" });
        if (user.PIC == null)
            cmd.Parameters.Add(new SqlParameter() { Value = DBNull.Value, ParameterName = "@PIC", SqlDbType = System.Data.SqlDbType.Image });
        else
            cmd.Parameters.Add(new SqlParameter() { Value = user.PIC, ParameterName = "@PIC" });
        cmd.Parameters.Add(new SqlParameter() { Value = user.COMPANY, ParameterName = "@COMPANY" });
        cmd.Parameters.Add(new SqlParameter() { Value = user.TYPEBLOOD, ParameterName = "@TYPEBLOOD" });
        cmd.Parameters.Add(new SqlParameter() { Value = user.PASSPORTNUM, ParameterName = "@PASSPORTNUM" });
        cmd.Parameters.Add(new SqlParameter() { Value = user.LEAVENUM, ParameterName = "@LEAVENUM" });
        cmd.Parameters.Add(new SqlParameter() { Value = user.POSBEFORE, ParameterName = "@POSBEFORE" });
 cmd.Parameters.Add(new SqlParameter() { Value = (object)user.LEAVEDATE ?? DBNull.Value, ParameterName = "@LEAVEDATE" });
        cmd.CommandType = System.Data.CommandType.StoredProcedure;
        cmd.CommandText = "SP_MSMEMBERS_UPDATE";
        cmd.Connection = con;
        string constr = ConfigurationManager.ConnectionStrings["ConnectionStrings"].ToString();
        con.ConnectionString = constr;
        con.Open();
        int x = cmd.ExecuteNonQuery();

        con.Close();


该错误通常表示参数多于SP定义的参数

由于您没有提供足够的代码来确切地告诉您(提供更多的cmd代码块和至少SP的定义),因此我假设情况就是这样。特别是提供了这么多的参数


我确实读到过,在处理SqlDatasources时,这也可能是一个潜在的问题。但是,由于您提供的代码有限,我只是指出这是一种可能性。

此错误通常表示参数多于SP定义的参数

由于您没有提供足够的代码来确切地告诉您(提供更多的cmd代码块和至少SP的定义),因此我假设情况就是这样。特别是提供了这么多的参数


我确实读到过,在处理SqlDatasources时,这也可能是一个潜在的问题。然而,由于您提供的代码有限,我只是指出这是一种可能性。

很抱歉,发错了帖子

其次,我运行了c代码,如下所示:

public class MemberD
{
    public SqlCommand cmd = new SqlCommand();
    public SqlConnection con = new SqlConnection("ConStr");
    public SqlDataReader dr;

    public void UpdateMember(string CODE, int COCODE, Member user)
    {
        cmd.Parameters.Clear(); // Here's  the solution

        //Here I added my SQL parameters 
        cmd.CommandType = System.Data.CommandType.StoredProcedure;
        cmd.CommandText = "SP_MSMEMBERS_UPDATE";
        cmd.Connection = con;
        con.Open();
        cmd.ExecuteNonQuery();

        con.Close();
    }
}
关键是,im使用SqlCommand作为全局变量启动了一次 因此,当我两次使用Update方法或GetByID方法时,SQLCommand变量也会保留旧参数。因此,当您传递的参数超过SP所需时,会出现上述错误,因此我简单地添加了: cmd.Parameters.Clear() 在每个方法的开头


现在工作正常。

很抱歉发错了帖子

其次,我运行了c代码,如下所示:

public class MemberD
{
    public SqlCommand cmd = new SqlCommand();
    public SqlConnection con = new SqlConnection("ConStr");
    public SqlDataReader dr;

    public void UpdateMember(string CODE, int COCODE, Member user)
    {
        cmd.Parameters.Clear(); // Here's  the solution

        //Here I added my SQL parameters 
        cmd.CommandType = System.Data.CommandType.StoredProcedure;
        cmd.CommandText = "SP_MSMEMBERS_UPDATE";
        cmd.Connection = con;
        con.Open();
        cmd.ExecuteNonQuery();

        con.Close();
    }
}
关键是,im使用SqlCommand作为全局变量启动了一次 因此,当我两次使用Update方法或GetByID方法时,SQLCommand变量也会保留旧参数。因此,当您传递的参数超过SP所需时,会出现上述错误,因此我简单地添加了: cmd.Parameters.Clear() 在每个方法的开头



现在它工作正常。

您可以包括存储过程吗?错误意味着您在c#code中指定的参数比存储过程中指定的参数多acceptsCheck,以查看存储过程中的参数数是否与您在c#code中指定的参数数相同Hi,我只是在参数下面添加了SP。我想我曾经得到过这样的结果,因为SP中参数的数据类型与表列的数据类型不匹配(或者输入数据…已经有一段时间了)。。。。只需将其抛出即可包含存储过程吗?该错误意味着您在c#代码中指定的参数多于存储过程acceptsCheck,以查看存储过程中的参数数是否与在c#codehi中指定的参数数相同,我只是在参数下面添加了SP。我想我曾经得到过这样的结果,因为SP中参数的数据类型与表列的数据类型不匹配(或者输入数据…已经有一段时间了)。。。。把它扔出去嗨,这是相同的数字,我是指SP和APP中的参数。但是,我在后端cmd.CommandType=System.Data.CommandType.StoredProcess中使用此代码;cmd.CommandText=“SP_MSMEMBERS_UPDATE”;cmd.Connection=con;string constr=ConfigurationManager.ConnectionString[“ConnectionString”].ToString();con.ConnectionString=cont;con.Open();int x=cmd.ExecuteNonQuery();问题可能在于if-else语句是否正确,请编辑您的代码并在if-and-else语句周围使用括号,这样我们就可以确切地知道if-else的结束位置。如果else是ok的,因为我使用的代码与Add方法相同。。。不管怎样,我已经添加了带有上述问题的c代码Hi,我指的是SP和APP中的参数。但是,我在后端cmd.CommandType=System.Data.CommandType.StoredProcess中使用此代码;cmd.CommandText=“SP_MSMEMBERS_UPDATE”;cmd.Connection=con;string constr=ConfigurationManager.ConnectionString[“ConnectionString”].ToString();con.ConnectionString=cont;con.Open();int x=cmd.ExecuteNonQuery();问题可能在于if-else语句是否正确,请编辑您的代码并在if-and-else语句周围使用括号,这样我们就可以确切地知道if-else的结束位置。如果else是ok的,因为我使用的代码与Add方法相同。。。不管怎样,我已经在上面的问题中添加了c代码,你帮了我很多,我犯了同样的错误。非常感谢。老兄,你帮了我很多,我也犯了同样的错误。非常感谢。