5

嗨,我尝试将数据插入数据库,使用类文件。我有两个类,其中一个是 Material.cs 和 DataAccessLayer.cs。但是执行我的代码时出现错误,例如Procedure or function sp_insert_componet has too many arguments specified.""

//来自 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();
    }
}
4

5 回答 5

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);

在存储过程中有对应的参数。删除过程中未定义的任何参数

于 2012-06-05T04:48:20.237 回答
5

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

参数类型必须与表中相同

于 2012-12-19T23:33:09.787 回答
2

如果使用不同的数据库环境,请检查您的数据库连接。

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

于 2018-10-11T11:21:46.387 回答
1

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

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

于 2012-06-05T04:48:47.967 回答
0

不,即使参数完全相同,您也会收到此错误,对于 SQL Server 上的存储过程中的 SQL INSERT。

事实证明,您还必须在存储过程中为要插入新记录的表的 PRIMARY KEY 定义一个参数。在我的情况下,@CompanyID 没有作为参数传递,但没有定义它,就会发生“参数过多”错误。如果有帮助的话,CompanyID 字段的“身份”设置为“true”,它会随着每条新记录而增加。

更改程序 [dbo].[FormViewCompanies_Insert](

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

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

于 2020-06-06T11:28:39.327 回答