Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SqlCommand超时,CommandTimeout和ConnectionTimeout均为0_C#_Sql Server_Ssis_Timeout_Datareader - Fatal编程技术网

C# SqlCommand超时,CommandTimeout和ConnectionTimeout均为0

C# SqlCommand超时,CommandTimeout和ConnectionTimeout均为0,c#,sql-server,ssis,timeout,datareader,C#,Sql Server,Ssis,Timeout,Datareader,我正在通过SSIS包中的一个C#脚本任务从SQL数据库中运行大量摘录。从包内的连接管理器获取到源的连接: object rawConnection = Dts.Connections[sqlSpecItems["ConnectionManager"]].AcquireConnection(Dts.Transaction); SqlConnection connectionFromCM = (SqlConnection)rawConnection

我正在通过SSIS包中的一个C#脚本任务从SQL数据库中运行大量摘录。从包内的连接管理器获取到源的连接:

object rawConnection = Dts.Connections[sqlSpecItems["ConnectionManager"]].AcquireConnection(Dts.Transaction);
                SqlConnection connectionFromCM = (SqlConnection)rawConnection;
(splSpecItems是一个字典对象,提供要使用的连接管理器的名称)

连接管理器的ConnectionTimeout属性设置为0。为CM生成的连接字符串为:

数据源=我的数据库;用户ID=我的用户名;初始目录=MyDatabaseName;持久安全信息=True;异步处理=真;连接超时=0;应用程序名称=MyPackageApplicationName

该连接用于返回SqlDataReader对象,如下所示:

private SqlDataReader GetDataReaderFromQuery(string sqlQueryToExecute)
        {
            // connect to server
            SqlConnection sqlReaderSource = GetSourceSQLConnection();

            // create command
            SqlCommand sqlReaderCmd = new SqlCommand(sqlQueryToExecute, sqlReaderSource)
            {
                CommandType = CommandType.Text, 
                CommandTimeout = 0
            };

            // execute query to return data to reader
            SqlDataReader sqlReader = sqlReaderCmd.ExecuteReader();

            return sqlReader;               
        }
操作失败,并显示错误消息:

执行超时已过期。操作完成前已过超时时间,或者服务器没有响应

记录的操作开始和结束时间通常相隔50秒左右,但最长可达120秒

源数据库是由业务中心云托管的SQL db。故障发生在少量特定提取上,较大的提取(尽管绝对值不算大,c20k行)。当试图通过SSM查询这些数据时,通常会出现延迟,因为数据必须从源提取到内存中,我怀疑这是超时的原因(尽管连接和命令设置为timeout=0)。请注意,一旦故障发生一次,数据就会存储在内存中,因此如果我重新启动作业,它不会重复


我在这个网站上以及其他网站上看到了各种答案。到目前为止,我所看到的一切都没有让我知道我可能会试图解决这个问题。任何帮助都将不胜感激。

因此,我发现了问题所在。为了防止它对其他人有帮助,超时并不是因为读卡器而抛出的。相反,我将读取器传递到的是其下游的SqlBulkCopy操作。添加:

bulkCopy.BulkCopyTimeout = 0;

已清除问题…

默认命令超时为30秒,您需要设置更大的超时。某些软件库使用零来忽略超时,但在网络库中零不起作用。您确定失败的代码使用的是发布代码中的同步
ExecuteReader
方法,而不是
BeginExecuteReader
?注意:CommandTimeout属性将被旧的APM(异步编程模型)异步方法调用(如BeginExecuteReader)忽略@jdweng我已经将连接和命令的timeout属性都设置为600。我仍然得到失败,记录的开始/结束时间差为82秒。@始终了解发布的代码与脚本任务中的代码完全相同。正在使用目录过程从T-SQL调用包。我以同步方式显式运行它:
exec[SSISDB].[catalog].[set\u execution\u parameter\u value]@execution\u id=@executionId,@object\u type=50--系统参数,@parameter\u name=N'SYNCHRONIZED',@parameter\u value=1