我正在尝试为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();
}
}
我在这里想念的是什么?
答案 0 :(得分:3)
答案 1 :(得分:0)
将服务上的“运行方式”设置更改为您自己的个人帐户。这将提供与控制台测试相同的安全环境。这将允许服务权限登录到SQL Server。
然后将服务更改为" Local System"或类似的,它将失败 - 你需要授予"本地系统"访问数据库的权限。
另外 - 一个空的Catch块是您发布到SO的原因 - 如果您编写了最简单的错误处理程序和记录器,您将获得答案。
答案 2 :(得分:0)
您没有提供很多有关连接字符串的信息,但正如@ NightOwl888指出的那样,问题可能与您使用 Trusted_Connection = True 有关。
如果您正在使用Sql身份验证(而不是Windows身份验证)连接到Sql服务器,我相信您需要设置 Trusted_Connection = False 。
这应该允许使用您的连接字符串凭据(而不是计算机名称/ Windows服务帐户/等)。