本地计算机上的c#服务启动后停止
我是新来的。 我使用c#创建了一个windows服务来连接mySQL数据库。当我运行该服务时,它会给我如图中所示的错误,并且不会更改数据库中的任何内容。 这是我的代码:本地计算机上的c#服务启动后停止,c#,mysql,windows-services,C#,Mysql,Windows Services,我是新来的。 我使用c#创建了一个windows服务来连接mySQL数据库。当我运行该服务时,它会给我如图中所示的错误,并且不会更改数据库中的任何内容。 这是我的代码: namespace WindowsService1 { public partial class Watcher : ServiceBase { public Watcher() { InitializeComponent(); }
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");
}
}
错误如下图所示
谢谢你的帮助
错误是因为您没有正确编码服务的使用。但这不是你在这件事上的主要问题。这是一个假阳性,您仍然需要找到潜在的错误 对于Windows服务,
OnStart
方法应仅用于启动进程,而不是实际运行任何将自行处理的代码
服务在其生命周期中具有以下状态
protected override void OnStart(string[] args)
{
var task = Task.Run(() =>{
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/
}
您需要编写将错误输出到调试日志文件或类似文件的方法。写入中的代码是否引发异常?将其包装在一个
try/catch
中,看看会发生什么。如@DavidG所示,您很可能遇到异常-请使用try/catch或检查windows事件日志中的异常。我试图检查windows事件日志,但出现以下错误:服务无法启动。MySql.Data.MySqlClient.MySqlException(0x80004005):您的SQL语法有错误;检查与您的MariaDB服务器版本相对应的手册,以了解使用第1行的near'-values SET BENEL_to='Doaa''的正确语法。谢谢,错误与查询的语法有关。@Doaa是的,就像我说的,您发布的错误是误报。但请注意上面的代码,因为您误用了服务的OnStart方法,并且您还有其他错误,例如未关闭Db连接、SQL注入不安全等,这将在以后导致您出现问题。如果不在本代码中,则在下一个项目中!是的,你是对的,当然,我的代码没有以良好的方式实现,但我以前有很多问题,我写代码只是为了尝试小查询而不关闭连接。关于onStart方法,在它里面我称之为write()方法,这不是一个好方法吗!?如果我有两个连接,对于两个数据库,例如first connection,我将运行查询以获取值,然后使用second connection将该值插入第二个数据库。你知道我怎么做吗?