2015-03-23 6 views
3

У нас есть тихая большая база данных SQL Server (около 30 миллионов строк в крупнейших таблицах). Когда я пытаюсь запустить хранимую процедуру, у меня есть странная проблема. Это работает, если я использую этот код:Почему SqlDataReader для DataTable работает только в том случае, если я использую отдельное поле?

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());  

Что может привести к этому?

+1

Вы называете это ТОЧНО теми же значениями параметров? –

+0

Да, конечно. Но я попробовал много разных ценностей. (В реале у меня есть несколько параметров). И каждый раз, когда я использую первый метод, он работает, и каждый раз, когда я использую второй, это не так. –

+2

Вы сказали * он работает вечно *, но где он блокируется? –

ответ

0

Возможно, вы играете var рулетка. Объявление var автоматически определяет тип переменной. И когда вы вставляете cmd.ExecuteReader() в table.load, вы избегаете этого процесса декларации. Вместо этого попробуйте явно передать команду cmd.ExecuteReader() с помощью SqlDataReader через table.load во втором фрагменте кода.

Link to C# var reference

«Начало в Visual C# 3.0, переменные, объявленные в методе сферы могут иметь неявный тип вар. Для неявно напечатал локальная переменная сильно типизированных так же, как если бы вы объявили тип самостоятельно, но компилятор определяет тип ... »