由于DataAdapter.Fill()而无法启动Windows服务

时间:2015-07-20 19:08:29

标签: c# windows-services sqldataadapter

我编写了一个从本地数据库获取数据并执行函数的Windows服务。为了连接到数据库,我编写了以下代码

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);包含在代码中,服务无法启动。 我在Web应用程序中尝试了相同的代码并且工作正常。 这是我在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();

服务运作良好。 我尝试搜索问题,但没有找到相关的解决方案。 请帮忙。提前致谢。

如果需要请求清晰。

编辑:有关使用datareader的任何想法吗?

2 个答案:

答案 0 :(得分:1)

这是因为da1.Fill(ds)失败并出现异常。如果有任何异常细节,请检查事件日志。看看你的代码, 1)无需打开和关闭连接,因为适配器为您执行此操作, 2)处理方法应在您关闭后。 3)使用"使用"数据库对象的范围,它将隐式处理dispose。

最后,请勿在服务启动时执行此操作。服务启动实际上是用于任何初始化,应尽快返回。产生一个线程来执行任何其他活动。

答案 1 :(得分:0)

您在评论中说您使用的是Windows身份验证,并且您的服务可能在本地系统帐户下运行。使用SQL server authentichation或设置服务在您的Windows帐户下运行。

转到“服务”,然后转到“服务”属性,然后在“登录”选项卡上选择您的Windows用户:

enter image description here