SQLSetConnectAttr

SQL Server Native Client ODBC ドライバーでは、SQL_ATTR_CONNECTION_TIMEOUT の設定が無視されます。

SQL_ATTR_TRANSLATE_LIB も無視されます。他の変換ライブラリの指定はサポートされていません。Microsoft ODBC driver for SQL Server を使用するように、アプリケーションを簡単に移植できるようにするには、SQL_ATTR_TRANSLATE_LIB で設定される値をドライバー マネージャーのバッファーにコピーしたり、そこからコピーしたりするようにします。

SQL Server Native Client ODBC ドライバーでは、REPEATABLE READ トランザクション分離レベルが SERIALIZABLE として実装されます。

SQL Server 2005 で、新しいトランザクション分離レベル属性 SQL_COPT_SS_TXN_ISOLATION のサポートが導入されました。SQL_COPT_SS_TXN_ISOLATION を SQL_TXN_SS_SNAPSHOT に設定すると、トランザクションがスナップショット分離レベルで実行されることが報告されます。

注意

SQL_ATTR_TXN_ISOLATION は、SQL_TXN_SS_SNAPSHOT 以外のすべての分離レベルを設定する場合に使用できます。スナップショット分離を使用する場合は、SQL_COPT_SS_TXN_ISOLATION を使用して SQL_TXN_SS_SNAPSHOT を設定する必要があります。ただし、スナップショット分離レベルは SQL_ATTR_TXN_ISOLATION または SQL_COPT_SS_TXN_ISOLATION のどちらを使用しても取得することはできます。

ODBC ステートメントの属性を接続属性に昇格すると、予期しない結果が生じることがあります。結果セットの処理にサーバー カーソルを必要とするステートメント属性は、接続属性に昇格できます。たとえば、ODBC ステートメント属性 SQL_ATTR_CONCURRENCY に既定値の SQL_CONCUR_READ_ONLY よりも制限の厳しい値を設定すると、ドライバーはその接続で送信されるすべてのステートメントに動的カーソルを使用します。この接続から送信されるステートメントで ODBC カタログ関数を実行すると、SQL_SUCCESS_WITH_INFO とカーソルの動作が読み取り専用に変更されたことを示す診断レコードが返されます。この接続で、COMPUTE 句を含む Transact-SQL の SELECT ステートメントを実行すると、ステートメントの実行に失敗します。

SQL Server Native Client ODBC ドライバーでは、sqlncli.h で定義されているドライバー固有の ODBC 接続属性の拡張機能が多数サポートされています。SQL Server Native Client ODBC ドライバーが、接続前に属性を設定しておくことを必要とする場合や、既に設定されている属性に対する新たな設定を無視する場合があります。次の表に、その制限事項を示します。

SQL Server の属性

設定タイミング (サーバーへの接続前または接続後)

SQL_COPT_SS_ANSI_NPW

接続前

SQL_COPT_SS_ATTACHDBFILENAME

接続前

SQL_COPT_SS_BCP

接続前

SQL_COPT_SS_BROWSE_CONNECT

接続前

SQL_COPT_SS_BROWSE_SERVER

接続前

SQL_COPT_SS_CONCAT_NULL

接続前

SQL_COPT_SS_CONNECTION_DEAD

接続後

SQL_COPT_SS_ENCRYPT

接続前

SQL_COPT_SS_ENLIST_IN_DTC

接続後

SQL_COPT_SS_ENLIST_IN_XA

接続後

SQL_COPT_SS_FALLBACK_CONNECT

接続前

SQL_COPT_SS_FAILOVER_PARTNER

接続前

SQL_COPT_SS_INTEGRATED_SECURITY

接続前

SQL_COPT_SS_MARS_ENABLED

接続前

SQL_COPT_SS_OLDPWD

接続前

SQL_COPT_SS_PERF_DATA

接続後

SQL_COPT_SS_PERF_DATA_LOG

接続後

SQL_COPT_SS_PERF_DATA_LOG_NOW

接続後

SQL_COPT_SS_PERF_QUERY

接続後

SQL_COPT_SS_PERF_QUERY_INTERVAL

接続後

SQL_COPT_SS_PERF_QUERY_LOG

