过程或函数有太多参数指定#2

时间:2012-06-05 04:46:09

标签: c#

您好我已尝试将数据插入数据库,使用类文件..我有两个类,其中一个是Material.cs,另一个是DataAccessLayer.cs。但执行我的代码时出现错误,如过程或函数sp_insert_componet指定了太多参数。“”

//来自Material.cs

private string strCREATEDBY;
private string strCREATEDDATE;
private string strUPDATEDBY;
private string strUPDATEDDATE;
private string strSTATUS;

public string Createdby
{
    get
    {
        return strCREATEDBY;
    }
    set
    {
        strCREATEDBY = value;
    }
}
public string Createddate
{
    get
    {
        return strCREATEDDATE;
    }
    set
    {
        strCREATEDDATE = value;
    }
}
public string Updateddate
{
    get
    {
        return strUPDATEDDATE;
    }
    set
    {
        strUPDATEDDATE = value;
    }
}
public string Updatedby
{
    get
    {
        return strUPDATEDBY;
    }
    set
    {
        strUPDATEDBY = value;
    }
}
public string Status
{
    get
    {
        return strSTATUS;
    }
    set
    {
        strSTATUS = value;
    }
}

//Maingroup
//created by : ramya
//created date:15.2.2012
private string strIDENTIFY;
private string strNO;
private string strNAME;
private string strMAINIDENTIFICATION;


public string Identification
{
    get
    {
        return strIDENTIFY;
    }
    set
    {
        strIDENTIFY = value;
    }
}
public string NO
{
    get
    {
        return strNO;
    }
    set
    {
        strNO = value;
    }
}
public string NAME
{
    get
    {
        return strNAME;
    }
    set
    {
        strNAME = value;
    }
}
public string Mainidentify
{
    get
    {
        return strMAINIDENTIFICATION;
    }
    set
    {
        strMAINIDENTIFICATION = value;
    }
}
private string strItemtype;
public string Itemtype
{
    get
    {
        return strItemtype;
    }
    set
    {
        strItemtype = value;
    }
}
private string strSitename;
public string Sitename
{
    get
    {
        return strSitename;
    }
    set
    {
        strSitename = value;
    }
}

public int Savecomponent()
{
    objDL.Addparam("@Createdby", Createdby);
    objDL.Addparam("@Createddate", Createddate);
    objDL.Addparam("@Sitecode", NO);
    objDL.Addparam("@Itemtype", Itemtype);
    objDL.Addparam("@Status", Status);
    objDL.Addparam("@Maingroupsno", Mainidentify);
    objDL.Addparam("@Subgroupsno", Identification);
    objDL.Addparam("@Componetcode",NAME);
    objDL.Addparam("@Sitename", Sitename);
    int save = objDL.insert("sp_insert_componet");
    if (save > 0)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

//来自DataAccessLayer.cs

public int insert(string strInsert)
{
    try
    {
        Con.Open();
        cmd.Connection = Con;
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.CommandText = strInsert;
        int RetInsert = cmd.ExecuteNonQuery();
        return RetInsert;
    }
    catch (Exception ex)
    {
        throw ex;
    }
    //got error in this finally block

    finally
    {
        Con.Close();
    }
}

5 个答案:

答案 0 :(得分:6)

您正在指定存储过程不期望的参数。 删除任何未由存储过程定义的参数

确保块中的每个参数

objDL.Addparam("@Createdby", Createdby);
objDL.Addparam("@Createddate", Createddate);
objDL.Addparam("@Sitecode", NO);
objDL.Addparam("@Itemtype", Itemtype);
objDL.Addparam("@Status", Status);
objDL.Addparam("@Maingroupsno", Mainidentify);
objDL.Addparam("@Subgroupsno", Identification);
objDL.Addparam("@Componetcode",NAME);
objDL.Addparam("@Sitename", Sitename);

在存储过程中有相应的参数。删除过程

中未定义的任何参数

答案 1 :(得分:5)

如果参数数量相同,则尝试检查其类型。

  

参数类型必须与表格中的相同

答案 2 :(得分:1)

问题是您的存储过程sp_insert_componet中定义的输入参数较少。

将C#代码中的参数数量与存储过程中的参数数量进行比较。

答案 3 :(得分:1)

如果使用其他数据库环境,请检查数据库连接。

我遇到了这个问题,因为我的配置文件指向了错误的数据库,该数据库具有相同的SP和不同的参数。

答案 4 :(得分:0)

否,即使参数完全相同,在SQL Server上存储过程中使用SQL INSERT的情况下,也会出现此错误。

原来,您还必须在存储过程中为要在其中插入新记录的表的PRIMARY KEY定义一个参数。在我的情况下,@ CompanyID没有作为参数传递,但是没有定义它,就会发生“参数过多”错误。如果有帮助,CompanyID字段的“ identity”设置为“ true”,则每条新记录都会增加它。

ALTER PROCEDURE [dbo]。[FormViewCompanies_Insert](

@CompanyID AS INT。 / *不作为参数传递* /

@MemberID AS INT,/ *作为参数 /传递 @ChapterID AS INT,/ 作为参数传递* / ...