【问题标题】:.Net LINQ to SQL Exception.Net LINQ to SQL 异常
【发布时间】:2010-09-05 12:04:30
【问题描述】:

我将 C#、.NET 和 SQL Server 与 Linq2SQL 一起使用。

这个错误是什么意思?

是插入还是读取/选择相关的错误?

Classes.BLL.Save(LPage l) 函数首先从数据库中选择 COUNT,然后在数据库中插入一条新记录。

2010-09-03 04:57:56,264 System.Data.SqlClient.SqlException (0x80131904): Timeout expired.  The timeout period elapsed prior to completion of the operation or the server is not responding.
   at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
   at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
   at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
   at System.Data.SqlClient.SqlDataReader.ConsumeMetaData()
   at System.Data.SqlClient.SqlDataReader.get_MetaData()
   at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
   at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
   at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
   at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
   at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
   at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
   at System.Data.Common.DbCommand.ExecuteReader()
   at System.Data.Linq.SqlClient.SqlProvider.Execute(Expression query, QueryInfo queryInfo, IObjectReaderFactory factory, Object[] parentArgs, Object[] userArgs, ICompiledSubQuery[] subQueries, Object lastResult)
   at System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(Expression query, QueryInfo[] queryInfos, IObjectReaderFactory factory, Object[] userArguments, ICompiledSubQuery[] subQueries)
   at System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query)
   at System.Data.Linq.ChangeDirector.StandardChangeDirector.DynamicInsert(TrackedObject item)
   at System.Data.Linq.ChangeDirector.StandardChangeDirector.Insert(TrackedObject item)
   at System.Data.Linq.ChangeProcessor.SubmitChanges(ConflictMode failureMode)
   at System.Data.Linq.DataContext.SubmitChanges(ConflictMode failureMode)
   at Classes.BLL.Save(LPage l)

更新:

我知道这是一个超时异常,它来自 sql server。 但错误说明了两件事,

1) Common.DbCommand.ExecuteReader() 中的错误 和

2) DataContext.SubmitChanges(ConflictMode failureMode) 出错,

所以我试图找出错误的来源是选择命令还是插入命令。

【问题讨论】:

  • 你在做什么??您能向我们展示导致此错误的 C# 代码吗?没有它,很难说......通常,您只会使用 .ExecuteReader() 来选择数据 - 绝对 NOT 用于插入数据......所以我们需要看看你'正在做......

标签: c# .net sql linq-to-sql


【解决方案1】:

此错误来自 SQL Server 而不是 Linq。它只是意味着 SQL Server 的操作在您指定的超时期限(可能是 30 秒)内没有响应。这可能是由于等待释放更多或更多记录的锁,或其他一些资源争用。

【讨论】:

    【解决方案2】:

    这是一个选择错误 - 如果我没记错的话,插入查询将通过 ExecuteNonQuery 完成。虽然,这个错误也可能以另一种方式或形式出现在 Insert 中。这不是由 Linq 引起的,而是由 Sql Server 引起的。

    【讨论】:

    • 那么错误中的“DataContext.SubmitChanges(ConflictMode failureMode)”是什么意思呢?
    • 这意味着错误源于 Linq2Sql 上下文中的保存。实际错误是连接sql server超时。
    • 所以不是选择错误,而是插入错误?那为什么要这么写 System.Data.Common.DbCommand.ExecuteReader()
    • @sharru:你有身份列,或者数据库设置的列吗?如果是这样 LINQ to SQL 将执行并插入,并立即选择数据以获取 DB 设置的值。
    • @richard:是的,我有身份列。现在说得通了。
    【解决方案3】:

    “超时。在操作完成之前超时时间已过或服务器没有响应。”

    所以可能是超时。 你能ping通sql server主机吗? 您是否尝试创建一个 UDL 文件并测试您的连接? (右键文件夹,新建一个空文本文件,重命名为test.udl,双击打开并填写必要的连接数据,然后点击test)

    亲切的问候,

    卡雷尔

    【讨论】:

    • sql server 在本地服务器上,连接正常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-03
    • 1970-01-01
    • 1970-01-01
    • 2010-12-10
    • 1970-01-01
    • 1970-01-01
    • 2011-10-10
    相关资源
    最近更新 更多