Я пытаюсь написать службу в CBuilder 6 (целевая XP Pro). Часть работы этой службы - отслеживать и обновлять таблицу в базе данных. Мы используем прямой ODBC для подключения к базе данных, но проблема также происходит с ADO, поэтому мы будем использовать это для упрощения.Нет подключения к базе данных изнутри службы Windows
Вы можете увидеть мой код ниже. Это вызывается из функции, которая выполняется в событии ServiceStart.
Моя проблема в том, что я не могу установить соединение. В нашей базе данных MSSQL используется проверка подлинности домена, поэтому я попытался запустить службу, используя мою учетную запись домена. Я также попытался явно указать имя пользователя и пароль для домена, но это тоже не работает (в свойствах для службы, вход в систему).
Может ли кто-нибудь помочь мне в этом? Ничего вообще не оценено.
Другой вопрос, который у меня есть, - как отладить сервис? У меня установлен удаленный отладчик. Я создаю процесс, используя что-то вроде 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.
Можете ли вы, чтобы ваш блок исключений регистрировал детали исключения? Или, может быть, у вас есть эта информация. уже и может опубликовать его? Это поможет устранить неполадки. –
Hi JP. Спасибо за ваш комментарий. На самом деле я не получаю исключение (это странно). Я изменил код (см. Ниже), чтобы включить еще несколько msgbox, и единственный, который я вижу, является первым - попыткой подключения. ShowMessage («Попытка входа»); TADOConnection * DB = новое TADOConnection (NULL); try { ShowMessage ("1"); DB-> ConnectionString = ""; ShowMessage ("2"); DB-> Connected = true; ShowMessage ("Connected"); } \t catch (Исключение и исключение) \t { ShowMessage (exception.Message); ShowMessage («Не подключен»); \t} Любые идеи? Спасибо! Stu. – 2009-06-19 00:22:09
(Я буду вставлять это снова в свой исходный вопрос, поскольку reponses dont format very well: /) – 2009-06-19 00:22:48