作者:迷路的小孩w | 来源:互联网 | 2024-12-28 10:30
本文探讨了在Windows10(64位)环境下开发的Windows服务,旨在定期向本地MSSQLServer(v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。
我们正在为Windows 10(64位)开发一个Windows服务,该服务的目标是定期将记录插入到本地的MS SQL Server (v.11)中。
虽然服务已成功安装并正常运行,但记录并未被正确插入。我们尝试使用了System.Timers.Timer和System.Threading.Timer,但均未见效果。此外,我们在服务启动时也尝试插入记录,但同样没有成功。
以下是代码示例:
public partial class Service1 : ServiceBase
{
System.Threading.Timer threadTimer;
public Service1()
{
InitializeComponent();
}
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();
TimeSpan tsInterval = new TimeSpan(0, 2, 0); // 每两分钟执行一次
threadTimer = new Timer(new TimerCallback(threadTimer_Elapsed), null, tsInterval, tsInterval);
}
private void threadTimer_Elapsed(object state)
{
InsertRecord();
}
protected override void OnStop()
{
threadTimer.Change(Timeout.Infinite, Timeout.Infinite);
threadTimer.Dispose();
threadTimer = null;
}
}
您可能遗漏了哪些关键点?
解决方法之一是在SQL Server中授予NT AUTHORITY\SYSTEM以sysadmin服务器角色权限。具体步骤如下:
- 打开SQL Server Management Studio。
- 连接到您的SQL Server实例。
- 导航至“安全性”->“登录名”,找到并选择“NT AUTHORITY\SYSTEM”。
- 右键单击并选择“属性”,然后在“服务器角色”选项卡中勾选“sysadmin”。
确保您的服务具有足够的权限来访问和操作数据库,并且在代码中添加适当的异常处理和日志记录,以便更好地调试潜在问题。