0

Oracle データベースでストアド プロシージャを実行するコンソール vb.net プログラムの作成に問題があります。ストアド プロシージャがコード内にハード コードされている場合は、これを行うことができます。問題は、ストアド プロシージャをベンダー プログラムのパラメーターに配置する必要があることです。現在、これを行うために VB6 プログラムを使用しています。現在、彼らはこの vb6 プログラムを .NET に変換したいと考えていますが、その方法がわかりません。以下のアプローチを試しましたが、サードパーティ プログラムからコマンド パラメータが渡されません。

例。これは、サードパーティ プログラムのスクリーンショットです。

外部プログラム

PLSQLSUB.exe プログラムは、ストアド プロシージャ CNC_UNLOCK_USERS を呼び出す vb6 です。

これは VB6 コードです。これは現在動作していますが、VB.NET で外部パラメータを渡す方法がわかりません。

Private Sub Form_Load()
  Dim cnTrecs As New ADODB.Connection
  Dim QY As New ADODB.Command

  Dim I As Integer

  Dim Procedures(10) As String

  Dim ColonPos As Integer

  Dim CommLine As String
  Dim CommLength As Integer
  Dim StartPos As Integer
  Dim FileName As String
  Dim CheckForFile As String
  Dim User As String
  Dim Pass As String
  Dim Userid As String
  Dim Password As String

  Dim PLSCount As Integer

  PLSCount = 0

  CommLine = Command()
  CommLength = Len(Trim(CommLine))

  If Trim(CommLine) <> "" Then
    StartPos = 1
    For I = 1 To 10
      ColonPos = InStr(StartPos, Trim(CommLine), ";")

      If ColonPos > 0 Then
        Procedures(I) = Mid(CommLine, StartPos, ColonPos - StartPos)
        PLSCount = PLSCount + 1
        StartPos = ColonPos + 1
      ElseIf I > 1 Then
        If (CommLength - StartPos) > 0 Then
          Procedures(I) = Mid(CommLine, StartPos, CommLength - StartPos)
          MsgBox (Procedures(I))
          PLSCount = PLSCount + 1
          Exit For
        Else
          Exit For
        End If
      Else
        Procedures(I) = Trim(CommLine)
        PLSCount = PLSCount + 1
        Exit For
      End If
    Next
    Exit Sub
  Else
    Unload Me
    Exit Sub
  End If

  CheckForFile = Dir("C:\VB\vbtext1.txt")
  If CheckForFile <> "" Then FileName = "d:\VB\vbtext1.txt"
    Open FileName For Input As #5   ' Open UserID and Password file.
      Line Input #5, Userid
      Line Input #5, Password
    Close #5
  End If
  User = Mid(Userid, 1) ' Set database userID
  Pass = Mid(Password, 1) ' Set database password

  cnTrecs.Open "DSN=PLSQLSUB;" _
                & "Uid=" _
                & Trim$(User) & ";PWD=" _
                & Trim$(Pass)

  For I = 1 To PLSCount ' Loop until end of plsql procedures
    Print #1, "The Stored Procedure " & Procedures(I) & " was submitted for execution     
on/at "; Format(Now, "dd-mmm-yyyy hh:mm:ss")

    Set QY.ActiveConnection = cnTrecs
    QY.CommandType = adCmdStoredProc
    QY.CommandText = Procedures(I)
    QY.Execute
    Print #1, "The Stored Procedure " & Procedures(I) & " completed execution on/at ";   
    Format(Now, "dd-mmm-yyyy hh:mm:ss")
    Print #1, " "
  Next I

  If cnTrecs.State = adStateOpen Then
    cnTrecs.Close
  End If
End Sub

友人が以下のコードの使用について教えてくれましたが、ストアド プロシージャを渡すことができませんでした。どんな助けでも大歓迎です。

Dim CommandLineArgs As System.Collections.ObjectModel.ReadOnlyCollection(Of String) = My.Application.CommandLineArgs

For i As Integer = 0 To CommandLineArgs.Count - 1
   MessageBox.Show("The stored procedure is: " + CommandLineArgs(i))
Next
4

2 に答える 2

0

Environment.GetCommandLineArgsメソッドを使用して、CommandLine 引数を取得できます。あなたの質問をさらに見て、あなたはすでに似たようなことをしています。私が持っている質問は、実行する StoredProcedure または StoredProcedure の名前をインポートしようとしているということです。

于 2013-01-12T21:51:47.607 に答える
0

私の理解が正しければ、あなたは既存の VB6 を VB.NET に変換したい、つまり VB.NET からストアド プロシージャを実行したいということです。SP にはパラメーターがないため、以下のコードを使用します。

Using conn As New OracleConnection("Server=YourOracle;Uid=uid;Pwd=pwd")
  conn.Open()
  Dim cmd As New OracleCommand
  cmd.Connection = conn
  cmd.CommandType = CommandType.StoredProcedure
  cmd.CommandText = "CNC_UNLOCK_USERS"
  Try
    cmd.ExecuteNonQuery()
  Catch ex As OracleException
    'do something
  End Try
End Using

vb.net でのストアド プロシージャの実行に基づいています (後でパラメーターが必要な場合は、このリンクを参照してください)。ユーザー ID とパスワードはd:\VB\vbtext1.txt、VB6 コードに従って に保存されます。C: で同様の場所をチェックしている理由がわかりませんFileName。.

コマンド ラインからストアド プロシージャの名前を渡す必要がある場合は、(プロジェクト プロパティ -> [アプリケーション] タブ) に切り替えStartup objectてからSub Main、同様のコードを新しいクラスに配置する必要があります。

Public Class Class1
  Shared Sub Main(args() As String)
    'parse args and save it somewhere
    Form1.ShowDialog()
  End Sub
End Class

フォームを表示する前に、args(0)実行するストアド プロシージャの名前として保存してください。ShowDialogまたは、 type のパラメーターを受け取り、それStringを呼び出すカスタムをフォームに設定することもできます。とにかくUIが表示されるようになったので、コンソールアプリケーションに変換することをお勧めします。次に、上記のコードを で実行しSub Main、次の行を変更します。

cmd.CommandText = "CNC_UNLOCK_USERS"

これに:

cmd.CommandText = args(0)
于 2013-01-12T19:46:14.477 に答える