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

VB2005 + SQL CommandBuilder使用

データーをストアドからDataTableへ受け取り,DataGridViewに表示 (CommandBuilder使用)

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

  Private Sub a()

    Dim cmd As New SqlClient.SqlCommand(“stHoge”, cn)
    Try
      cmd.CommandType = CommandType.StoredProcedure
      cmd.Parameters.Clear
      cmd.Parameters.Add(“@ID”, SqlDbType.Int).Value = ID
      da.SelectCommand = cmd
      dt.Locale = System.Globalization.CultureInfo.InvariantCulture
      dt.Clear()
      Dim commandBuilder As New SqlClient.SqlCommandBuilder(da)
      da.Fill(dt)
      dt.Columns(“ID”).ReadOnly = True
      DGV.DataSource = dt
    Finally
     cmd.Dispose()
    End Try

  End Sub

    ‘更新
    Private Sub b()
        da.Update(dt)
        dt.AcceptChanges()
    End Sub

SQL Server ストアドでのトランザクション

SQL Server ストアドプロシージャーでのトランザクション

CREATE PROCEDURE [dbo].[stTest1]
   @ID int
AS
Declare
   @Count int

BEGIN
    SET NOCOUNT ON;

BEGIN TRY
    BEGIN TRANSACTION

    SELECT @Count = Count(*) FROM T1
    IF @Count =0
    BEGIN
        ROLLBACK TRANSACTION
        RETURN -1 –戻る
    END

    UPDATE T2 SET a1 = 1 WHERE ID = @ID

    COMMIT TRANSACTION

END TRY

— 例外処理
BEGIN CATCH
    IF XACT_STATE() = -1
    BEGIN
       ROLLBACK TRANSACTION
    END
    IF XACT_STATE() = 1
    BEGIN
       COMMIT TRANSACTION
   END
    RETURN ERROR_NUMBER()
END CATCH

RETURN 0   

END


XACT_STATE() 関数を追加. 2010-10-16