接続後

SQL_COPT_SS_PRESERVE_CURSORS

接続前

SQL_COPT_SS_QUOTED_IDENT

接続前/接続後

SQL_COPT_SS_TRANSLATE

接続前/接続後

SQL_COPT_SS_TRUST_SERVER_CERTIFICATE

接続前

SQL_COPT_SS_TXN_ISOLATION

接続前/接続後

SQL_COPT_SS_USE_PROC_FOR_PREP

接続前/接続後

SQL_COPT_SS_USER_DATA

接続前/接続後

SQL_COPT_SS_WARN_ON_CP_ERROR

接続前

SQL_COPT_SS_ANSI_NPW

SQL_COPT_SS_ANSI_NPW 属性は、比較や連結における NULL 値、文字データ型の埋め込み、および警告の処理に対して、ISO 標準の処理を有効または無効にします。詳細については、「SET ANSI_NULLS」、「SET ANSI_PADDING」、「SET ANSI_WARNINGS」、および「SET CONCAT_NULL_YIELDS_NULL」を参照してください。

説明

SQL_AD_ON

既定値。接続では、NULL 比較、埋め込み、警告、および NULL 連結に ANSI の既定動作が使用されます。

SQL_AD_OFF

接続では、NULL、文字データ型の埋め込み、および警告の処理に SQL Server で定義された処理を使用します。

接続プールを使用する場合は、SQLSetConnectAttr ではなく接続文字列で SQL_COPT_SS_ANSI_NPW を設定する必要があります。接続プールを使用している場合、接続が確立された後にこの属性を変更しようとすると、何も通知されずに失敗します。

SQL_COPT_SS_ATTACHDBFILENAME

SQL_COPT_SS_ATTACHDBFILENAME 属性は、アタッチ可能なデータベースのプライマリ ファイルの名前を指定します。このデータベースがアタッチされ、接続の既定のデータベースとして使用されます。SQL_COPT_SS_ATTACHDBFILENAME 属性を使用するには、接続属性 SQL_ATTR_CURRENT_CATALOG の値または SQLDriverConnect の DATABASE = parameter でデータベース名を指定する必要があります。データベースが以前にアタッチされていた場合は、SQL Server はそのデータベースを再アタッチしません。

説明

文字列への SQLPOINTER

この文字列には、アタッチするデータベースのプライマリ ファイル名を指定します。ファイル名には、ファイルの完全なパスを含めます。

SQL_COPT_SS_BCP

SQL_COPT_SS_BCP 属性は、接続で一括コピー関数を有効にします。詳細については、「一括コピー関数」を参照してください。

説明

SQL_BCP_OFF

既定値。接続では一括コピー関数を使用できません。

SQL_BCP_ON

接続では一括コピー関数を使用できます。

SQL_COPT_SS_BROWSE_CONNECT

この属性は、SQLBrowseConnect から返される結果セットのカスタマイズに使用します。SQL_COPT_SS_BROWSE_CONNECT 属性は、SQL Server の列挙されたインスタンスから詳細情報が返されるかどうかを指定します。この詳細情報には、サーバーがクラスター サーバーかどうか、さまざまなインスタンスの名前、およびバージョン番号などが含まれます。

説明

SQL_MORE_INFO_NO

既定値。サーバーの一覧を返します。

SQL_MORE_INFO_YES

SQL Server 7.0 の場合は、SQLBrowseConnect はサーバーの一覧を返します。それ以外の場合は、SQLBrowseConnect はサーバーの拡張プロパティの文字列を返します。

SQL_COPT_SS_BROWSE_SERVER

この属性は、SQLBrowseConnect から返される結果セットのカスタマイズに使用します。SQL_COPT_SS_BROWSE_SERVER 属性は、SQLBrowseConnect から返される情報の対象となるサーバー名を指定します。

説明

computername

SQLBrowseConnect は、指定したコンピューター上にある SQL Server インスタンスの一覧を返します。サーバー名には、円記号 (\\) を使用しないでください (たとえば、\\MyServer ではなく MyServer を使用する必要があります)。

NULL

既定値。SQLBrowseConnect は、ドメイン内のすべてのサーバーに関する情報を返します。

