ввод и вывод параметров oracle в vb.net приводит к нулевым ошибкам

#oracle #parameters #null #out

#Oracle #параметры #null #выход

Вопрос:

итак, этот код работает только с параметром out, но затем, когда вы добавляете параметры, начинают появляться странные нули, а также прямые входные параметры, так что это происходит только тогда, когда есть как входные, так и выходные параметры.

часть с проблемами заключается в том, что входные и выходные параметры не хотят сосуществовать

             cmd.Parameters.Add("PKEY", OracleDbType.Int64, ParameterDirection.Output)
            For Each kvp As KeyValuePair(Of String, String) In sqlParams
                Dim newParam As New OracleParameter(kvp.Key, OracleDbType.Varchar2, kvp.Value, Data.ParameterDirection.Output)
                newParam.Size = 400
                cmd.Parameters.Add(newParam)
            Next
 

Это работает

 Public Shared Sub Run_Oracle_Query(ByVal queryToRun As String, ByVal sqlParams As Dictionary(Of String, String))
        Dim dbConnString As String = System.Configuration.ConfigurationManager.ConnectionStrings("ITSS").ConnectionString
        Dim con As OracleConnection = New OracleConnection(dbConnString)
        Dim cmd = con.CreateCommand()
        Try
            con.Open()
            cmd.CommandText = queryToRun
            cmd.CommandType = CommandType.Text
            For Each kvp As KeyValuePair(Of String, String) In sqlParams
                cmd.Parameters.Add(kvp.Key, kvp.Value)

            Next
            cmd.ExecuteNonQuery()
            'log all sql queryies very expensive operation
            LogThisString("Log All queries: " amp; queryToRun, "Always")
        Catch ex As OracleException ' catches only Oracle errors
            OracleExceptionLogging(ex.Number, queryToRun, ex)
        Catch ex As Exception
            LogThisString("General Error SQL: "   ex.Message.ToString(), "Always")
            ' MsgBox("Could Not Perform This Database Operation")
        Finally
            con.Close()
            cmd.Dispose()
            con.Dispose()
        End Try
    End Sub
 

Это работает

     Public Shared Function Run_Insert_Oracle_Query_Return_ID(ByVal queryToRun As String, ByVal IDcolumnName As String) As String
        Dim dbConnString As String = System.Configuration.ConfigurationManager.ConnectionStrings("ITSS").ConnectionString
        Dim con As OracleConnection = New OracleConnection(dbConnString)
        Dim cmd = con.CreateCommand()
        Dim strUkey As String = ""
        Try
            con.Open()
            cmd.CommandText = queryToRun amp; " RETURNING " amp; IDcolumnName amp; " INTO :UKEY"
            cmd.CommandType = CommandType.Text
            cmd.Parameters.Add("PKEY", OracleDbType.Int64, ParameterDirection.Output)
            cmd.ExecuteNonQuery()
            strUkey = cmd.Parameters("PKEY").Value.ToString
            Return strUkey
        Catch ex As OracleException ' catches only Oracle errors
            OracleExceptionLogging(ex.Number, queryToRun, ex)

        Catch ex As Exception
            LogThisString("General Error SQL: "   ex.Message.ToString(), "Always")
            PopupMsgBox("Database Error", "Database Integrity Constants Violated SQL Operation Will Not Be Executed")
        Finally
            con.Close()
            cmd.Dispose()
            con.Dispose()
        End Try

        Return strUkey
    End Function
 

Это не работает

 Public Shared Function Run_Insert_Oracle_Query_Return_ID(ByVal queryToRun As String, ByVal IDcolumnName As String, ByVal sqlParams As Dictionary(Of String, String)) As String

        Dim dbConnString As String = System.Configuration.ConfigurationManager.ConnectionStrings("ITSS").ConnectionString
        Dim con As OracleConnection = New OracleConnection(dbConnString)
        Dim cmd = con.CreateCommand()
        Dim strUkey As String = ""
        Try
            con.Open()
            cmd.CommandText = queryToRun amp; " RETURNING " amp; IDcolumnName amp; " INTO :UKEY"
            cmd.CommandType = CommandType.Text
            cmd.Parameters.Add("PKEY", OracleDbType.Int64, ParameterDirection.Output)
            For Each kvp As KeyValuePair(Of String, String) In sqlParams
                Dim newParam As New OracleParameter(kvp.Key, OracleDbType.Varchar2, kvp.Value, Data.ParameterDirection.Output)
                newParam.Size = 400
                cmd.Parameters.Add(newParam)
            Next
            cmd.ExecuteNonQuery()
            strUkey = cmd.Parameters("PKEY").Value.ToString
            Return strUkey
        Catch ex As OracleException ' catches only Oracle errors
            OracleExceptionLogging(ex.Number, queryToRun, ex)

        Catch ex As Exception
            LogThisString("General Error SQL: "   ex.Message.ToString(), "Always")
            PopupMsgBox("Database Error", "Database Integrity Constants Violated SQL Operation Will Not Be Executed")
        Finally
            con.Close()
            cmd.Dispose()
            con.Dispose()
        End Try

        Return strUkey
    End Function
 

Ответ №1:

дерьмо, поэтому я думаю, что он ищет порядок, так как вывод должен быть в конце, как это ….. это работает, решая мою собственную проблему

         For Each kvp As KeyValuePair(Of String, String) In sqlParams
            Dim newParam As New OracleParameter(kvp.Key, OracleDbType.Varchar2, kvp.Value, Data.ParameterDirection.Input)
            newParam.Size = 400
            cmd.Parameters.Add(newParam)
        Next
cmd.Parameters.Add("PKEY", OracleDbType.Int64, ParameterDirection.Output)