SQL Server タイムアウト関連の設定

1. 接続のタイムアウト ADO
  SqlConnection.ConnectionTimeout プロパティー (ADO.Net)
  規定値15秒
  0は制限無し.

  このプロパティーはReadOnlyなので設定はできない.
  設定はConnectionStringで接続時におこなう.

  例:
  ConnectionString = “Data Source=(local);Database=test;Integrated Security=SSPI;Connection Timeout=30;”

参考:
SqlConnection.ConnectionString プロパティ (MSDN)

  このConnectionTimeoutは接続のタイムアウトなので,コマンド実行のタイムアウトとは関係ない.
コマンド実行のタイムアウトは↓.


2. クエリー(コマンド実行)のタイムアウト ADO
  SqlCommand.CommandTimeout プロパティー (ADO.Net)
  規定値30秒
  0は制限無し.

  例:
  cmd.CommandTimeout = 60

  Excel VBAでは,ADODB.CommandのCommandTimeoutプロパティー


3. SQL Server Management Studio でテーブルのデザインを変更したときのタイムアウト
  [ツール]-[オプション]-[デザイナ]-[テーブルおよびデーターベースデザイナ]-[トランザクションがタイムアウトするまでの時間] で設定する.
  規定値30秒

参考:
http://support.microsoft.com/kb/915849/ja

VB2005 + SQL ストアドでのパラメーター受け渡し

ストアドでのパラメーター受け渡し

Dim cn As SqlClient.SqlConnection

Sub a()

    Dim cmd As New SqlClient.SqlCommand
   
Try

        Dim strSQL As String = “stTest”
        cmd.Connection = cn
        cmd.CommandText = strSQL
        cmd.CommandType = CommandType.StoredProcedure
        cmd.Parameters.Clear()
        ‘Return Value
        cmd.Parameters.Add(“@Ret”, SqlDbType.Int).Direction = ParameterDirection.ReturnValue
        ‘入力パラメーター Input Parameters
        cmd.Parameters.Add(“@ID”, SqlDbType.Int).Value = 1
        cmd.Parameters.Add(“@a1”, SqlDbType.NVarChar).Value = “A”
        cmd.Parameters.Add(“@a2”, SqlDbType.Decimal).Value = 1.52D
        ‘出力パラメーター Output Parameters
        cmd.Parameters.Add(“@b1”, SqlDbType.Int).Direction = ParameterDirection.Output
        ‘Decimal型の出力パラメーターはPrecision(最大桁数)とScale(小数部桁数)の指定が必要.欄外の※も参照.
        cmd.Parameters.Add(“@b2”, SqlDbType.Decimal).Direction = ParameterDirection.Output
        cmd.Parameters(“@b2”).Precision = 4
        cmd.Parameters(“@b2”).Scale = 2

        Dim res As Integer = cmd.ExecuteNonQuery() ‘ストアド実行

        If CInt(cmd.Parameters(“@Ret”).Value) = 1 Then
            If Not IsDBNull(cmd.Parameters(“@b1”).Value) Then
                Dim b1 As Integer = CInt(cmd.Parameters(“@b1”).Value)
                ‘コード
            End If
        End If

    Finally
        cmd.Dispose()
    End Try
End Sub


Updated:
2010-10-23 Decimal型の例を追加.
※ Decimal型のPrecision(最大桁数)とScale(小数部桁数)の指定は入力パラメーターでは不要だが出力パラメーターでは必要.
ややこしいことに,Excel VBAでは,入力パラメーター・出力パラメーターどちらにも必要.

VB2005 Excel操作 (遅延バインディングを使う方法)

Microsoft Excel Object Libraryを参照する事前バインディングではビルドしたPCと配布先のPCでExcelのバージョンが違うとエラーで動かない.
バージョンが違っても動くようにするには遅延バインディングを使う.

遅延バインディングでは,Option Strict Offにしなければならないが,
Option Strictはファイル単位で指定できるのでExcel操作のコードだけ別にしてそこだけOption Strict Offにするのが良い.
または,プロジェクトのプロパティー – [コンパイル]で「遅延バインディングです~」を「なし」に設定する.

    Public Sub Excel()
        ‘Excelを起動
        Dim oExcel As Object = CreateObject(“Excel.Application”)
        oExcel.Visible = True ‘Excelを表示する場合
        Dim oBooks As Object = oExcel.Workbooks
        Dim FilePath As String = “c:\Test.xls”
        Dim oBook As Object = oBooks.open(FilePath) ‘既存ファイルを開く場合
        ‘Dim oBook As Object = oBooks.Add ‘新規作成の場合
        Dim oSheets As Object = oBook.Worksheets
        Dim oSheet As Object = oSheets.Item(1) ‘Sheet1

        ‘Excelファイル操作
        Dim oRange As Object = oSheet.Cells(1, 1) ‘A1セル
        oRange.value = “abc”
        System.Runtime.InteropServices.Marshal.FinalReleaseComObject(oRange) ‘解放(使うたびに解放する)
        oRange = oSheet.Cells(2, 1) ‘A2セル
        oRange.value = “def”
        System.Runtime.InteropServices.Marshal.FinalReleaseComObject(oRange) ‘解放

        ‘Excelファイル保存
        oExcel.DisplayAlerts = False ‘保存しますか?を表示しない
        oSheet.SaveAs(FilePath) ‘ファイル保存
        oExcel.DisplayAlerts = True ‘非表示を元に戻す

        ‘Excelオブジェクト解放
        ‘FinalReleaseComObject:参照を0にする(全て解放)
        ‘ReleaseComObject:参照を1つデクリメントする(1つ解放)
        System.Runtime.InteropServices.Marshal.FinalReleaseComObject(oSheet) ‘解放
        System.Runtime.InteropServices.Marshal.FinalReleaseComObject(oSheets) ‘解放
        oBook.Close(False) ‘xlBookを閉じる
        System.Runtime.InteropServices.Marshal.FinalReleaseComObject(oBook) ‘解放
        System.Runtime.InteropServices.Marshal.FinalReleaseComObject(oBooks) ‘解放
        oExcel.Quit() ‘Excelを閉じる
        System.Runtime.InteropServices.Marshal.FinalReleaseComObject(oExcel) ‘解放

    End Sub

注意:解放がうまくいかないと画面上でExcelが消えていてもプロセスが残ってしまうので,タスクマネージャの[プロセス]でEXCEL.EXEが残っていないことをリリース前によく確認すること.解放がうまくいかなくても普通はアプリを終了するとEXCEL.EXEも消えるが,そんなことでごまかさずに解放したらすぐにEXCEL.EXEも終了するようにすること.

参考:
Visual Basic .NET による Office オートメーション サーバーでのバインディング MS
Visual Basic .NET からオートメーションを使用して Office マクロを実行する方法 MS
.NET 開発者の観点から捉えた Excel オブジェクト モデル MS
C#によるExcel制御
http://hanatyan.sakura.ne.jp/dotnet/Excelflm.htm VBレスキュー(花ちゃん)