[英]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()。
“从Visual C#3.0开始,在方法范围声明的变量可以有一个隐式类型var。隐式类型的局部变量是强类型的,就像你自己声明了类型一样,但编译器确定类型......”
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.