2009-06-18 8 views
2

私はCBuilder 6(ターゲットXP Pro)にサービスを書き込もうとしています。このサービスの仕事の一部は、データベース上のテーブルを監視して更新することです。直接ODBCを使用してデータベースに接続しますが、問題はADOでも発生しています。そのため簡単に使用します。Windowsサービス内からのデータベース接続がありません

以下のコードを見ることができます。これは、ServiceStartイベントで実行される関数から呼び出されます。

私の問題は、接続できないということです。私たちのMSSQL DBはドメイン認証を使用しているので、自分のドメインアカウントを使ってサービスを実行しようとしました。私は明示的にドメイン\ユーザー名とパスワードを定義しようとしましたが、どちらも機能しません(サービスのプロパティで、ログオンタブで)。

誰もがこれを手伝ってくれますか?何でも感謝しています。

もう1つの質問は、サービスをどのようにデバッグするのでしょうか?リモートデバッガがインストールされています。私はrundll32.exeなど何かを使ってプロセスを生成しますか?繰り返しますが、どんな助けもありがたいです。

多くの先行ありがとう

Stu。

コードスニペット:

TADOConnection* DB = new TADOConnection(this); 
    try 
    { 
    DB->ConnectionString = "Provider=MSDASQL.1;Password=password;Persist Security Info=True;User ID=usernamej;Data Source=datasource"; 
    DB->Connected = true; 

    returnValue = DB->Connected; 
    ShowMessage("Connected"); 
    } 
    catch (Exception &exception) 
    { 
    ShowMessage("Not COnnected"); 
    } 

注:ConnectionStringプロパティが唯一の指標であり、変更、ユーザー名、パスワード、およびデータベースを持っています。この文字列をスタンドアロンアプリケーションで使用すると、一貫性のある接続が確立され、クエリを使用してデータを取得できます。

こんにちはJP:JPに対応して


ご意見ありがとうございます。私は実際にここにスローされた例外を取得していません(これは奇妙です)。私はいくつかのmsgboxを追加するようにコードを修正しました(下を参照)。

ShowMessage("Attempting Login"); 
TADOConnection* DB = new TADOConnection(NULL); 
try { 
    ShowMessage("1"); 
    DB->ConnectionString = "<as before>"; 
    ShowMessage("2"); 
    DB->Connected = true; 
    ShowMessage("Connected"); 
} catch (Exception &exception) { 
    ShowMessage(exception.Message); 
    ShowMessage("Not COnnected"); 

} 

なぜ接続コンポーネントが作成されていないのかわかりません(私は、これから所有者をNULLに変更しようとしました。

ありがとうございます!

Stu。

+0

例外の詳細をログに記録することはできますか?あるいは、あなたはその情報を持っているかもしれません。すでに投稿できますか?これはトラブルシューティングに役立ちます。 –

+0

こんにちはJP。ご意見ありがとうございます。 私は実際にここにスローされた例外を取得していません(これは奇妙です)。私はいくつかのmsgboxを追加するようにコードを修正しました(下を参照)。 ShowMessage( "Login Attempting"); TADOConnection * DB =新しいTADOConnection(NULL); try { ShowMessage( "1"); DB-> ConnectionString = ""; ShowMessage( "2"); DB-> Connected = true; ShowMessage( "Connected"); (例外および例外) } ShowMessage( "接続されていません"); \t} アイデア? ありがとう! Stu。 –

+0

(私は元の質問にそれを再度貼り付けます。回答は形式が非常にうまくいきません:/) –

答えて

0

実行しているのは、Windowsサービスのアクセス許可の問題です。

  • 本質的に、サービスは低い権限環境で動作します。

  • イベントログに記録することをお勧めします。

  • 生成されたウィンドウは、インタラクティブデスクトップが有効なローカルサービスとして実行する場合にのみ表示されます。

+0

suggetionsありがとうございます。私はどのようにイベントログを使用するかを検討してきましたが、これまで実際にそれを書いている幸運の多くはありませんでした。私はちょうど今それを試しています。 DBをローカルに持っていれば、この問題が解決されました。 DBはとにかくいつもサービスを利用していました(私は当時これを知らなかった)。 –

1

ドメイン認証を使用している場合、あなたは、接続文字列にユーザー名やパスワードを持っていなければならない:コンピュータが必要になりますhttp://www.connectionstrings.com/sql-server-2005

から

Server=myServerName\theInstanceName;Database=myDataBase;Trusted_Connection=True; 

あるいは適切なバリアントををドメインのメンバーにする必要があり、データベースサーバーはそのドメインを信頼する必要があります。このサービスは、コンピュータが属するドメインの下で実行されている必要があります。

+0

こんにちは。コメントありがとう。これはドメイン認証を使用していますが、接続文字列を試して、現在サービスレベルにあるユーザーを指定する必要があるかどうかを確認していました。乾杯! –

関連する問題