即使提供了参数,过程也需要参数
本文关键字:参数 过程 | 更新日期: 2023-09-27 18:25:28
我看到其他一些人也面临类似的问题。我已经阅读并检查了标题为"过程期望参数"的问题,但没有提供。我以为它会解决我的问题,但我错了:(我确实检查了那里建议的步骤,但运气不好。这是我的代码:
oOleDbCommand.CommandText = "usp_PettyCash_AddBillInfo";
oOleDbCommand.Parameters.Add("@BillID", OleDbType.BigInt).Value = nBillID;
oOleDbCommand.Parameters.Add("@SerialNo", OleDbType.VarChar).Value = sSerialNo;
oOleDbCommand.Parameters.Add("@UniqueID", OleDbType.VarChar).Value = oInputBill[0].UniqueID.ToString();
oOleDbCommand.Parameters.Add("@BilledWeekDate", OleDbType.Date).Value = oInputBill[0].BilledWeekDate;
oOleDbCommand.Parameters.Add("@BilledWeekNo", OleDbType.VarChar).Value = oInputBill[0].BilledWeekNo.ToString();
oOleDbCommand.Parameters.Add("@SettledWeekDate", OleDbType.Date).Value = oInputBill[0].SettledWeekDate;
oOleDbCommand.Parameters.Add("@SettledWeekNo", OleDbType.VarChar).Value = oInputBill[0].SettledWeekNo;
oOleDbCommand.Parameters.Add("@BillStatus", OleDbType.VarChar).Value = oInputBill[0].BillStatus.ToString();
oOleDbCommand.Parameters.Add("@UpdatedBy", OleDbType.VarChar).Value = oInputBill[0].UpdatedBy;
oOleDbCommand.Parameters.Add("@UpdateDate", OleDbType.Date).Value = oInputBill[0].UpdateDate;
存储过程是:
CREATE PROCEDURE usp_PettyCash_AddBillInfo
(
@BillID bigint,
@SerialNo varchar(50),
@UniqueID varchar(50),
@BilledWeekDate datetime,
@BilledWeekNo varchar(50),
@SettledWeekDate datetime,
@SettledWeekNo varchar(50),
@BillStatus varchar(50),
@UpdatedBy varchar(50),
@UpdateDate datetime
)
AS
BEGIN
INSERT INTO t_BillInfo (BillID, SerialNo, UniqueID, BilledWeekDate, BilledWeekNo, SettledWeekDate, SettledWeekNo, BillStatus, UpdatedBy, UpdateDate)
VALUES (@BillID, @SerialNo, @UniqueID, @BilledWeekDate, @BilledWeekNo, @SettledWeekDate, @SettledWeekNo, @BillStatus, @UpdatedBy, @UpdateDate)
END
GO
调试时,我发现了nBillID = 1.0
和sSerialNo='B201200001'
的值。但当尝试执行ExecuteNonQuery
命令时,它会给出异常:
"过程'usp_PettyCash_AddBillInfo'需要参数'@BillID',没有提供。"
我找不到任何解决办法。请帮忙。很抱歉再次提出这个问题。
作为一种变通方法,我使用了这个:
oOleDbCommand.CommandText = "INSERT INTO t_BillInfo (BillID, SerialNo, UniqueID, BilledWeekDate, BilledWeekNo, SettledWeekDate, SettledWeekNo, BillStatus, UpdatedBy, UpdateDate)"+
" VALUES (" + nBillID + ", '" + sSerialNo + "', '" + oInputBill[0].UniqueID.ToString() + "','" + oInputBill[0].BilledWeekDate.ToShortDateString() + "', '" + oInputBill[0].BilledWeekNo + "', '" + oInputBill[0].SettledWeekDate.ToShortDateString() + "', '" + oInputBill[0].SettledWeekNo + "', '" + oInputBill[0].BillStatus.ToString() + "', '" + oInputBill[0].UpdatedBy + "', '" + oInputBill[0].UpdateDate.ToShortDateString() + "')";
虽然我不喜欢这种类型的编码,但这是有效的。
尝试添加:
oOleDbCommand.CommandType = CommandType.StoredProcedure;
我相信,如果没有这一点,您的参数值应该是内联添加的(就像内联SQL语句一样)。例如:
oOleDbCommand.CommandText = "usp_PettyCash_AddBillInfo @BillID, @SerialNo...";
因此,您将参数添加到命令中,但它们不在CommandText中,因此它们不会应用于任何地方。
要调用存储过程,请设置Command对象的CommandType存储过程。一旦CommandType被设置为StoredProcedure,可以使用"参数"集合定义参数,如以下示例。
http://msdn.microsoft.com/en-us/library/yy6y35y8(v=vs.71).aspx