SQL_COPT_SS_CONCAT_NULL

SQL_COPT_SS_CONCAT_NULL 属性は、文字列を連結するときの NULL 処理に対して、ISO 標準の処理を有効または無効にします。詳細については、「SET CONCAT_NULL_YIELDS_NULL」を参照してください。

説明

SQL_CN_ON

既定値。接続では、文字列を連結するときの NULL の処理に対して、ISO の既定の動作を使用します。

SQL_CN_OFF

接続では、文字列を連結するときの NULL の処理に対して、SQL Server で定義されている動作を使用します。

SQL_COPT_SS_ENCRYPT

接続の暗号化を制御します。

暗号化にはサーバー上の証明書が使用されます。接続属性 SQL_COPT_SS_TRUST_SERVER_CERTIFICATE が SQL_TRUST_SERVER_CERTIFICATE_YES に設定されるか、接続文字列に "TrustServerCertificate=yes" が含まれていない限り、この証明書は証明機関によって検証される必要があります。この両方の条件を満たしている場合、サーバー上に証明書が存在しなければ、そのサーバーによって生成および署名された証明書を使用して、接続を暗号化できます。

説明

SQL_EN_ON

接続が暗号化されます。

SQL_EN_OFF

接続は暗号化されません。これが既定の動作です。

SQL_COPT_SS_ENLIST_IN_DTC

クライアントは、Microsoft 分散トランザクション コーディネーター (MS DTC) の OLE DB ITransactionDispenser::BeginTransaction メソッドを呼び出して、MS DTC トランザクションを開始し、トランザクションを表す MS DTC トランザクション オブジェクトを作成します。その後、アプリケーションでは、SQL_COPT_SS_ENLIST_IN_DTC 属性を指定して SQLSetConnectAttr を呼び出し、トランザクション オブジェクトを ODBC 接続と関連付けます。関連のあるすべてのデータベース操作は、MS DTC トランザクションで保護されます。アプリケーションでは、SQL_DTC_DONE 値を指定して SQLSetConnectAttr を呼び出し、接続と DTC の関連付けを完了します。詳細については、「MS DTC 分散トランザクション」を参照してください。

説明

DTC object*

SQL Server にエクスポートするトランザクションを指定する MS DTC OLE トランザクション オブジェクトです。

SQL_DTC_DONE

トランザクションの末尾を区切ります。

SQL_COPT_SS_ENLIST_IN_XA

クライアントでは、XA 準拠のトランザクション プロセッサ (TP) を使用した XA トランザクションを開始するために、Open Group の tx_begin 関数を呼び出します。その後、アプリケーションでは、SQL_COPT_SS_ENLIST_IN_XA にパラメーター TRUE を指定して SQLSetConnectAttr を呼び出し、XA トランザクションと ODBC 接続を関連付けます。関連のあるすべてのデータベース操作は、XA トランザクションで保護されます。XA トランザクションと ODBC 接続の関連付けを完了するには、クライアントで SQL_COPT_SS_ENLIST_IN_XA にパラメーター FALSE を指定して SQLSetConnectAttr を呼び出す必要があります。詳細については、分散トランザクション コーディネーターのマニュアルを参照してください。

SQL_COPT_SS_FALLBACK_CONNECT

SQL Server Native Client では、SQL Server 6.5 への接続がサポートされないので、この属性はサポートされなくなりました。

SQL_COPT_SS_FAILOVER_PARTNER

SQL Server のデータベース ミラーリングで使用するフェールオーバー パートナーの名前を指定または取得する場合に使用します。この属性値には、SQL Server への最初の接続を確立する前に、NULL で終わる文字列を指定する必要があります。

接続後は、アプリケーションで SQLGetConnectAttr を使用して、この属性をクエリすることにより、フェールオーバー パートナーの ID を判別できます。プライマリ サーバーのフェールオーバー パートナーが存在しないと、この属性は空文字列を返します。アプリケーションでは最後に判別したバックアップ サーバーをキャッシュできますが、この情報は最初に接続を確立したとき、または接続がリセットされたとき (接続がプールされている場合) にだけ更新されることに注意する必要があります。接続が長期にわたると、この情報は古くなることがあります。

