2012-05-04 36 views
0

我是與Oracle在.NET上合作的新手。我過去曾經使用過SQL,並沒有遇到過這個問題。 我有我與此連接字符串連接Oracle服務器:Oracle命令不返回想要的結果

<add key="Test" value="Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=xxxx)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=xxx))); User Id=xxxxxxx;Password=xxxxxx;"/> 

    private OracleConnection Testconnection = new OracleConnection((string)new System.Configuration.AppSettingsReader().GetValue("Test", typeof(string))); 

於是,我打開連接,請檢查它是否被打開(這是),並嘗試做以下Oracle命令。

var accountOpenDate = new OracleCommand("select creationDate from tbl_user where id=:userid", this.Testconnection); 
     getIsbAaccountOpenDate.Parameters.Add(":userid", this.IsbUserId); 
     string isbAccountOpenDate = getIsbAaccountOpenDate.ExecuteNonQuery().ToString(); 

Oracle的命令是正確的,當我在SQL Developer中執行它它的工作原理,但是當我執行代碼的isbAccountOpenDate值爲-1。 我已經嘗試了一切,所以不知道該做什麼。

在此先感謝

回答

0

儘管您必須使用冒號來標識SQL腳本中的參數,但它不是參數名稱的一部分。此外,返回標量值數據庫的正確方法是ExecuteScalar。這樣就能夠解決您的問題:

var stm = "SELECT creationDate FROM tbl_user WHERE id=:userid;"; 
var cmd = new OracleCommand(stm, this.Testconnection); 
cmd.Parameters.Add("userid", this.IsbUserId); 
var result = (string) cmd.ExecuteScalar(); 

你可以在MSDN有關System.Data.OracleClient完整參考:OracleParameterCollection,,OracleCommand.ExecuteNonQuery

+0

對不起,那不是。我甚至試圖在語句中添加ISBuserid的值,並且我仍然得到相同的結果 – schumitza

+0

@APC是正確的,ExecuteNonQuery方法執行該命令並返回受影響的行數;如果語句不是「INSERT」,「UPDATE」或「DELETE」,它總是返回「-1」。你應該使用'ExecuteScalar'方法(我已經更新了我提出的解決方案)。我擔心參數傳遞,我沒有注意到使用了錯誤的方法。 –

+0

非常感謝,我陷入了同樣的重複邏輯,無法打破它。 – schumitza

1

我不是ODP專家,但我認爲這是你的問題: 是

getIsbAaccountOpenDate.Parameters.Add(":userid", this.IsbUserId); 
.         ^

冒號在SQL語句中使用idenify綁定變量,所以SQL編譯器知道不在其範圍內尋找名爲USERID的東西。但它不是名稱的一部分。如果您從參數分配中刪除冒號,您的代碼應該可以工作。或者至少不能因爲其他某些原因:)


順便說一句,你是發出一個SELECT語句,那麼你爲什麼要起訴executeNonQuery()?那應該不是executeScalar()? (對於返回多條記錄的查詢,應爲executeReader())。

+0

@Gerardo利馬,APC感謝您的答案,但這並不能解決我的問題。只是調試了「:」的代碼,結果仍然相同。 – schumitza

+0

對於OracleCommand或任何其他命令,沒有'ExecuteQuery'方法。這是「對連接對象執行sql語句」 – schumitza

+2

就像我說的,我不是專家,但我仍然認爲select語句的executeNonQuery()是錯誤的。 – APC

相關問題