我有一个数据访问层,它通过执行存储过程返回数据集/数据表。几个月来一切都运行良好。但突然间我们开始收到以下错误。
System.ArgumentException;列 <ColumnName> 不属于表 <TableName>
我编写了一些额外的日志代码来解决这个问题。我很震惊地发现 SP 有时会返回意外的结果集。存储过程有时会返回 Windows 服务使用其他存储过程请求的结果。
我使用 Profiler 监控了 Sql Server 流量。当发生此错误时,Sql Profiler 没有显示我实际执行的 SP 的任何执行情况。很难重现此错误,因为它是随机发生的。
我们只在测试环境中遇到过这个问题。我们的测试环境运行的是 Windows 2003 Server 和 Sql Server 2005 Express Edition。
过去,我们使用 Sql Server 2005 Express 和 Standard Edition 对我们的应用程序运行了几次严格的负载测试,但从未遇到过此问题。
以前有人遇到过这样的问题吗?
答案1
如果 SQL Profiler 没有显示您的过程正在执行,则说明没有执行。应用程序代码中的某些内容正在更改正在调用的存储过程。
我从未见过(或听说过)SQL Server 运行不同的存储过程。它无法运行,因为参数全都不同。
答案2
您是否恰好使用了 nHibernate 或某些 ORM 框架?在一些测试中,我们看到调用的代码发生了一些变化,只是存储过程有所增加。如果我没记错的话,存储过程仍在被调用,但我们在 Profiler 中看到了奇怪的代码。
您能发布一些 Profiler 返回的示例吗?我对您所说的“由 Windows 服务请求”的意思也感到困惑