SQLDataReader。 ExecuteReader超时

时间:2019-04-24 12:18:06

标签: c# sql .net

MS sql 2014后端(在同一台计算机上)-Executereader times out (native error code: 258) @ second executereader()在同一连接中。为什么会这样呢? (不涉及大数据量,涉及的cmd字符串是正确的)

注意:第二秒总是超时时,是否所有SELECT都进入单独的连接并不重要。是否使用DataAdapter捕获数据也没关系...超时...请参见下文,谢谢您的想法:

using (SqlConnection c = new SqlConnection(cString))
{
    c.Open();
    using (SqlCommand cmd = new SqlCommand(querystringPO, c))
    {

        cmd.Parameters.AddWithValue("@paramRecipe", productionOrderNo);
        using (SqlDataReader rd = cmd.ExecuteReader())
        {
            dtRecipe = new DataTable();
            dtRecipe.Load(rd);
            rd.Close();
        }
    }
    if (dtRecipe.Rows.Count > 0)
    {
        string querystringOpDefs = "SELECT * FROM ReferencedFieldsView_OperationDefinition WHERE RecipeID=@paramOpDef";
        using (SqlCommand cmd1 = new SqlCommand(querystringOpDefs, c))
        {

            cmd1.Parameters.AddWithValue("@paramOpDef", dtRecipe.Rows[0].Field<int>("ID"));
            using (SqlDataReader rd = cmd1.ExecuteReader())
            {
                dtOpDefs = new DataTable();
                dtOpDefs.Load(rd);
                rd.Close();
            }


        }
        string querystringBOMItems = "SELECT * FROM ReferencedFieldsView_BomItem WHERE RecipeID=@paramBOMItem";

        using (SqlCommand cmd2 = new SqlCommand(querystringBOMItems, c))
        {

            cmd2.Parameters.AddWithValue("@paramBOMItem", dtRecipe.Rows[0].Field<int>("ID"));
            using (SqlDataReader rd = cmd2.ExecuteReader())
            {
                dtBOMItems = new DataTable();
                dtBOMItems.Load(rd);
            }
        }
    }
}

例如下面的

  
    

异常:System.InvalidOperationException:服务器操作遇到异常---> System.Data.SqlClient.SqlException:执行超时到期。在操作完成之前超时或服务器没有响应。 ---> System.ComponentModel.Win32Exception:等待操作超时        ---内部异常堆栈跟踪的结尾---        在System.Data.SqlClient.SqlConnection.OnError(SqlException异常,布尔值breakConnection,动作1 wrapCloseInAction)        在System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj,布尔调用方HasConnectionLock,布尔asyncClose)        在System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj,Boolean和dataReady)        在System.Data.SqlClient.SqlDataReader.TryConsumeMetaData()        在System.Data.SqlClient.SqlDataReader.get_MetaData()        在System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds,RunBehavior runBehavior,字符串resetOptionsString,布尔值isInternal,布尔值forDescribeParameterEncryption,布尔值shouldCacheForAlwaysEncrypted)        在System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior,RunBehavior runBehavior,Boolean returnStream,Boolean异步,Int32超时,Task&task,Boolean asyncWrite,Boolean inRetry,SqlDataReader ds,Boolean describeParameterEncryptionRequest)        在System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,RunBehavior runBehavior,Boolean returnStream,String方法,TaskCompletionSource`1完成,Int32超时,Task&task,Boolean&usedCache,Boolean asyncWrite,Boolean inRetry)        在System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,RunBehavior runBehavior,Boolean returnStream,String方法)        在System.Data.SqlClient.SqlCommand.ExecuteReader上(CommandBehavior行为,String方法)        在System.Data.SqlClient.SqlCommand.ExecuteReader()

  

1 个答案:

答案 0 :(得分:0)

事实是,使用SQL 2K12,以上代码段都可以正常工作(相同的数据库相同,等等)

但是,正如某人建议不要选择所有字段(*),当显式添加所需的字段时,它开始起作用。