[英]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.