詳細については、「データベース ミラーリングの使用」を参照してください。

SQL_COPT_SS_INTEGRATED_SECURITY

SQL_COPT_SS_INTEGRATED_SECURITY 属性は、サーバー ログインでアクセス違反を検出するために Windows 認証を使用することを強制します。Windows 認証を使用すると、ドライバーでは SQLConnectSQLDriverConnect、または SQLBrowseConnect の処理の一環として提供されるユーザー ID とパスワードを無視します。

説明

SQL_IS_OFF

既定値。ログインでユーザー ID とパスワードの検証に SQL Server 認証を使用します。

SQL_IS_ON

SQL Server に対するユーザーのアクセス権の検証に Windows 認証を使用します。

SQL_COPT_SS_MARS_ENABLED

この属性は、複数のアクティブな結果セット (MARS) を有効または無効にします。既定では、MARS は無効になっています。この属性は、SQL Server への接続を確立する前に設定する必要があります。SQL Server への接続が開かれると、MARS の設定 (有効または無効) は接続が閉じられるまで維持されます。

説明

SQL_MARS_ENABLED_NO

既定値。複数のアクティブな結果セット (MARS) を無効にします。

SQL_MARS_ENABLED_YES

MARS を有効にします。

MARS の詳細については、「複数のアクティブな結果セット (MARS) の使用」を参照してください。

SQL_COPT_SS_OLDPWD

SQL Server 2005 では、SQL Server 認証におけるパスワードの期限切れが導入されました。クライアントから接続の古いパスワードと新しいパスワードの両方を提供できるようにするために、SQL_COPT_SS_OLDPWD 属性が追加されました。この属性が設定されている場合、接続文字列には変更された "古いパスワード" が含まれているので、プロバイダーは最初の接続またはそれ以降の接続で接続プールを使用しません。

詳細については、「プログラムによるパスワードの変更」を参照してください。

説明

SQL_COPT_SS_OLD_PASSWORD

古いパスワードを含む文字列への SQLPOINTER。この値は書き込み専用で、サーバーへの接続を確立する前に設定する必要があります。

SQL_COPT_SS_PERF_DATA

SQL_COPT_SS_PERF_DATA 属性は、パフォーマンス データのログ記録を開始または停止します。データのログ ファイル名は、データのログ記録を開始する前に設定する必要があります。詳細については、次の「SQL_COPT_SS_PERF_DATA_LOG」を参照してください。

説明

SQL_PERF_START

ドライバーのパフォーマンス データのサンプリングを開始します。

SQL_PERF_STOP

パフォーマンス データのサンプリングのカウンターを停止します。

詳細については、「SQLGetConnectAttr」を参照してください。

SQL_COPT_SS_PERF_DATA_LOG

SQL_COPT_SS_PERF_DATA_LOG 属性は、パフォーマンス データの記録に使用するログ ファイル名を割り当てます。ログ ファイル名は、アプリケーションのコンパイル方法に応じて、ANSI または Unicode 形式の、NULL で終わる文字列になります。StringLength 引数は SQL_NTS に設定してください。

SQL_COPT_SS_PERF_DATA_LOG_NOW

SQL_COPT_SS_PERF_DATA_LOG_NOW 属性は、ドライバーに対して、統計ログのエントリをディスクに書き込むように指定します。StringLength 引数は SQL_NTS に設定してください。

SQL_COPT_SS_PERF_QUERY

SQL_COPT_SS_PERF_QUERY 属性は、実行時間の長いクエリ用のログ記録を開始または停止します。クエリのログ ファイル名は、ログ記録を開始する前に指定する必要があります。アプリケーションでは、ログ記録の間隔を設定して "実行時間の長いクエリ" を定義できます。

説明

SQL_PERF_START

実行時間の長いクエリのログ記録を開始します。

SQL_PERF_STOP

実行時間の長いクエリのログ記録を停止します。

詳細については、「SQLGetConnectAttr」を参照してください。

SQL_COPT_SS_PERF_QUERY_INTERVAL

