繁体   English   中英

.load(SqlDataReader)之后,DataTable为空

[英]DataTable empty after .load(SqlDataReader)

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

有人可以帮我吗? 我似乎找不到该问题的任何解决方案,也找不到我的算法中的错误。.我找到了一些使用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;

仅供参考:rdrSelectDeviceProperties.HasRows每次都会传递,因此读取器肯定包含一些值。在调试过程中,可以在rdrSelectDeviceProperties中找到正确的结果。但是DeviceProperties数据表仍然为空。

确切的问题:调试时数据表似乎为空,因为悬停显示为“ {}”。 其余的代码(取决于数据表)响应为数据表为空。 解决方案:按下放大镜后,您将在数据表中获得数据的表示形式。 我的错误在于其余代码(不使用'.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..");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM