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

SQL Server + EXCEL VBAなどで,「オブジェクトが閉じている場合は、操作は許可されません。」 エラー

Excel VBAでSQL ServerからRecordSetを受け取るときなどに,どうみてもコードは問題ないのに 「オブジェクトが閉じている場合は、操作は許可されません。」 というエラーが出ることがある.
ストアド内で複数のSQL文を使っている場合などに出る.
一時テーブルやテーブル変数を使う場合は複数のSQL文になるのが普通なのでこのエラーが出がちである.
SQLOLEDB,SQLNCLI どちらも出る.

この場合,「SET NOCOUNT ON」を付けるとエラーが出なくなる.

参考:
PRB: エラーの ADO SQLOLEDB と参照元の #Temp テーブルのメッセージ  (MS)