我编写了一个从本地数据库获取数据并执行函数的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的任何想法吗?
答案 0 :(得分:1)
这是因为da1.Fill(ds)失败并出现异常。如果有任何异常细节,请检查事件日志。看看你的代码, 1)无需打开和关闭连接,因为适配器为您执行此操作, 2)处理方法应在您关闭后。 3)使用"使用"数据库对象的范围,它将隐式处理dispose。
最后,请勿在服务启动时执行此操作。服务启动实际上是用于任何初始化,应尽快返回。产生一个线程来执行任何其他活动。
答案 1 :(得分:0)
您在评论中说您使用的是Windows身份验证,并且您的服务可能在本地系统帐户下运行。使用SQL server authentichation或设置服务在您的Windows帐户下运行。
转到“服务”,然后转到“服务”属性,然后在“登录”选项卡上选择您的Windows用户: