2012-02-23 82 views
2

我看到其他一些人也遇到了類似的問題。我已閱讀並檢查了標題爲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.0sSerialNo='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() + "')"; 

雖然我不喜歡這種類型的編碼,但這個工程。

+0

好一件事跳到我的眼睛!你定義的參數類型'OleDbType.VarChar' - 但你沒有定義任何** **長這意味着這些參數會是** 1個字符長** - 可能**不**你想要什麼.....你需要**指定所需的長度**像這樣:'oOleDbCommand.Parameters.Add(「@ SerialNo」,OleDbType .VarChar,50).Value = .....' – 2012-02-23 09:28:46

+0

所以我假設你已經嘗試添加'oOleDbCommand.CommandType = CommandType.StoredProcedure;',是否正確? – 2012-02-23 09:34:31

+0

@ Enrico,是的。 @ marc_s,我也試過,但沒有變化:( – 2012-02-23 10:14:36

回答

3

嘗試增加:

oOleDbCommand.CommandType = CommandType.StoredProcedure; 

我相信如果沒有這個,您的參數值都應該被添加內嵌(如內聯SQL語句)。 E.g:

oOleDbCommand.CommandText = "usp_PettyCash_AddBillInfo @BillID, @SerialNo..."; 

所以你將你的參數命令,但他們不是在CommandText,所以他們沒有在任何地方使用。

要調用存儲過程,命令對象 的的CommandType設置爲StoredProcedure的。一旦CommandType設置爲StoredProcedure, 您可以使用Parameters集合來定義參數,如以下示例中的 。

http://msdn.microsoft.com/en-us/library/yy6y35y8(v=vs.71).aspx

+0

你不相信它,我重新啓動我的電腦,希望有些幼稚的運氣,在此之後,所有工作:)我猜可能有一些情況與SQL服務器緩存我不知道它,我只是猜測) – 2012-02-23 10:33:01

相關問題