1

AS400 データを提供する Web サービスがあります。この Web サービスには、動的にしたい固定接続文字列があります。以下のコードを参照してください。

    Public Function GetData(sql As String) As DataTable

            Dim _data As DataTable

            Try

                Dim s As String = "Provider=IBMDA400"

                s &= ";Data Source=" & "x.x.x.x"
                s &= ";User Id=" & "USER"
                s &= ";Password=" & "PASS"
                s &= ";Default Collection=" & "AAABBB"

                con = New OleDbConnection(s)

                Dim cmd As New OleDbCommand

                With cmd
                    .Connection = con
                    .CommandType = CommandType.Text
                    .CommandText = sql
                End With

                Dim dap As New OleDbDataAdapter(cmd)

                con.Open()

                Dim dat As New DataSet

                dap.Fill(dat)

                con.Close()
                con.Dispose()

                _data = dat.Tables(0)

            Catch ex As Exception

                _data = New DataTable

            End Try

            Return _data

        End Function

上記を使用するサンプル Web サービス関数:

<WebMethod()> _
        Public Function GetPicklistLines(picklist As String) As List(Of PicklistLine)

            Dim lines As New List(Of PicklistLine)
            Dim line As PicklistLine

            sql = "select " & _
                                    "OLPLNO,OLPLLI,OLORNO,OLLINE,OLPRDC,OLDESC,OLOQTS,OLCQTS,OLUNIT,OLORDS,PGDRNR, AAV01, AAV02, NAV03 " & _
                                    "from SRBSOL " & _
                                    "left outer join SRBPRG on PGPRDC=OLPRDC " & _
                                    "left outer join Z2OOCFGF on F0ERNC=OLORNO and F0A2NB=OLLINE " & _
                                    "where OLPLNO=" & picklist & " and OLSTAT <>' D'"

            data = GetData(sql)

            ' TODO: insert ROW 0 to set active:
            sql = "insert " & _
                    "into SRBSOL " & _
                    "(OLPLNO, OLPLLI) " & _
                    "values " & _
                    "(" & picklist & "," & 0 & ") " & _
                    "where OLPLNO=" & picklist & " and OLSTAT <>' D'"

            For Each dr As DataRow In data.Rows

                ' TODO: get reported quantity:
                sql = "select " & _
                        "RCBAQT " & _
                        "from Z2OOREXC " & _
                        "where RCPLNO='" & picklist & "' and RCPLLI='" & dr("OLPLLI") & "'"

                line = New PicklistLine

                With line
                    .PicklistNumber = picklist
                    .OrderNumber = IIf(TypeOf (dr("OLORNO")) Is DBNull, "", dr("OLORNO"))
                    .PicklistLinenumber = IIf(TypeOf (dr("OLPLLI")) Is DBNull, "", dr("OLPLLI"))
                    .Item = IIf(TypeOf (dr("OLPRDC")) Is DBNull, "", dr("OLPRDC"))
                    .ItemDescription = IIf(TypeOf (dr("OLDESC")) Is DBNull, "", dr("OLDESC"))
                    .InnerColor = IIf(TypeOf (dr("AAV01")) Is DBNull, "", dr("AAV01"))
                    .OuterColor = IIf(TypeOf (dr("AAV02")) Is DBNull, "", dr("AAV02"))
                    .Length = IIf(TypeOf (dr("NAV03")) Is DBNull, "", dr("NAV03"))
                    .Unit = IIf(TypeOf (dr("OLUNIT")) Is DBNull, "", dr("OLUNIT"))
                    .Quantity = IIf(TypeOf (dr("OLCQTS")) Is DBNull, "", CInt(dr("OLCQTS")))
                    .Needed = IIf(TypeOf (dr("OLOQTS")) Is DBNull, "", CInt(dr("OLOQTS")))
                End With

                lines.Add(line)

            Next

            Return lines

        End Function

上記の関数は jquery によって呼び出されます。

function GetAllPicklists() {
    $('#page_overview_search').addClass('ui-disabled');
    $("#Picklists").html('');
    //$("#MemberList").addClass("loading");
    $.ajax({
        type: "POST",
        url: "http://" + host + "/services/picklists.asmx/GetAllPicklists",
        data: "{'customer':'" + $('#select-customer').val() + "', 'route':'" + $('#select-route').val() + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: OnGetAllPicklistsSuccess,
        error: OnError
    });
}

JSONを提供するようにWebサービス機能を変更しましたが、それは進行中です... :)

すべてが期待どおりに機能していますが、 GetData からの接続文字列を動的にしたいと考えています。Data Source (IP)、User IdPassword、およびDefault Collectionの値を使用して (まだ定義されていない) 接続オブジェクトを設定するにはどうすればよいですか。具体的には、jquery POSTデータパラメータでその接続オブジェクトとサービス関数呼び出しパラメータを渡す方法は? 将来、ログイン時にこの接続オブジェクトを設定することは可能ですか?

ご不明な点がございましたら、お気軽にご質問ください。

前もって感謝します!

4

1 に答える 1

0

サービス呼び出しを介してデータを渡すことは適切な選択ではありません。SQL 接続文字列は簡単にハッキングできます。wcf サービスを使用し、メッセージ コントラクトを使用して情報を渡すことができます。

于 2013-03-27T11:33:34.163 に答える