C#LINQ存储过程

Nik*_*Nik 6 c# linq windows-services sql-server-2008 linq-to-sql

我有一个C#windows服务,通过LINQ与SQL Server 2008数据库通信.在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);
    }
}
Run Code Online (Sandbox Code Playgroud)

毕竟记录:

if (Settings.Default.SQLSpatialEnabled)
{
    DataContext.sp_mapFaults ();
    Logger.Logger.Trace ("Faults Mapped");
}
Run Code Online (Sandbox Code Playgroud)

"故障映射"从未显示在日志中,一切基本上都停止了.

Ple*_*eun 1

也许有几个选择:

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

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

  • 如果未执行,请在 DataContext.sp_mapFaults () 之前添加 Logger.Logger.Trace 以确保您已到达那里并将 DataContext.sp_mapFaults () 包装在 try-catch 中,以便查看是否发生了某些异常