繁体   English   中英

为什么只有使用单独的字段时,SqlDataReader才能使用DataTable?

[英]Why SqlDataReader to DataTable only works if I use a separate field?

我们有一个安静的大型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 roulette。 var声明自动确定变量的类型。 当你在table.load中嵌入cmd.ExecuteReader()时,你就避免了这个声明过程。 相反,尝试在第二个代码片段中通过table.load使用SqlDataReader显式地生成cmd.ExecuteReader()。

链接到C#var reference

“从Visual C#3.0开始,在方法范围声明的变量可以有一个隐式类型var。隐式类型的局部变量是强类型的,就像你自己声明了类型一样,但编译器确定类型......”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM