【发布时间】:2015-09-25 15:10:58
【问题描述】:
我运行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()')。
从我的错误中吸取教训..
【问题讨论】:
-
你试过
using(var daSelectDeviceProperties = new SqlDataAdapter(query, connectionDBTest)) daSelectDeviceProperties.Fill(DeviceProperties);instead 吗? ` -
感谢您的回答,但您能否详细说明一下将上述代码放在哪里?第二点,我有点想知道为什么 DataTable DeviceProperties 是空的,即使我在包含结果的 SqlReader 上使用了负载..
标签: c# datatable ado.net sqldatareader