VB2005 + SQL (複数テーブル参照でCommandBuilderが使えない場合)

データーをストアドからDataTableへ受け取り,グリッドに表示
  (複数テーブル参照でCommandBuilderが使えない場合)
  CommandBuilderが使えない場合は,InsertCommand・UpdateCommand・DeleteCommandをそれぞれ自前で作る

    Dim cn As SqlClient.SqlConnection
    Dim da As New SqlClient.SqlDataAdapter()
    Dim dt As New DataTable

    Private Sub a1()
        Dim cmd As New SqlClient.SqlCommand(“stHoge”, cn)
        Try
            cmd.CommandType = CommandType.StoredProcedure
            da.SelectCommand = cmd

            ‘Insert
            cmd = New SqlClient.SqlCommand(“stHogeInsert”, cn)
            cmd.CommandType = CommandType.StoredProcedure
            cmd.Parameters.Clear()
            cmd.Parameters.Add(“@a1”, SqlDbType.Int, 4, “a1”)
            ‘ID値を返す(これがないとIDが不定となる)
            Dim parameter As SqlClient.SqlParameter = cmd.Parameters.Add(“@Identity”, SqlDbType.Int, 4, “ID”)
            parameter.Direction = ParameterDirection.Output
            da.InsertCommand = cmd

            ‘Update
            cmd = New SqlClient.SqlCommand(“stHogeUpdate”, cn)
            cmd.CommandType = CommandType.StoredProcedure
            cmd.Parameters.Clear()
            cmd.Parameters.Add(“@ID”, SqlDbType.Int, 4, “ID”)
            cmd.Parameters.Add(“@a2”, SqlDbType.Int, 4, “a2”)
            da.UpdateCommand = cmd

            ‘Delete
            cmd = New SqlClient.SqlCommand(“stHogeDelete”, cn)
            cmd.CommandType = CommandType.StoredProcedure
            cmd.Parameters.Clear()
            cmd.Parameters.Add(“@ID”, SqlDbType.Int, 4, “ID”)
            da.DeleteCommand = cmd

            dt.PrimaryKey = Nothing
            dt.Locale = System.Globalization.CultureInfo.InvariantCulture
            dt.Clear()
            da.Fill(dt)
            ‘dt.PrimaryKey = New DataColumn() {dt.Columns(“ID”)}

            DGV.DataSource = dt

        Finally
            cmd.Dispose()
        End Try

    End Sub

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です