2

ADOを使用してlocaldbインスタンスに接続しようとしているネイティブC++アプリがあります。インスタンスを手動で起動すると、実行sqllocaldb info v11.0してデータベースインスタンスが実行されていることを確認できます。

私のコードは次のとおりです。

ADO::_ConnectionPtr spConnection (__uuidof (ADO::Connection));
spConnection->Open (L"Provider=SQLNCLI11;Server=(localdb)\\v11.0;Integrated Security=true", L"", L"", 0);

エラーコードはDB_E_ERRORSOCCURRED(0x80040e21)であり、エラーメッセージは複数ステップのOLEDB操作で生成されたエラーです。可能な場合は、各OLEDBステータス値を確認します。作業は行われませんでした。

SQL Server Management Studioを使用してデータベースに正常に接続でき、接続文字列にプロバイダーを使用する場合と使用しない場合の両方で、初期カタログを指定して試してみました。

4

2 に答える 2

1

問題が見つかりました。セキュリティはsspi以下のように設定する必要があります。

ADO::_ConnectionPtr spConnection (__uuidof (ADO::Connection));
spConnection->Open (L"Provider=SQLNCLI11;Server=(localdb)\\v11.0;Integrated Security=SSPI", L"", L"", 0);
于 2012-07-10T14:31:45.733 に答える
0

ADO接続オブジェクトには、これまでに発生したエラーのリストを保持するErrorコレクションがあります。これらのエラーを調べて、何が問題になっているのかを確認できます。通常、SQLServerへの接続中に2つの問題が発生する可能性があります。1.ログインに失敗しました。2.SQL Serverは、リモートで接続できるように構成されていません。ローカルサーバーに接続しようとしているので、それが2番目の理由になることはほとんどありません。SQL Serverに関しては、WindowsとSQL Serverの2種類の認証があります。それぞれがSQLServerオプションで設定されている場合は、サームの1つを使用でき、混合モードが選択されている場合は、両方を使用できます。 。接続文字列に応じて、Windowsモード認証を使用しているため、SQLServerにログインできるWindowsユーザーを使用してログインする必要があります。■SQLServerの場合はそうではない場合は、接続文字列にSQLユーザー資格情報を指定する必要があります。とにかく、接続オブジェクトのErrorコレクションをチェックして、ローカルデータベースに他に問題があるかどうかを確認します。

于 2012-07-09T21:52:39.113 に答える