仕様: | DB2 CLI 2.1 | ODBC 1.0 | ISO CLI |
SQLConnect() は、ターゲット・データベースへの接続を確立します。
接続ハンドルは、この関数の呼び出し前に、SQLAllocHandle() を使用 して割り当てる必要があります。
この関数は、SQLAllocHandle() を使用してステートメント・ハンドルを 割り当てる前に呼び出す必要があります。
構文
SQLRETURN SQLConnect ( SQLHDBC ConnectionHandle, /* hdbc */ SQLCHAR *FAR ServerName, /* szDSN */ SQLSMALLINT NameLength1, /* cbDSN */ SQLCHAR *FAR UserName, /* szUID */ SQLSMALLINT NameLength2, /* cbUID */ SQLCHAR *FAR Authentication, /* szAuthStr */ SQLSMALLINT NameLength3); /* cbAuthStr */
関数の引き数
データ・タイプ | 引き数 | 用途 | 説明 |
---|---|---|---|
SQLHDBC | ConnectionHandle | 入力 | 接続ハンドル。 |
SQLCHAR * | ServerName | 入力 | データベースの場所と名前。名前はオプショナル。名前は、DB2 Everyplace では無視。 |
SQLSMALLINT | NameLength1 | 入力 | ServerName 引き数の内容の長さ。 |
SQLCHAR * | UserName | 入力 | 許可名 (ユーザー ID)。このストリングは、暗号化で使用します。 それ以外の場合、DB2 Everyplace はこれを無視します。 |
SQLSMALLINT | NameLength2 | 入力 | UserName 引き数の内容の長さ。 |
SQLCHAR * | Authentication | 入力 | 認証ストリング (パスワード)。このストリングは、暗号化で使用します。 それ以外の場合、DB2 Everyplace はこれを無視します。 |
SQLSMALLINT | NameLength3 | 入力 | Authentication 引き数の内容の長さ。 |
注意事項
未登録 ユーザー (DB2eSYSUSERS 表に存在しないユーザー) が、SQLGetDiagRec() CLI 関数の呼び出し中に暗号化された DB2 Everyplace データベースへ接続しようとすると、このユーザーは警告メッセージ 42704 (オブジェクトが未定義) を受け取ります。 登録済み ユーザーは、この警告を受け取りません。 対照的に、SQLConnect() 関数の呼び出し中には未登録ユーザーと登録済みユーザーの両者がデータベースに接続でき、 警告メッセージも受け取りません。
使用法
SQLConnect() を使用して、異なる場所のデータ・ソースを接続することができます。
ローカル・デバイスのデータ・ソースにアクセスするには、ServerName 引き数にデータ・ソース名を設定します。 DB2 Everyplace はデータ・ソース名を無視し、ローカル・データ・ソースにアクセスします。
2 次ストレージ装置を使用するアプリケーションの場合、引き数 ServerName には、DataSource の位置を指す ストリングを入れることができます。DataSource は、ローカルにあるかまたは IBM マイクロドライブ、Sony メモリー・スティック、 コンパクト・フラッシュ、SD メモリー・カード、MultiMediaCard のような 2 次ストレージ装置にあります。ServerName ストリングの形式は、次のとおりです。
ServerName=Device:/Path/DataSource
ServerName=#:/storage/
DB2 Everyplace は、最初の CF スロットに入っている IBM マイクロドライブの storage ディレクトリーにある DataSource に接続します。
ServerName=dir1/dir2/DATA1
リモート照会およびストアード・プロシージャー・アダプターを使用してリモート・ストアード・プロシージャーに アクセスするには、ServerName 引き数を使用してデータベースの場所と名前を指定します。 リモート照会およびストアード・プロシージャー・アダプターを使用して リモート・データベースにアクセスするアプリケーションの場合、 引き数 ServerName には以下の URL 形式を入れることができます。
http://IPAddress:portNumber/path?DB=DataSourceIPAddress および Authentication は必須です。
標準的なファイル・システムではなく、Windows CE のオブジェクト記憶を使用している場合は、以下のいずれかの手順を実行します。
または
Windows CE のオブジェクト記憶には、「ディレクトリー」という概念はありません。 オブジェクト記憶を使用している場合、ユーザーは表の作成先のディレクトリー、 つまりパスを指定することはできません。 オブジェクト記憶内のすべての表は、同じネーム・スペースに作成されます。 こうした制限から、オブジェクト記憶への複数の同時接続は確立できません。 接続のシリアライゼーションを目的としたロック・ファイルが、 ファイル・システムのルート・パスに作成されます。
オブジェクト記憶を使用している場合は、標準的なファイル・システムの場合とは異なり、DB2 Everyplace ファイルを手動で削除することはできません。
例
ローカルの c:¥dir1¥dir2¥ にあるデータ・ソースに接続します。 データ・ソース名 DS1 は無視されます。
ServerName=c:/dir1/dir2/DS1
ローカルの /dir1/dir2/ にあるデータ・ソースに、UNIX のファイル・システム表記で接続します。
ServerName=/dir1/dir2/
アプリケーション・パスから見て、ローカルの dir1¥ ディレクトリーにあるデータ・ソースに接続します。 アプリケーションが c:¥myapp¥ にある場合は、c:¥myapp¥dir1¥ データ・ソースがアクセスされます。
ServerName=dir1¥
2 次ストレージ・スロット 1 に入っているストレージ・メモリーの /dir1/ ディレクトリーにある データ・ソースに接続します。
ServerName=#1:/dir1/
リモート照会およびストアード・プロシージャー・アダプターを使用して、DB2 Everyplace 同期サーバー 192.168.0.1 のポート 8080 でデータベース mysample に接続します。
ServerName= http://192.168.0.1:8080/db2e/servlet/com.ibm.mobileservices.adapter .agent.AgentServlet?DB=mysample
Windows CE のストレージを使用して、データ・ソースに接続します。
ServerName=@:¥
接続のシリアライゼーション
接続のシリアライゼーションについては、接続のシリアライゼーションを参照してください。
接続の認証
データベースの暗号化には、基礎となるユーザー認証が必要です。 DB2 Everyplace では、UserName および Authentication を使用して、接続時にユーザーの認証を実行します。
認証は次のように行われます。SQLConnect の接続先のデータベースに DB2eSYSUSERS カタログ表が存在しない場合、UserName と Authentication の情報は無視されます。DB2 Everyplace では登録済み ユーザーと未登録 ユーザーとを区別しています。 登録済みユーザーとは、GRANT SQL ステートメントを使用して追加された DB2eSYSUSERS 表にリストされているユーザーのことです。接続時において、DB2eSYSUSERS 表が存在し、UserName が登録済みユーザーのものであれば、認証は行われます。 Authentication パラメーターに指定されたパスワードが正しくない場合は、エラー (42505) が戻されます。 UserName が未登録である場合は、SQLConnect 関数は正常に実行されます。ただし、後続の SQLGetDiagRec への呼び出しでは、警告 42704 (オブジェクトが未定義) が戻されます。 これにより、正常に接続している登録済みユーザーと正常に接続された未登録ユーザーとの区別が、アプリケーションで可能となります。 詳しくは、ローカル・データ暗号化の概要、DB2eSYSUSERS、およびGRANTを参照してください。
戻りコード
診断
SQLSTATE | 説明 | 解説 |
---|---|---|
08001 | データ・ソースに接続できない。 | DB2 CLI がデータ・ソース (サーバー) との接続を確立できない。 |
08002 | 接続が使用中。 | 指定した ConnectionHandle が、データ・ソースとの接続を確立するため にすでに使用されていて、その接続がまだオープンされている。 |
08004 | アプリケーション・サーバーが接続の確立をリジェクトした。 | データ・ソース (サーバー) が接続の確立をリジェクトした。 |
58004 | 予期しないシステム障害。 | 回復不能なシステム・エラー。 |
HY001 | メモリーの割り振りの失敗。 | DB2 CLI が、関数の実行または完了のサポートに必要なメモリーを 割り当てることができない。 |
HY013 | 予期しないメモリー処理エラー。 | DB2 CLI が、関数の実行または完了のサポートに必要なメモリーに アクセスできない。 |
HY501 | DataSource 名が無効。 | 指定された DataSource 名が無効。 |
HYT00 | 接続がタイムアウトになった。 | アプリケーションがデータ・ソースへの接続を確立する前に、タイムアウト期間を過ぎた。 タイムアウト期間は、SQLSetConnectAttr() の SQL_ATTR_LOGIN_TIMEOUT 属性を使用して設定することができる。 このエラーは、データベースが他のアプリケーションによって使用中の場合に戻される。 |
制約事項
SQL ステートメントの実行前に、SQLConnect() を呼び出す必要があります。
関連した概念
関連した解説