Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.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# 为什么SqlDataReader到DataTable仅在使用单独字段时才起作用?_C#_.net_Sql Server_Datatable_Datareader - Fatal编程技术网

C# 为什么SqlDataReader到DataTable仅在使用单独字段时才起作用?

C# 为什么SqlDataReader到DataTable仅在使用单独字段时才起作用?,c#,.net,sql-server,datatable,datareader,C#,.net,Sql Server,Datatable,Datareader,我们有一个安静的大型SQL Server数据库(在最大的表中大约有3000万行)。当我试图在上面运行存储过程时,我遇到了一个奇怪的问题。如果我使用以下代码,它将起作用: cmd = new SqlCommand("query", conn); cmd.CommandType = CommandType.StoredProcedure; cmd.CommandText = "StoredProcedureName"; cmd.Parameters.Add("myParame

我们有一个安静的大型SQL Server数据库(在最大的表中大约有3000万行)。当我试图在上面运行存储过程时,我遇到了一个奇怪的问题。如果我使用以下代码,它将起作用:

cmd = new SqlCommand("query", conn);    
cmd.CommandType = CommandType.StoredProcedure;    
cmd.CommandText = "StoredProcedureName";    
cmd.Parameters.Add("myParameter", myParameter);    
cmd.CommandTimeout = 600;

DataTable table = new DataTable();    
var restmp = cmd.ExecuteReader();    
table.Load(restmp);
但如果我使用这个,它将永远运行:

cmd = new SqlCommand("query", conn);    
cmd.CommandType = CommandType.StoredProcedure;    
cmd.CommandText = "StoredProcedureName";    
cmd.Parameters.Add("myParameter", myParameter);    
cmd.CommandTimeout = 600;

DataTable table = new DataTable();    
table.Load(cmd.ExecuteReader());      

什么原因导致这种情况?

您可能正在玩var轮盘赌。var声明自动确定变量的类型。当您在table.load中嵌入cmd.ExecuteReader()时,可以避免该声明过程。相反,请尝试在第二个代码段上通过table.load显式地使用SqlDataReader强制转换cmd.ExecuteReader()


“从Visual C#3.0开始,在方法作用域中声明的变量可以具有隐式类型变量。隐式类型局部变量是强类型的,就像您自己声明了类型一样,但编译器确定了类型…”

您是否使用完全相同的参数值调用它?当然可以。但我尝试了很多不同的价值观。(实际上,我有不止一个参数。)每次我使用第一个方法时,它都有效,而每次我使用第二个方法时,它都不起作用。你说它永远在运行,但它在哪里阻塞了?在“table.Load(cmd.ExecuteReader());”是的,在每张桌子上。