2010-09-05 51 views
2

我正在使用C#,.NET和SQL Server与Linq2SQL。.Net LINQ to SQL异常

这个错误是什么意思?

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

函数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),

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

+0

你在做什么?你能告诉我们导致这个错误的C#代码吗?没有它,有点难以说....通常,你会使用.ExecuteReader()仅用于选择数据 - 绝对* NOT *用于插入数据....所以我们需要看看你在做什么.. .. – 2010-09-05 13:29:21

回答

0

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

+0

那么错误中的“DataContext.SubmitChanges(ConflictMode failureMode)”是什么意思? – RuSh 2010-09-05 12:20:17

+0

这意味着错误起源于Linq2Sql上下文中的保存。实际的错误是连接到sql server超时。 – Femaref 2010-09-05 12:31:55

+0

所以它不是一个选择错误,它的插入错误?那么为什么这写的System.Data.Common.DbCommand.ExecuteReader() – RuSh 2010-09-05 12:36:52

2

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

0

“Timeout expired。超时时间已过,但操作完成或服务器没有响应。”

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

亲切的问候,

卡雷尔

+0

sql server在本地服务器上,并且连接正在工作。 – RuSh 2010-09-05 12:19:15