0

Oracle から .net アプリケーションにデータを取得するために、最新の Oracle.ManagedDataAccess.Client 11.2 .dll を使用しています。ストアド プロシージャが期待するのと同じ順序でパラメータを渡す必要がありますか?

アプリケーション側から、コマンド オブジェクト cmd にパラメータ順序を追加します。

KK_C
KK_C2
KK_C1

のようなストアドプロシージャ

KK_C
KK_C1
KK_C2

これは汎用コードであり、ストアド プロシージャが期待する順序と同じ順序でパラメーターを渡すことができません。異なるストアド プロシージャは、異なるパラメーターの順序を想定しているため

私の方法:

Public Function GetDataTable(ByRef xmlParams As XmlNodeList) As DataTable
{
     Dim param As OracleParameter

     Dim params As List(Of OracleParameter) = New List(Of OracleParameter)()

     For Each node As XmlNode In xmlParams

param = New OracleParameter()

param.ParameterName = Convert.ToString(node.SelectSingleNode("name").InnerText)

param.OracleDbType = CType("112", OracleDbType)

 param.Value =Convert.ToString(node.SelectSingleNode("name").InnerText)


   Next

 Dim addparam As OracleParameter
            Dim cmd As OracleCommand
            Dim objdt As DataTable
            OpenConnection()
            cmd = New OracleCommand()           
            cmd.Connection = _oracleConn            
            cmd.CommandText = sql           
            cmd.CommandType = CommandType.StoredProcedure           

            If Not params Is Nothing Then
                For Each param As OracleParameter In params             
                    addparam = New OracleParameter()

                    With addparam                   
                        .Direction = param.Direction
                        .OracleDbType = param.OracleDbType 
                        If Left(param.ParameterName, 2) <> "KK_" Then
                            .ParameterName = "KK_" & param.ParameterName
                        Else
                            .ParameterName = param.ParameterName
                        End If
                        .Size = param.Size
                        .Value = param.Value
                    End With
                    cmd.Parameters.Add(addparam)

                Next
            End If

            addparam = New OracleParameter("OO_remcursor", OracleDbType.RefCursor)
            addparam.Direction = ParameterDirection.Output
            cmd.Parameters.Add(addparam)

            'fill the datatable
            objdt = New DataTable(tblname)

            Using objda As New OracleDataAdapter(cmd)

                objda.Fill(objdt)

            End Using
            Return objdt
}

ストアド プロシージャ:

PROCEDURE GetDATA(KK_C IN NUMBER,KK_C1 IN NUMBER, KK_C2 IN NUMBER OO_remCursor OUT o_Cursor)
    AS
    BEGIN
        OPEN o_remCursor FOR
        SELECT ....        ORDER BY LOWER(brand_alias);

    END GetDATA;
4

1 に答える 1