gpt4 book ai didi

c# - c# Windows 服务中的数据库查询 - 执行无提示地失败

转载 作者:行者123 更新时间:2023-11-30 16:57:00 26 4
gpt4 key购买 nike

** 警告 - c# 新手 **

我正在尝试拼凑一个查询 MSSQL 数据库的 Windows 服务。

我已经创建了基本服务并确认它可以写入事件日志。

我添加了一个 ADO.NET 实体数据模型并从我的数据库元数据生成了类。

在我的服务的周期性 OnTimer 方法中,我有以下代码:

    public void OnTimer(object sender, System.Timers.ElapsedEventArgs args)
{
// TODO: Insert monitoring activities here.
eventLog1.WriteEntry("Monitoring the System 1", EventLogEntryType.Information, eventId++);

using (var db = new LcsCDREntities())
{
eventLog1.WriteEntry("about to query", EventLogEntryType.Information, eventId++);

var query = from c in db.ConferenceSessionDetailsViews
orderby c.SessionIdSeq
select c;

eventLog1.WriteEntry("there are " + query.Count().ToString(), EventLogEntryType.Information, eventId++);

foreach (var item in query)
{

eventLog1.WriteEntry("Conference data: " + item.SessionIdTime.ToString(), EventLogEntryType.Information, eventId++);
}
}

}

在事件日志中,我只看到“Monitoring the System 1”和“about to query”。我从来没有看到“有”……或“ session 数据”。我无法在调试器中运行我的代码,因为它是 Windows 服务,我依靠事件日志语句来确定执行停止的位置。我在事件日志中没有看到任何错误或异常,似乎执行在查询时或查询之前停止。

请任何人都可以建议:1、为什么我在“即将查询”之后从来没有看到日志语句2. 我还可以如何观察/调试此过程的执行

最佳答案

回答您的问题:

  1. 您永远不会看到任何进一步的条目,因为发生了一些特定于数据库的异常,但您的代码没有捕获到这些异常。必须通过对 #2 的回答来确定确切的错误。

  2. 确定发生了什么的方法是将整个方法包装在 try/catch block 中,并将异常消息(以及用于生产目的的堆栈跟踪)记录到事件日志中。如果您正在调试,您可以在 catch 语句中设置一个断点,以查看到底发生了什么。

    public void OnTimer(object sender, System.Timers.ElapsedEventArgs args)
    {
    try
    {
    // TODO: Insert monitoring activities here.
    eventLog1.WriteEntry("Monitoring the System 1", EventLogEntryType.Information, eventId++);

    using (var db = new LcsCDREntities())
    {
    eventLog1.WriteEntry("about to query", EventLogEntryType.Information, eventId++);

    var query = from c in db.ConferenceSessionDetailsViews
    orderby c.SessionIdSeq
    select c;

    eventLog1.WriteEntry("there are " + query.Count().ToString(), EventLogEntryType.Information, eventId++);

    foreach (var item in query)
    {

    eventLog1.WriteEntry("Conference data: " + item.SessionIdTime.ToString(), EventLogEntryType.Information, eventId++);
    }
    }
    }
    catch (Exception ex)
    {
    eventLog1.WriteEntry("Exception: " + ex.Message, EventLogEntryType.Error);
    }
    }

我强烈建议看一下 Microsoft 的 Exception Handling Application Block .他们不仅在异常处理最佳实践方面提供了出色的指导,而且还包括您可以直接融入应用程序的完全烘焙的功能。

自从它首次推出(大约 10 年前)以来,我们一直在使用它,它为我们节省了大量时间并显着提高了我们应用程序的质量。

关于c# - c# Windows 服务中的数据库查询 - 执行无提示地失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27220565/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com