这是我的新员工。 我使用c#创建Windows服务以连接到mySQL数据库。当我运行该服务时,它给了我如图所示的错误,并且没有更改数据库中的任何内容。 这是我的代码:
namespace WindowsService1
{
public partial class Watcher : ServiceBase
{
public Watcher()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
Write();
}
protected override void OnStop()
{
}
public void Write()
{
MySqlConnection connection = new MySqlConnection("Host=--;User=--;Password=--;Database=--;Convert Zero Datetime=True");
connection.Open();
var command = connection.CreateCommand();
command.CommandType = System.Data.CommandType.Text;
command.CommandText = " UPDATE messured-values SET belong_to = 'Doaa'";
command.ExecuteNonQuery();
Console.WriteLine("done");
}
}
和错误,如下图所示 谢谢您的帮助。
答案 0 :(得分:1)
该错误是因为您未正确编码服务的使用。但这不是您的主要问题。这是一个误报,您仍然需要找到潜在的错误。
对于Windows服务,OnStart
方法应仅用于启动进程,而不能实际运行将自行处理的任何代码。
服务在其生命周期中具有以下状态
OnStart方法应将服务从“已停止”或“已暂停”(如果支持)状态移动到“正在运行”状态,并应很快返回。
所以第一件事就是将代码移到单独的线程中。即使只执行一次。
protected override void OnStart(string[] args)
{
var task = Task.Run(() =>{
Write();
});
}
然后更新您的Write方法以捕获异常,使用参数,然后记录错误
try
{
using (MySqlConnection connection = new MySqlConnection("Host=--;User=--;Password=--;Database=--;Convert Zero Datetime=True"))
{
connection.Open();
using (var command = connection.CreateCommand())
{
command.CommandType = System.Data.CommandType.Text;
command.CommandText = " UPDATE messured-values SET belong_to = @belong";
command.Parameters.Add("@belong", SqlDbType.VarChar).Value = "Doaa";
command.ExecuteNonQuery();
}
connection.Close();
}
}
catch(Exception e)
{
//Log e.Message to a Log output file for debug purposes/
}
您需要编写将错误输出到调试日志文件或类似文件的方法。