有人可以建議我如何通過vb.net在oracle中調用存儲函數。通過vb.net調用存儲函數而不知道參數名稱
從vb.net我應該能夠將值傳遞給該函數的參數而不知道參數名稱?
例子:我有一個函數, 創建或Repalce功能FUNC_NAME(參數1 VARCHAR2,參數2 VARCHAR2)
中序調用通過vb.net這個功能,我們需要給
parameterargs.paramtername = 「參數1」
反正是有這樣我可以不使用參數名稱和調用函數
在此先感謝 Rupesh
有人可以建議我如何通過vb.net在oracle中調用存儲函數。通過vb.net調用存儲函數而不知道參數名稱
從vb.net我應該能夠將值傳遞給該函數的參數而不知道參數名稱?
例子:我有一個函數, 創建或Repalce功能FUNC_NAME(參數1 VARCHAR2,參數2 VARCHAR2)
中序調用通過vb.net這個功能,我們需要給
parameterargs.paramtername = 「參數1」
反正是有這樣我可以不使用參數名稱和調用函數
在此先感謝 Rupesh
,我們處理它是通過一個OleDbConnection打開Oracle數據庫了道路,然後調用GetOleDbSchemaTable要求的Procedure_Columns。
例如:
DataTable dtTable;
dtData = this.Connection.GetOleDbSchemaTable(OleDbSchemaGuid.Procedure_Columns, new object[] {null, null, sName, null});
foreach (DataRow theRow in dtData.Rows)
{
// Columns available in the row include:
// column_name, data_type, type_name, precision, and scale
}
然後,如果你需要在沒有有效參數來執行它(例如,把它暴露的列),你可以使用DbNull.Value每個參數執行它。另外,我不記得Oracle是如何操作的,但是在SQL Server中,當執行函數時(即select * from dbo.fn_my_test()),需要包含名稱空間。另外,根據函數的結構,您可能需要從中選擇而不是執行它。
我不確定您是否可以在Oracle中使用命名參數。
當您創建參數化查詢,請嘗試使用問號作爲佔位符:
Select col1, col2 From tablename Where col1 = ? and col2 = ?
然後,務必將參數添加到命令對象以正確的順序。
您不需要知道調用它的參數名稱。 您需要知道它們的數量和類型 將參數名稱添加到呼叫中意味着您不必傳遞所有這些參數,並且/或者您可以以不同的順序將它們傳遞給SP的簽名。
稱之爲參數化查詢。
僞
int customer_ID = 786;
Command.CommandText = 'Exec SP_MYProc @MyVar';
Command.Parameters.Add(new Parameter('MyVar',DbType.Int,customer_ID));
Command.Exec
感謝託尼,但我有一個存儲的功能,而不是一個過程...是否有任何區別。它給我一個錯誤,如「函數名稱不是一個過程或未定義」 – Rupesh
現在是同一種技巧是不是。選擇myfunc(myvalue) –