SilkTest 技術情報(FAQ)


ODBC接続でSQLを発行する

SilkTest WorkbenchのビジュアルテストからSQLを発行できませんが、.NETスクリプトを併用することでSQLの呼び出しが行えます。

この例では、ODBCコネクションを利用してSQLを発行しています。
このサンプルはビジュアルテストから呼び出されることを想定しているので、入力パラメータに接続情報を渡して、SQL発行結果を出力パラメータにセットしています。


ビジュアルテストから渡されるパラメータ用の変数を定義

  1. .NETスクリプトを新規作成する
  2. .NETスクリプトのプロパティを表示して下記のように入力パラメータと出力パラメータを定義する
  3. 参照にはSystem.Dataを追加
    00305-1.png

.NETスクリプトのコーディング例

Imports System.Data.Odbc

Public Module Main
 Public Sub Main(args As IDictionary(Of String, Object))
  Dim myConn As New OdbcConnection        
   
  Dim _odbcDataSourceName = args("odbcDataSourceName")   'ODBCデータソース名
  Dim _UID = args("DBUsername")                          'ユーザID
  Dim _PWD = args("DBPassword")                          'パスワード
  Dim _tableName = args("tableName")                     'テーブル名
  Dim _numberOfColumns = args("numberOfColumns")         'カラム数
  Dim _selectedColumns = args("selectedColumns")         '対象カラム
  Dim _whereClause = args("whereClause")                 'where句
  Dim _UIDColumn = args("UIDColumn")                     'where句 左辺
  Dim _myOperand = args("myOperand")                     'where句 右辺  
  Dim mySQLQuery = ""                                   
  If _myOperand = "" Then
   _myOperand = "="
  End If 
   
  If _UIDColumn = "" Then
   mySQLQuery = "select " + _selectedColumns + " from " + _tableName + ";"
  Else
   mySQLQuery = "select " + _selectedColumns + " from " + _tableName + " where " + _UIDColumn + " " + _myOperand + " '" + _whereClause + "';"
  End If
  
  'MsgBox(mySQLQuery, vbOkOnly)  'display query
  
  Dim myCmd = New OdbcCommand(mySQLQuery, myConn)
  myCmd.CommandTimeout = 0
  Dim myResults = ""
  Dim currentColumn As Integer = 0
  
  Try
   myConn.ConnectionString = "DSN=" + _odbcDataSourceName + ";UID=" + _UID + ";PWD=" + _PWD + ""
   myConn.Open()
  Catch ex As Exception
   MsgBox ("エラー! SQL Serverの接続に失敗しました:  " & ex.Message, vbOkOnly)
  End Try
 
  If myConn.State.ToString.Equals("Open") Then
   
   Dim myReader = myCmd.ExecuteReader()
   
   While myReader.read()
    While currentColumn < Val(_numberOfColumns)
     myResults = myResults + myReader.Item(currentColumn).ToString
     currentColumn = currentColumn + 1
     myResults = myResults + ","
    End While
   currentColumn = 0
    myResults = myResults.Substring(0,Len(myresults)-1) 
   End While
  
   myReader.Close()
   myReader = Nothing
   
   args("outputRecordSet") = myResults
  Else
   args("outputRecordSet") = myResults
  End If
  
  myCmd.cancel()
  myConn.close()
  myConn = Nothing
  
 End Sub
End Module


免責事項

ここで紹介したスクリプトは説明のためのサンプルであり、製品の一部ではございません。スクリプトが実際に動作するか、御社業務に適合するかなどに関しまして、一切の保証はございません。 スクリプト、説明、その他すべてについて、無謬性は保障されません。

ここで紹介するスクリプトの一部、もしくは全部について、弊社に断りなく、御社スクリプトの内部に組み込み、そのままご利用頂いても構いません。

本スクリプトの一部もしくは全部を二次的著作物に対して引用する場合、著作権法の精神に基づき、適切な扱いを行ってください。