2015-09-25 2 views
0

После запуска DataTable.load (SqlDataReader), DataTable кажется пустым, но DataReader содержит результаты (можно увидеть во время отладки).DataTable пуст после .load (SqlDataReader)

Может ли кто-нибудь помочь мне с этим, пожалуйста? Я не могу найти решение этой проблемы, и не могу найти ошибку в моем алгоритме. Я нашел некоторые решения для использования DataAdapter & Fill(), но мне просто интересно об этой проблеме ». Мой код:

DataTable DeviceProperties = new DataTable(); 
     try 
     { 
      string query = "SELECT PropertyID, PropertyName from DeviceProperties WHERE DeviceID = @DeviceID;"; 
      using (SqlCommand cmdSelectDeviceProperties = new SqlCommand(query, connectionDBTest)) 
      { 
       cmdSelectDeviceProperties.Parameters.Add("@DeviceID", SqlDbType.BigInt).Value = deviceID; 
       using (SqlDataReader rdrSelectDeviceProperties = cmdSelectDeviceProperties.ExecuteReader()) 
       { 
        if (rdrSelectDeviceProperties.HasRows) 
         DeviceProperties.Load(rdrSelectDeviceProperties); 
        else 
         Console.WriteLine("No Device Properties found.."); 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine("Error getDeviceProperties: " + ex); 
     } 
     return DeviceProperties; 

FYI: rdrSelectDeviceProperties.HasRows проходит каждый раз, так что читатель, конечно, содержит некоторое значение .. Правильные результаты могут быть найдены в rdrSelectDeviceProperties, во время отладки .. Но DeviceProperties данных остается таблица пустой.

ТОЧНАЯ ПРОБЛЕМА: таблица данных казалась пустой при отладке, потому что наведите указатель мыши: '{}'. Остальная часть кода, в зависимости от таблицы данных, ответила, поскольку таблица данных была пуста. РЕШЕНИЕ: Когда вы нажимаете увеличительное стекло и получаете представление данных в таблице данных. Моя ошибка была в остальной части кода (сравнение данных в таблице данных со строкой, без использования .ToString() ').

Учитесь на своих ошибках ..

+0

Вы пробовали 'с помощью (вар daSelectDeviceProperties = новый SqlDataAdapter (запрос, connectionDBTest)) daSelectDeviceProperties.Fill (DeviceProperties); вместо этого? ' –

+0

Спасибо, что ответили, но можете ли вы подробнее рассказать о том, где положить вышеуказанный код? И на второй ноте я был любопытно, почему DataTable DeviceProperties был пуст, даже после того, как я использовал загрузку на SqlReader, который содержит результаты. – Atoq

ответ

0

Не уверен, что причиной этой проблемы, но я хотел бы использовать SqlDataAdapter.Fill(dataTable) вместо DataTable.Load(sqlDatareader):

DataTable tblSelectDeviceProperties = new DataTable(); 
using (var daSelectDeviceProperties = new SqlDataAdapter(query, connectionDBTest)) 
{ 
    // no need to open/close the connection with DataAdapter.Fill 
    daSelectDeviceProperties.Fill(tblSelectDeviceProperties); 
} 
if (tblSelectDeviceProperties.Rows.Count == 0) 
    Console.WriteLine("No Device Properties found.."); 
+0

Спасибо за ответ .. Я думаю, что узнал, что такое «проблема». В процессе отладки предварительный просмотр таблицы данных выглядит пустым (отображается «{}»), но таблица данных была заполнена результатом чтения данных. Причина, по которой остальная часть моей программы ничего не делала, заключается в том, что я ошибся с индексированием таблицы (счастливая радостная радость!). Но большое спасибо вам обоим и извините за то, что потратил ваше время. – Atoq

+0

@ user5110371: вы можете щелкнуть по лупе в отладчике, чтобы посмотреть данные DataTable. –

+0

ну да .. этот вид тоже решил. Ну, это всего лишь один из тех дней, когда ты выглядишь глупо. :) Еще раз спасибо за ответ. – Atoq

Смежные вопросы