【问题标题】:C# LINQ Stored ProcedureC# LINQ 存储过程
【发布时间】:2011-06-22 15:03:42
【问题描述】:

我有一个通过 LINQ 与 SQL Server 2008 数据库通信的 C# windows 服务。在 LINQ 中,我定义了一些存储过程。我的服务基本上每隔几分钟就会唤醒一次,并在数据库中查找要处理的内容。在处理时,对于每条新记录,它都会运行一个存储过程。处理完所有记录后,它会运行另一个存储过程。我有一个非常奇怪的问题。对于第一个存储过程(使用每条记录运行),一切正常。该过程被调用,正常运行,并且代码在调用之后继续。对于第二个过程(运行一个处理的所有记录),服务只是挂起。我没有收到错误消息,它没有崩溃,它似乎仍在运行,但在我重新启动服务之前它永远不会做任何事情。如果我在 SQL Server Management Studio 中手动运行该过程,它会正确执行并完成。我希望有人知道这里发生了什么。

在每条记录的循环内:

if (Settings.Default.SQLSpatialEnabled)
{
    try
    {
        if ((bool) f.sdrFaultType.TripFault)
        {
            DataContext.sp_locateFault ((int) f.ID);
        }
    }
    catch (Exception ex)
    {
        Logger.Logger.Trace ("Locate fault (" +
                             f.ID +
                             ") exception: " + 
                             ex.Message);
    }
}

毕竟记录:

if (Settings.Default.SQLSpatialEnabled)
{
    DataContext.sp_mapFaults ();
    Logger.Logger.Trace ("Faults Mapped");
}

“故障映射”从未出现在日志中,一切都基本停止。

【问题讨论】:

  • 你能显示你用来调用存储过程的代码吗?

标签: c# linq sql-server-2008 linq-to-sql windows-services


【解决方案1】:

也许有几个选项:

  • 确实使用分析器来查看您的 SP 是否正在执行;

  • 如果正在执行,可能是锁定问题或处理时间过长(手动执行和 Linq 执行之间的执行计划不同?)

  • 如果它没有被执行,在之前添加一个 Logger.Logger.Trace DataContext.sp_mapFaults () 确定您到达那里并将 DataContext.sp_mapFaults () 包装在 try-catch 中,以便查看是否发生了一些异常

【讨论】:

    【解决方案2】:

    您可以启动 SQL Server Profiler 以查看传递到过程中的参数(假设有参数)并查看是否是挂起的。

    更新

    确保Settings.Default.SQLSpatialEnabled 为真?

    尝试取出所有其他代码,看看 SP 是否自行运行?

    尝试将调用包装在 try...catch 中,就像在循环中一样。也许有些东西被抛出而没有报告?

    【讨论】:

    • 遗憾的是没有参数。
    • 至少在 Profiler 中你可以看到你的 SP 正在被执行。
    【解决方案3】:

    您是否对所有查询都使用静态 DataContext?您是否尝试过为循环中的每个调用使用单独的 DataContexts?

    【讨论】:

    • 请问有什么好处?我使用的是静态的,这样我就不必不断地重新创建对象。
    • LINQ 数据上下文是短暂的。其他人可以提供比我更雄辩的描述,因此请尝试搜索其他信息。我问的原因是我在尝试通过 Windows 服务进行 LINQ 调用时遇到了类似的情况。通过更改 LINQ 调用的结构,我能够解决该问题。我的建议只是一种预感。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-21
    • 2012-08-14
    • 2013-05-03
    • 2017-05-07
    • 1970-01-01
    相关资源
    最近更新 更多