过程或函数指定了太多参数 #2
本文关键字:太多 参数 函数 过程 | 更新日期: 2023-09-27 18:36:20
嗨,我尝试将数据插入数据库,利用类文件。我有两个类,一个是Material.cs和DataAccessLayer.cs。但是执行我的代码时,我遇到了错误,例如过程或函数sp_insert_componet指定了太多参数。
//从材料.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();
}
}
您正在指定存储过程不期望的参数。删除存储过程未定义的任何参数
确保块中的每个参数
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);
在存储过程中具有相应的参数。删除过程中未定义的任何参数
如果参数数量相同,则尝试检查其类型。
参数类型必须与表中的参数相同
如果使用不同的数据库环境,请检查您的数据库连接。
我遇到了这个问题,因为我的配置文件指向错误的数据库,该数据库具有具有不同参数的相同SP。
问题是您在
存储过程sp_insert_componet
中定义的输入参数较少。
将 C# 代码中的参数数与存储过程中的参数数进行比较。
不,即使参数完全相同,在 SQL Server 上的存储过程中使用 SQL 插入,您也会收到此错误。
事实证明,您还必须在存储过程中为要在其中插入新记录的表的主键定义一个参数。 就我而言,@CompanyID没有作为参数传递,但没有定义它,就会发生"参数过多"错误。 如果它有助于了解公司 ID 字段的"身份"设置为"true",则它会随着每条新记录而递增。
更改程序 [DBO]。[FormViewCompanies_Insert](
@CompanyID 作为整数/* 不作为参数传递 */
@MemberID 作为 INT,/* 作为参数传递 /@ChapterID 作为 INT,/作为参数传递 */...