【问题标题】:linq to sql Error : the required column does not existlinq to sql 错误:所需的列不存在
【发布时间】:2014-04-12 13:49:38
【问题描述】:

有时当我访问我的 asp.net 网站时会看到此错误:

结果中不存在所需的列“代码”。

[InvalidOperationException:所需的列“代码”不存在 在结果中。]
System.Data.Linq.SqlClient.ObjectReaderBase1.GetColumnOrdinals(NamedColumn[] namedColumns) +709670
System.Data.Linq.SqlClient.ObjectReaderBase
1..ctor(ObjectReaderSession1 session, NamedColumn[] namedColumns, Object[] globals, Object[] arguments, Int32 nLocals) +193
System.Data.Linq.SqlClient.ObjectReaderSession
1.CreateReader(Func2 fnMaterialize, NamedColumn[] namedColumns, Object[] globals, Int32 nLocals, Boolean disposeDataReader) +113
System.Data.Linq.SqlClient.ObjectReaderFactory
2.Create(DbDataReader dataReader, Boolean disposeDataReader, IReaderProvider 提供者, 对象[] 父参数,对象[] 用户参数,ICompiledSubQuery[] 子查询)+272
System.Data.Linq.SqlClient.SqlProvider.Execute(表达式查询, QueryInfo queryInfo, IObjectReaderFactory 工厂, Object[] parentArgs, Object[] userArgs, ICompiledSubQuery[] subQueries, Object 最后结果)+2596
System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(表达式查询, QueryInfo[] queryInfos, IObjectReaderFactory 工厂, Object[] userArguments,ICompiledSubQuery[] 子查询)+188
System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(表达式 查询)+500 DAL.DataClassesDataContext.SP_Select_Agents(Nullable1 code, Nullable1 just_act)+182 BLL_Agency.LoadAgency(Int32 代码, Int32 活动)+62 BLL_Agency.LoadAgencyTable(Int32 代码)+244
UserControl_Security_Login.Page_Load(Object sender, EventArgs e) +221

我认为此错误来自一个存储过程,该过程肯定具有此列并在 SQL Server Management Studio 中正确运行。

当我重启iis或者替换app_global.asax问题就解决了!

几天/小时后问题会再次出现。

【问题讨论】:

  • 我们需要查看 SQL 和调用 Linq。否则没有我们可以提供帮助的方法
  • 99% 在一段时间后发生的 LINQ-to-SQL 异常与访问一个上下文实例的多个线程有关。如果您使用一个全局/单例上下文,则必须将其重构为每个请求的上下文。
  • @Hogan 在服务器端调用 sp 是这样的:code return System.Data.Linq.ISingleResult<DAL.sp_Select_AgencyUser_ByIDResult> LoadAgencyUserByID()' 和 dc 是在类构造函数中创建的 DataClassesDataContext。
  • @GertArnold 在这个旧网站上永远不会在任何地方使用线程
  • 所以每个用户都等到前一个完成? Web 应用程序中始终存在线程。那么DbContext 呢?

标签: c# iis linq-to-sql


【解决方案1】:

其实有一种情况我们不需要看代码。您的问题可能是由于您从未关闭数据库连接而引起的。如果你从不关闭你的数据库连接,那意味着你永远不会打开你的数据库连接。有时,如果长时间打开连接,数据库设置和网络设置会关闭/超时。

要解决此类问题,请在所有数据库代码周围使用标准 using() 块。然后,您将打开一个连接,使用它并再次一致地关闭它。 .NET 的连接池和缓存在确保此类使用不会导致性能损失方面做得非常出色。

【讨论】:

  • 我的网站是旧的 - 没有标准的代码继承给我!并且多年来没有任何问题并且从未在代码中使用using()。这个错误发生在大约一个月前,我从来没有改变这个有这个错误的页面!(这个页面是登录页面,当错误发生时任何人都无法登录到网站)
  • 我的想法的更多备份......虽然网站没有改变主机的硬件或他们施加的规则可能有 - 也许他们放置了一个具有不同保持活动规则的新开关示例
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-27
  • 1970-01-01
  • 2010-09-22
  • 1970-01-01
相关资源
最近更新 更多