Я видел, что некоторые другие столкнулись с подобной проблемой. Я прочитал и проверил вопрос под названием Procedure expects parameter which was not supplied. Я думал, что это будет решить мою проблему, но я был неправ :(Я сделал проверить шаги, которые советовали там не повезло Вот мой код:.Процедура ожидает параметр, хотя параметр предоставлен
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“ожидает пар ameter '@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() + "')";
Хотя я не люблю этот тип кодирования, но это работает.
Ну одна вещь, которая прыгает в глаза: вы определяете параметры как тип 'OleDbType.VarChar' - но вы не определяет каких-либо ** длина ** Это означает, что эти параметры будут be ** 1 символ long ** - возможно ** не **, что вы хотели ..... вам нужно указать ** желаемую длину ** следующим образом: 'oOleDbCommand.Parameters.Add (" @ SerialNo ", OleDbType .VarChar, 50) .Value = ..... ' –
Итак, я предполагаю, что вы уже пытались добавить' oOleDbCommand.CommandType = CommandType.StoredProcedure; ', правильно? –
@ Энрико, да. @ marc_s, я тоже это пробовал, но никаких изменений :( –