加载(SqlDataReader)后,数据表为空



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

谁能帮我解决这个问题?我似乎找不到任何解决这个问题的方法,也找不到我的算法中的错误。我找到了一些使用DataAdapter的解决方案;填充(),但我只是好奇这个"问题"。我的代码:
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..");

相关内容

  • 没有找到相关文章

最新更新