Как вы используете ExecuteScalar для возврата одного значения из базы данных Oracle? - PullRequest
4 голосов
/ 12 декабря 2008

Использовал код ниже, чтобы вернуть одну запись из базы данных. Я прочитал, что ExecuteScalar - верный способ вернуть одну запись. Я никогда не был в состоянии заставить ExecuteScalar работать, хотя. Как бы изменить это, чтобы возвращать одно значение в VB.Net с помощью ExecuteScalar?

    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 ]

3 голосов
/ 10 февраля 2009

от Microsoft

"Метод ExecuteOracleScalar () класса OracleCommand используется для выполнения оператора SQL или хранимой процедуры, которая возвращает одно значение в качестве типа данных OracleType. Если команда возвращает набор результатов, метод возвращает значение первого столбец первой строки. Метод возвращает нулевую ссылку, если возвращается REF CURSOR, а не значение первого столбца первой строки, на которую указывает REF CURSOR. Метод ExecuteScalar () класса OracleCommand аналогичен Метод ExecuteOracleScalar (), за исключением того, что он возвращает значение в качестве типа данных .NET Framework.

Сказав, что ни один из этих методов не полезен при работе с хранимыми процедурами Oracle. Хранимые процедуры Oracle не могут возвращать значение как часть оператора RETURN, только как параметры OUT - см. Раздел «Хранимые процедуры, которые не возвращают данные». Кроме того, вы не можете вернуть набор результатов, кроме как через выходной параметр REF CURSOR - это обсуждается в следующем разделе.

Вы можете получить возвращаемое значение для функции Oracle только с помощью параметра RETURN (показанного в предыдущем разделе), а не с помощью одного из методов ExecuteScalar. "

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

2 голосов
/ 12 декабря 2008

ExecuteScalar возвращает одно значение (скаляр), а не запись.

0 голосов
/ 16 декабря 2008

не уверен, почему другой ответ помечен как принятый, так как он не отвечает на ваш вопрос

Как бы я изменил это, чтобы вернуть единственное значение в VB.Net, используя ExecuteScaler

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...