SQL_COPT_SS_PERF_QUERY_INTERVAL 属性は、クエリのログ記録のしきい値をミリ秒単位で設定します。指定のしきい値内に解決しないクエリは、実行時間の長いクエリのログ ファイルに記録されます。クエリのしきい値に上限はありません。クエリのしきい値に値 0 が設定されている場合、すべてのクエリがログに記録されます。

SQL_COPT_SS_PERF_QUERY_LOG

SQL_COPT_SS_PERF_QUERY_LOG 属性は、実行時間の長いクエリのデータを記録するログ ファイル名を割り当てます。ログ ファイル名は、アプリケーションのコンパイル方法に応じて、ANSI または Unicode 形式の、NULL で終わる文字列になります。StringLength 引数は、SQL_NTS または文字列の長さ (バイト単位) に設定してください。

SQL_COPT_SS_PRESERVE_CURSORS

この属性を使用して、トランザクションをコミットまたはロールバックするときに接続でカーソルを保持するかどうかを照会および設定できます。設定値は、SQL_PC_ON または SQL_PC_OFF のどちらかです。既定値は SQL_PC_OFF です。この設定は、SQLEndTran (または SQLTransact) を呼び出すときにドライバーによってカーソルを閉じるかどうかを制御します。

説明

SQL_PC_OFF

既定値。トランザクションを SQLEndTran を使用してコミットまたはロールバックすると、カーソルが閉じられます。

SQL_PC_ON

トランザクションを SQLEndTran を使用してコミットまたはロールバックしてもカーソルは閉じられません。ただし、非同期モードで静的カーソルまたはキーセット カーソルを使用している場合は除きます。カーソルのデータ設定が完了していないときにロールバックが行われると、そのカーソルは閉じられます。

SQL_COPT_SS_QUOTED_IDENT

SQL_COPT_SS_QUOTED_IDENT 属性は、その接続で送信される ODBC ステートメントや Transact-SQL ステートメントにおける引用符で囲まれた識別子の使用を有効または無効にします。引用符で囲まれた識別子を指定することにより、"My Table" のように識別子に空白が含まれていて通常は無効になるオブジェクト名も、SQL Server Native Client ODBC ドライバーでは許可されます。詳細については、「SET QUOTED_IDENTIFIER」を参照してください。

説明

SQL_QI_OFF

SQL Server 接続では、送信される Transact-SQL ステートメントで、引用符で囲まれた識別子を指定できません。

SQL_QI_ON

既定値。接続では、送信される Transact-SQL ステートメントで、引用符で囲まれた識別子を使用できます。

SQL_COPT_SS_TRANSLATE

SQL_COPT_SS_TRANSLATE 属性を指定すると、MBCS データを交換するときに、ドライバーによってクライアントとサーバーのコード ページ間で文字が変換されます。この属性は、SQL Server の char 列、varchar 列、および text 列に格納されたデータのみに影響します。

説明

SQL_XL_OFF

ドライバーでは、クライアントとサーバー間で文字データを交換する際に、あるコード ページから別のコード ページに文字が変換されません。

SQL_XL_ON

既定値。ドライバーでは、クライアントとサーバー間で文字データを交換する際に、あるコード ページから別のコード ページに文字が変換されます。サーバーにインストールされているコード ページとクライアントで使用されているコード ページが判別され、文字の変換が自動的に構成されます。

SQL_COPT_SS_TRUST_SERVER_CERTIFICATE

SQL_COPT_SS_TRUST_SERVER_CERTIFICATE 属性では、暗号化を使用しているときに、ドライバーによる証明書の検証を有効または無効にできます。この属性の値は読み書き可能ですが、接続を確立した後に値を設定しても、設定は有効にはなりません。

クライアント アプリケーションでは、接続を開いた後にこの属性をクエリして、実際に使用されている暗号化と検証の設定を判断できます。

説明

SQL_TRUST_SERVER_CERTIFICATE_NO

既定値。証明書の検証を伴わない暗号化が無効です。

SQL_TRUST_SERVER_CERTIFICATE_YES

証明書の検証を伴わない暗号化が有効です。

SQL_COPT_SS_TXN_ISOLATION

