.load(SqlDataReader) 后 DataTable 为空

DataTable empty after .load(SqlDataReader)

我运行DataTable.load(SqlDataReader)后,DataTable好像是空的,但是DataReader里面有结果(调试的时候可以看到)

谁能帮我解决这个问题?我似乎找不到这个问题的任何解决方案,也找不到我的算法中的错误.. 我找到了一些使用 DataAdapter & Fill() 的解决方案,但我只是对此感到好奇 'problem'。 我的代码:

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;

仅供参考:rdrSelectDeviceProperties.HasRows 每次都会通过,所以 reader 肯定包含一些值。正确的结果可以在调试期间的 rdrSelectDeviceProperties 中找到。但是 DeviceProperties 数据 table 仍然是空的..

确切问题: 调试时数据 table 似乎是空的,因为悬停显示:'{ }'。 其余代码,取决于数据 table,响应为数据 table 为空。 解决方案: 当您按下放大镜时,您会得到数据中数据的表示 table。 我的错误在于代码的其余部分(将数据 table 中的数据与字符串进行比较,而不使用“.ToString()”)。

从我的错误中吸取教训..

不确定是什么导致了这个问题,但我会使用 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..");