2015-09-25 67 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数据表保持空...

确切问题:调试时数据表看起来是空的,因为悬停在上面显示:'{}'。 其余代码根据数据表作出响应,因为数据表为空。 SOLUTION:当你按下放大镜,你得到的数据表中的数据表示。 我的错误是在代码的其余部分(比较数据表中的数据与字符串,而不使用'.ToString()')。

从我的错误中学习..

+0

你试过'使用(VAR 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