![](/img/trans.png)
[英]How to Synchronize Windows Service Access to SQL Server Database on Startup?
[英]How to access a SQL database from a Windows service?
我正在嘗試為 Windows 10(64 位)開發一個 Windows 服務,它打算定期在本地 MS SQL Server(v.11)中插入記錄。
它安裝並運行成功,但沒有插入任何記錄。 我嘗試了System.Timers.Timer
和System.Threading.Timer
。
我還嘗試在服務啟動事件上插入。 但這也不起作用。
這是我的代碼:
public partial class Service1 : ServiceBase
{
// System.Timers.Timer timer;
System.Threading.Timer threadTimer;
public Service1()
{
InitializeComponent();
}
//UPDATE: I checked the following method code in a console application. It works fine.
private void InsertRecord()
{
try
{
using (SqlConnection connection = new SqlConnection("Server=.;Database=TestDb; Trusted_Connection=True;"))
{
using (SqlCommand command = new SqlCommand())
{
command.Connection = connection;
command.CommandText = "Insert into .....')";
connection.Open();
command.ExecuteNonQuery();
connection.Close();
}
}
}
catch (Exception ex)
{
}
}
protected override void OnStart(string[] args)
{
InsertRecord(); //This line not executed also.
TimeSpan tsInterval = new TimeSpan(0, 2, 0); //2 minute interval.
threadTimer = new Timer(new TimerCallback(threadTimer_Elapsed)
, null, tsInterval, tsInterval);
//timer = new System.Timers.Timer();
//timer.Interval = 10000;
//timer.Elapsed += Timer_Elapsed;
//timer.Enabled = true;
//timer.Start();
}
private void threadTimer_Elapsed(object state)
{
InsertRecord();
}
//private void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
//{
// InsertRecord()
//}
protected override void OnStop()
{
threadTimer.Change(Timeout.Infinite, Timeout.Infinite);
threadTimer.Dispose();
threadTimer = null;
//timer.Stop();
}
}
我在這里錯過了什么?
更改服務上的運行方式設置以作為您自己的個人帳戶運行。 這將提供與您的控制台測試相同的安全環境。 這將允許服務權限登錄到 SQL Server。
然后將服務更改為“本地系統”或類似服務,它將失敗 - 您需要授予“本地系統”訪問數據庫的權限。
此外 - 一個空的 Catch 塊是您發布到 SO 的原因 - 如果您編寫了最簡單的錯誤處理程序和記錄器,您將得到答案。
您沒有提供有關連接字符串的大量信息,但正如@NightOwl888 指出的那樣,問題可能與您使用Trusted_Connection=True 有關。
如果您使用 Sql 身份驗證(而不是 Windows 身份驗證)連接到 Sql 服務器,我相信您需要設置Trusted_Connection=False 。
這應該允許使用您的連接字符串憑據(而不是機器名稱/Windows 服務帳戶/等)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.