Возврат в Oracle INSERT не возвращает правильное значение - PullRequest
0 голосов
/ 15 марта 2012

У меня есть веб-приложение ASP.NET (VB.NET), использующее базу данных Oracle. На вставке мне нужно получить идентичность вставленной строки обратно. Я пытаюсь использовать RETURNING, но получаю возвращаемое значение 1.

Dim strInsert As String = "INSERT INTO L.TRANSACTIONS (LOCATION_KEY, TRANS_CREATOR, TRANS_EMAIL, TRANS_PHONE) VALUES (:location_key, :trans_creator, :trans_email, :trans_phone) RETURNING TRANS_ID INTO :ukey"

Try
    If oConn.State <> ConnectionState.Open Then
        oConn.Open()
    End If

    Dim oCmnd As New OracleCommand(strInsert, oConn)
    oCmnd.Parameters.Add("location_key", Session.Item("location").ToString.Trim())
    oCmnd.Parameters.Add("trans_creator", Session.Item("userID").ToString.Trim())
    oCmnd.Parameters.Add("trans_email", Session.Item("mail").ToString.Trim())
    oCmnd.Parameters.Add("trans_phone", Session.Item("phone").ToString.Trim())
    oCmnd.Parameters.Add("ukey", Oracle.DataAccess.Client.OracleDbType.Varchar2, System.Data.ParameterDirection.ReturnValue)

    Dim strUkey As String = oCmnd.ExecuteNonQuery()

Когда я запускаю приложение, запись вставляется, и TRANS_ID увеличивается, но возвращаемое значение всегда равно "1".

Ответы [ 2 ]

2 голосов
/ 16 марта 2012

Вы присваиваете переменную ExecuteNonQuery, а не получаете значение, присвоенное созданному вами параметру. Я считаю, что вы хотите изменить последнюю строку на что-то вроде этого (не проверено):

oCmnd.ExecuteNonQuery
Dim strUkey As String = oCmnd.Parameters.GetParameter("ukey").Value
2 голосов
/ 16 марта 2012

Это потому, что ExecuteNonQuery вернет количество затронутых строк:

Для операторов UPDATE, INSERT и DELETE возвращаемое значение - это количество строк, затронутых командой.Для операторов CREATE TABLE и DROP TABLE возвращаемое значение равно 0. Для всех других типов операторов возвращаемое значение равно -1.

Вы можете видеть, что существует еще один вопрос, который охватывает методы выполненияit:

Лучшие практики: .NET: Как вернуть PK для базы данных Oracle?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...