SQL_COPT_SS_TXN_ISOLATION 属性は、SQL Server 固有のスナップショット分離の属性を設定します。この値は SQL Server 固有の値であるため、スナップショット分離は、SQL_ATTR_TXN_ISOLATION を使用して設定することはできません。ただし、この値は、SQL_ATTR_TXN_ISOLATION または SQL_COPT_SS_TXN_ISOLATION のどちらを使用しても取得することはできます。

説明

SQL_TXN_SS_SNAPSHOT

あるトランザクションで行った変更内容を別のトランザクションから参照できないことを示します。この場合、クエリを再実行しても変更内容を参照することはできません。

スナップショット分離の詳細については、「スナップショット分離を使用した作業」を参照してください。

SQL_COPT_SS_USE_PROC_FOR_PREP

SQL Server Native Client では、SQL Server 6.5 への接続がサポートされないので、この属性はサポートされなくなりました。

SQL_COPT_SS_USER_DATA

SQL_COPT_SS_USER_DATA 属性は、ユーザー データのポインターを設定します。ユーザー データとは、接続ごとに記録されているクライアントが所有するメモリのことです。

詳細については、「SQLGetConnectAttr」を参照してください。

SQL_COPT_SS_WARN_ON_CP_ERROR

この属性は、コード ページの変換中に損失したデータがある場合に警告を表示するかどうかを指定します。これは、サーバーから送信されるデータにのみ適用されます。

説明

SQL_WARN_YES

コード ページの変換中にデータの損失が発生した場合に、警告を表示します。

SQL_WARN_NO

(既定値) コード ページの変換中にデータの損失が発生した場合に、警告を表示しません。

SQLSetConnectAttr によるサービス プリンシパル名 (SPN) のサポート

新しい接続属性である SQL_COPT_SS_SERVER_SPN および SQL_COPT_SS_FAILOVER_PARTNER_SPN の値は、SQLSetConnectAttr を使用して設定できます。接続が開いている場合、これらの属性を設定することはできません。接続が開いているときにこれらの属性を設定しようとすると、"現時点での操作は正しくありません。" というメッセージと共に、エラー HY011 が返されます (これらの値は、SQLSetConnectOption を使用して設定することもできます)。

SPN の詳細については、「クライアント接続におけるサービス プリンシパル名 (SPN) (ODBC)」を参照してください。

SQL_COPT_SS_CONNECTION_DEAD

これは読み取り専用属性です。

SQL_COPT_SS_CONNECTION_DEAD の詳細については、「SQLGetConnectAttr」および「データ ソースへの接続 (ODBC)」を参照してください。

次の例では、パフォーマンス データがログに記録されます。

SQLPERF*     pSQLPERF;
SQLINTEGER   nValue;

// See if you are already logging. SQLPERF* will be NULL if not.
SQLGetConnectAttr(hDbc, SQL_COPT_SS_PERF_DATA, &pSQLPERF,
    sizeof(SQLPERF*), &nValue);

if (pSQLPERF == NULL)
    {
    // Set the performance log file name.
    SQLSetConnectAttr(hDbc, SQL_COPT_SS_PERF_DATA_LOG,
        (SQLPOINTER) "\\My LogDirectory\\MyServerLog.txt", SQL_NTS);

    // Start logging...
    SQLSetConnectAttr(hDbc, SQL_COPT_SS_PERF_DATA,
        (SQLPOINTER) SQL_PERF_START, SQL_IS_INTEGER);
    }
else
    {
    // Take a snapshot now so that your performance statistics are discernible.
    SQLSetConnectAttr(hDbc, SQL_COPT_SS_PERF_DATA_LOG_NOW, NULL, 0);
    }

    // ...perform some action...

// ...take a performance data snapshot...
SQLSetConnectAttr(hDbc, SQL_COPT_SS_PERF_DATA_LOG_NOW, NULL, 0);

    // ...perform more actions...

// ...take another snapshot...
SQLSetConnectAttr(hDbc, SQL_COPT_SS_PERF_DATA_LOG_NOW, NULL, 0);

// ...and disable logging.
SQLSetConnectAttr(hDbc, SQL_COPT_SS_PERF_DATA,
    (SQLPOINTER) SQL_PERF_STOP, SQL_IS_INTEGER);

// Continue on...