2011-12-13 60 views
0

有人可以建議我如何通過vb.net在oracle中調用存儲函數通過vb.net調用存儲函數而不知道參數名稱

從vb.net我應該能夠將值傳遞給該函數的參數而不知道參數名稱?

例子:我有一個函數, 創建或Repalce功能FUNC_NAME(參數1 VARCHAR2,參數2 VARCHAR2)

中序調用通過vb.net這個功能,我們需要給

parameterargs.paramtername = 「參數1」

反正是有這樣我可以不使用參數名稱和調用函數

在此先感謝 Rupesh

回答

0

,我們處理它是通過一個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()),需要包含名稱空間。另外,根據函數的結構,您可能需要從中選擇而不是執行它。

0

我不確定您是否可以在Oracle中使用命名參數。

當您創建參數化查詢,請嘗試使用問號作爲佔位符:

Select col1, col2 From tablename Where col1 = ? and col2 = ? 

然後,務必將參數添加到命令對象以正確的順序。

0

您不需要知道調用它的參數名稱。 您需要知道它們的數量和類型 將參數名稱添加到呼叫中意味着您不必傳遞所有這些參數,並且/或者您可以以不同的順序將它們傳遞給SP的簽名。

稱之爲參數化查詢。

int customer_ID = 786; 
Command.CommandText = 'Exec SP_MYProc @MyVar'; 
Command.Parameters.Add(new Parameter('MyVar',DbType.Int,customer_ID)); 
Command.Exec 
+0

感謝託尼,但我有一個存儲的功能,而不是一個過程...是否有任何區別。它給我一個錯誤,如「函數名稱不是一個過程或未定義」 – Rupesh

+0

現在是同一種技巧是不是。選擇myfunc(myvalue) –

相關問題