在過去的幾個小時裏,我試圖通過一個Oracle數據庫中的最簡單的東西(至少對於SQL SERVER)使用ADO.NET的.NET應用程序。這似乎不可能。從Oracle Sql查詢中返回一個sql變量的值返回到.NET代碼
對於SQL Server,我會做這個簡單的任務,假設我有一個SqlCommand對象
comm.CommandText = @"
DECLARE @next_id INT
SET @next_id = (SELECT ISNULL(MAX(id_col),0) FROM TABLE_1) + 1
INSERT INTO TABLE_1 (id_col, col1, ...) VALUES (@next_id, val1, ...)
SELECT @next_id";
int id = Convert.ToInt32(comm.ExecuteScalar());
這將插入一個新的記錄表TABLE_1,我會拿回來的新標識中的「ID」變量在C#代碼。
四個簡單的步驟
- 聲明是一個變量
- 設置爲下一個可用的ID
- 新變量
- 返回變量的值插入記錄
好我設法在Oracle查詢中聲明變量。我想(我想)我設法給它一個值(與選擇進入)
我怎樣才能得到這個變量的價值回來在C#?我如何將變量的值選擇到Oracle SQL中的輸出流?
我知道有更好的方法來獲取標識列,但這不是問題。這可能是一個完全不同的例子。問題很簡單。:我已經在一個oracle sql腳本中聲明瞭一個變量,該腳本將在.net應用程序中執行。 如何從oracle查詢中將變量的值返回給c#?以上代碼與Oracle ADO.NET查詢等效的是什麼?
嗯,其實這並沒有回答這個問題,即使這是有幫助的。問題是如何讓c#代碼在sql腳本中聲明和初始化的變量(不是參數)的值。 但我想問你, 1)你提供的解決方案是否改變了DB的模式? 2)插入語句是否總是在返回參數中輸出ID? 3)如何在腳本中使用兩個INSERT?哪個人的身份證被退回? –
另外,表沒有自動增量策略(序列或任何它)是什麼?在這種情況下你會如何返回ID? (前提是一切都在事務的上下文中執行) –
@Saysmaster請參閱我上面對綁定值數組(並獲取返回值數組)的編輯。至於id值,你可能需要在insert語句中提供ID值,或者你會讓Oracle產生它(通過觸發器/ seq方法),並返回給你。 – tbone