[英]Calling Oracle Stored Procedure from ASP.NET
我正在嘗試通過來自asp.net的存儲過程來更新表。 我收到以下錯誤消息:“調用'UPDATE_DIRECT_BILL_DETL_SP'時參數或類型錯誤”
我似乎無法弄清楚什么地方出了問題。 我相信我的Cmd.Parameter.Add語句中可能沒有使用正確的Oracle變量類型。
我感謝可以提供的任何幫助!
謝謝。
詳細信息如下:
我正在使用Oracle.DataAccess.dll(ODP.NET)
這是我的功能:
Public Function UpdateDirectBill(ByVal invDetID As Int32, ByVal appNum As String, _
ByVal lastUpdtByNm As String) As Int32
Dim numRecUpdated As Int32 = 0
Cmd.CommandType = CommandType.StoredProcedure
Cmd.CommandText = "UPDATE_DIRECT_BILL_DETL_SP"
'These are the values I'm using for the params
invDetID = 1
appNum = "3333"
lastUpdtByNm = "N015058"
Cmd.Parameters.Add("invDetID", OracleDbType.Int32, invDetID, ParameterDirection.Input)
Cmd.Parameters.Add("appNum", OracleDbType.Varchar2, appNum, ParameterDirection.Input)
Cmd.Parameters.Add("lastUpdtByNm", OracleDbType.Varchar2, lastUpdtByNm, ParameterDirection.Input)
Cmd.Parameters.Add("numRecUpdated", OracleDbType.Int32, numRecUpdated, ParameterDirection.Output)
Conn.Open()
Cmd.ExecuteNonQuery()
Conn.Close()
Dim recsUpdated As Int32 = Convert.ToInt32(Me.Cmd.Parameters("numRecUpdated").Value.ToString())
Return recsUpdated
End Function
我的存儲過程:
PROCEDURE UPDATE_DIRECT_BILL_DETL_SP
(invDetID IN invoice_detail.invoice_detail_id%TYPE,
appNum IN invoice_detail.application_num%TYPE,
lastUpdateNm IN invoice_detail.last_update_by_nm%TYPE,
rowCnt OUT number)
IS
BEGIN
UPDATE INVOICE_DETAIL A
SET
A.APPLICATION_NUM=appNum,
A.LAST_UPDATE_BY_NM = lastUpdateNm,
A.LAST_UPDATE_BY_DT=SYSDATE
WHERE A.INVOICE_DETAIL_ID=invDetID;
rowCnt := SQL%ROWCOUNT;
if rowCnt = 1 then
COMMIT;
ELSE
ROLLBACK;
END IF;
END UPDATE_DIRECT_BILL_DETL_SP;
我要更新的列屬於以下類型:
invDetID IN invoice_detail.invoice_detail_id%TYPE of type Number
appNum in invoice_detail.application_num%TYPE of type Varchar2(10 byte)
lastUpdateNm IN invoice_detail.last_update_by_nm%TYPE of type Varchar2(50 byte)
您在proc中定義rowCnt,但在函數中使用numRecUpdated。
嘗試
Cmd.Parameters.Add("rowCnt", OracleDbType.Int32, numRecUpdated, _
ParameterDirection.Output)
和
Dim recsUpdated As Int32 = _
Convert.ToInt32(Me.Cmd.Parameters("rowCnt").Value.ToString())
您的參數名稱與“ rowCnt”和“ numRecUpdated”不匹配。 另外,您在調用中將類型指定為Int,但是存儲的proc將其指定為一個Number,該Number映射為Decimal。 因此,您需要將其指定為OracleDbType.Decimal
類型而不是int。 或將存儲的proc參數更改為INTEGER http://download.oracle.com/docs/cd/B19306_01/win.102/b14307/OracleDbTypeEnumerationType.htm
Cmd.Parameters.Add("rowCnt", OracleDbType.Decimal, numRecUpdated, ParameterDirection.Output)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.