2011年4月4日月曜日

SQL Server からデータを取得する Activity

もはやこのあたりはWorkflowだから、といった事は全くなく通常通りに行えたりします。

Imports System.Activities

Public NotInheritable Class ReadSQLDataActivity
    Inherits CodeActivity

   '文字列型のアクティビティ入力引数を定義します
    Property ConnectionString As InArgument(Of String)
    Property SqlText() As InArgument(Of String)

    Property SQLResult As OutArgument(Of DataSet)

    Protected Overrides Sub Execute(ByVal context As CodeActivityContext)

        Dim dsn = context.GetValue(Me.ConnectionString)
        Dim result As DataSet = Nothing
        Try
            Using
sqlConn As New SqlClient.SqlConnection(dsn)
                sqlConn.Open()

                Dim sqlStrings = context.GetValue(Me.SqlText)
                result = New DataSet

                Dim dataAdapter As New SqlClient.SqlDataAdapter
                dataAdapter.SelectCommand = New SqlClient.SqlCommand(sqlStrings, sqlConn)
                dataAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey

                dataAdapter.Fill(result)

                sqlConn.Close()
            End Using
        Catch
ex As Exception

        End Try

        context.SetValue(Me.SQLResult, result)
   End Sub
End Class

このような形で Activity を用意します。ConnectionString には接続文字列を設定し、SqlText には実行する SQL 文を設定します。そして結果受け取りをDataSetとして行いたいので、Workflow 上の変数として作成、SQLResult に対して変数名を設定します。

WF4-1

WF4-2

設定するとこのような形になります。上記サンプルの Workflow では、SQL を実行しデータ抽出、結果の先頭レコードの1項目目を DisplayActivity にて出力するようにしています。DisplayActivity では出力する設定として次のような形で設定します。

ResultDataSet.Tables[0].Rows[0].Items[0].ToString

※上記設定で[]を利用して記述しているのは Windows Live Writer が(1)と半角で記載すると勝手に絵文字にしてくれやがるための策です・・・。

このように設定後、実行する事で SQL の結果から先頭 1 レコード目の先頭項目が表示されます。ここまでくると次は取得結果のループ処理ですが、それはまた次回以降で。

0 件のコメント:

コメントを投稿