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)
"故障映射"从未显示在日志中,一切基本上都停止了.
也许有几个选择:
确实使用探查器来查看您的 SP 是否正在执行;
如果正在执行,可能是锁定问题或处理时间过长(手动执行和 Linq 执行之间的执行计划不同?)
如果未执行,请在 DataContext.sp_mapFaults () 之前添加 Logger.Logger.Trace 以确保您已到达那里并将 DataContext.sp_mapFaults () 包装在 try-catch 中,以便查看是否发生了某些异常
| 归档时间: |
|
| 查看次数: |
1844 次 |
| 最近记录: |