.load之后的DataTable为空(SqlDataReader)

时间:2015-09-25 15:10:59

标签: c# datatable ado.net sqldatareader

运行DataTable.load(SqlDataReader)后,DataTable似乎为空,但DataReader包含结果(可在调试时看到)。

有人可以帮我这个吗?我似乎找不到任何解决这个问题的方法,也不能在算法中找到错误。 我找到了使用DataAdapter& amp;的一些解决方案。填充(),但我只是对这个'问题'感到好奇。 我的代码:

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每次都会传递,因此读者肯定会包含一些值。在调试期间,可以在rdrSelectDeviceProperties中找到正确的结果。但是DeviceProperties数据表仍为空。

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

从我的错误中学习......

1 个答案:

答案 0 :(得分: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..");