C# 为什么SqlDataReader到DataTable仅在使用单独字段时才起作用?
我们有一个安静的大型SQL Server数据库(在最大的表中大约有3000万行)。当我试图在上面运行存储过程时,我遇到了一个奇怪的问题。如果我使用以下代码,它将起作用: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
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());”是的,在每张桌子上。