C# LINQ 存储过程

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

我有一个 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);
    }
}

所有记录后:

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

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

最佳答案

也许有一些选择:

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

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

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

关于C# LINQ 存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6442067/

相关文章:

sql - RAISERROR WITH NOWAIT 缓冲的解决方法

C# Activator.CreateInstance() 丢弃 "Cannot create an abstract class"异常

c# - 通过C#生成表格(html表格)——如何生成 'th'标签?

c# - 有生成图形轮廓的算法吗?

c# - 与 Linq 中的 group by 不同

c# - 获取两次之间的记录列表 C# Linq To Entities

c# - Linq 到 XML : Get all nodes that contain certain children

sql - 如何自动启动 SQL Server 代理作业

sql-server-2008 - 在 SQL Server 2008 上使用 SSRS Report Builder 2.0 计算字段的行总计

c# - 将 C# mono 用于 android 或 java?