2015-07-20 3 views
0

Я написал службу Windows, которая берет данные из локальной базы данных и выполняет функцию. Чтобы подключиться к базе данных, я написал следующий код:Служба Windows не запускается из-за DataAdapter.Fill()

SqlConnection connstring1; 
      string conn1 = ConfigurationManager.ConnectionStrings["nameOfConnectionString"].ConnectionString.ToString(); 
      connstring1 = new SqlConnection(conn1); 
      connstring1.Open(); 
      string cmd = "Select [OrderId], [VendorId], [txtPaymentMethod] , [txtPaymentStatus], [Updated_On] FROM [Postmate_ Shopping].[dbo].[tbl_Order_Master] WHERE [txtPaymentMethod] = 'online' AND [txtPaymentStatus]= 'pending'"; 
      DataTable dt = new DataTable(); 
      DataSet ds = new DataSet(); 
      SqlDataAdapter da1 = new SqlDataAdapter(cmd, connstring1); 
      da1.Fill(ds); 
      da1.Dispose(); 
      connstring1.Close(); 

Код перед da1.Fill (ds); работает, и сервис устанавливается, но когда da1.Fill (ds); включен в код, сервис не запускается. Я пробовал один и тот же код в веб-приложении, и он работал нормально. Это то, что я получаю, когда da1.Fill (ds); Включено:

Служба «ScheduledService» на локальном компьютере началась, а затем остановлена. Некоторые службы автоматически останавливаются, если они не используются другими службами или программами.

Чтобы проверить, если служба работает должным образом я удалил выше код и заменить его с этим кодом:

FileStream fs = new FileStream(@"d:\ScheduledService.txt", 
FileMode.OpenOrCreate, FileAccess.Write); 
//set up a streamwriter for adding text 
StreamWriter sw = new StreamWriter(fs); 

//find the end of the underlying filestream 
sw.BaseStream.Seek(0, SeekOrigin.End); 

//add the text 
sw.WriteLine(content); 
//add the text to the underlying filestream 
sw.Flush(); 
//close the writer 
sw.Close(); 

служба работала нормально. Я попытался найти проблему, но не найдено соответствующего решения. Пожалуйста, помогите. Заранее спасибо.

Просите о ясности при необходимости.

EDIT: Любые мысли об использовании datareader?

+0

Вы уверены, что строка соединения является правильным, и что запрос выполняется против этой связи без ошибок? – StingyJack

+0

Да, тот же код, который я пробовал в веб-приложении, и который отлично работал.EDIT: он возвращает значения из базы данных. – ashwinx

+0

Используете ли вы пользователей Windows для подключения к БД? –

ответ

1

Это потому, что da1.Fill (ds) является ошибкой с исключением. Проверьте журнал событий, если есть какие-либо сведения об исключении. Глядя на ваш код, 1) Не нужно открывать и закрывать соединение, так как адаптер делает это за вас, 2) Метод удаления должен быть после вашего закрытия. 3) Используйте область «using» для ваших объектов БД, которые будут неявно позаботиться об утилизацию.

И, наконец, не делайте этого при запуске службы. Начало службы действительно для любой инициализации и должно возвращаться как можно скорее. Создайте нить для выполнения любых других действий.

+0

Чтобы проверить журнал событий, я перешел на ** Просмотр событий >> Windows Logs >> System **. Я проверил записи в разделе ** Service Control Manager **, и было детально указано следующее: ** Время ожидания (30000 миллисекунд) было достигнуто в ожидании ответа транзакции от службы Service1. ** – ashwinx

+0

И открытие и закрытие соединений и использование dispose были отчаянными попытками заставить код работать: P. – ashwinx

+0

okie, который разъясняет, что ваш код sql имеет исключение. Попробуйте выполнить код в консольном приложении и убедитесь, что соединение работает нормально. – XtremeBytes

0

Вы сказали в комментариях, что используете Аутентификацию Windows, и ваша служба, вероятно, работает под учетной записью «Локальная система». Используйте аутентификацию SQL-сервера или настройте службу для запуска под учетной записью Windows.

Перейти к службам, то ваши свойства услуг и на вкладке Вход в систему выберите пользователя окна:

enter image description here

+0

Хорошо, я попробую. Thanks – ashwinx

+0

Можете ли вы предложить изменения, которые мне придется сделать? – ashwinx

+0

СПАСИБО ТОНН !!!! Это сработало. – ashwinx

 Смежные вопросы

  • Нет связанных вопросов^_^