2008-12-11 69 views
4

使用下面的代碼從數據庫中返回一條記錄。我讀過ExecuteScalar是返回單個記錄的正確方法。我從來沒有能夠得到ExecuteScalar工作。我將如何改變這個使用ExecuteScalar在VB.Net中返回單個值?如何使用ExecuteScalar從Oracle數據庫返回單個值?

Dim oracleConnection As New OracleConnection 
    oracleConnection.ConnectionString = LocalConnectionString() 

    Dim cmd As New OracleCommand() 
    Dim o racleDataAdapter As New OracleClient.OracleDataAdapter 

    cmd.Connection = oracleConnection 
    cmd.CommandText = "FALCON.CMS_DATA.GET_MAX_CMS_TH" 
    cmd.CommandType = CommandType.StoredProcedure 

    cmd.Parameters.Add(New OracleParameter("i_FACID_C", OracleType.Char)).Value = facilityShortName 
    cmd.Parameters.Add(New OracleParameter("RS_MAX", OracleType.Cursor)).Direction = ParameterDirection.Output 

    Try 
     Using oracleConnection 
      oracleConnection.Open() 
      Using oracleDataAdapter 
       oracleDataAdapter = New OracleClient.OracleDataAdapter(cmd) 

       Dim workingDataSet As DataSet 
       oracleDataAdapter.TableMappings.Add("OutputSH", "RS_MAX") 
       workingDataSet = New DataSet 
       oracleDataAdapter.Fill(workingDataSet) 


       For Each row As DataRow In workingDataSet.Tables(0).Rows 

        Return CDate(row("MAXDATE")) 

       Next 
      End Using 
     End Using 

回答

3

從微軟

「的的OracleCommand類的ExecuteOracleScalar()方法用於執行返回一個值作爲SQL語句或存儲過程一個OracleType數據類型如果該命令返回一個結果集,則該方法返回第一行第一列的值如果返回REF CURSOR而不是第一列第一列的值,該方法返回一個空引用REF CURSOR指向的行。OracleCommand類的ExecuteScalar()方法與ExecuteOracleScalar()方法相似,只不過它返回值爲.N ET Framework數據類型。

話雖如此,這些方法在使用Oracle存儲過程時都沒有用處。 Oracle存儲過程不能作爲RETURN語句的一部分返回值,只能作爲OUT參數返回 - 請參閱「不返回數據的存儲過程」部分。此外,除了通過REF CURSOR輸出參數外,您不能返回結果集,這將在下一節中討論。

可以使用的ExecuteScalar方法之一隻能使用一個返回參數(上一節中所示)檢索一個Oracle函數的返回值,而不是「。

http://msdn.microsoft.com/en-us/library/ms971506.aspx

2

ExecuteScalar返回單個值(標量)而不是記錄。

0

不知道爲什麼,對方的回答是標記爲接受,因爲它似乎並沒有回答你的問題

我將如何改變這種使用ExecuteScaler

在VB.Net返回一個值

ExecuteScalar將只返回一個單值 - 所以在編寫命令的查詢部分時要記住這一點。 的代碼來完成,這將是如下:

oracleConnection.Open 
Dim obj as object 'Object to hold our return value 
obj = cmd.ExecuteScalar() 
oracleConnection.Close 

If obj IsNot Nothing then 
    Return CDate(obj) 
end if 
相關問題