我运行DataTable.load(SqlDataReader)后,DataTable似乎是空的,但DataReader包含结果(可以在调试时看到)。DataTable空后.load(SqlDataReader)
任何人都可以帮我这个吗?我似乎无法找到这个问题的任何解决方案,也不能找到我的算法中的一个错误..我发现一些使用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;
FYI:在rdrSelectDeviceProperties.HasRows经过每一次,所以读者肯定包含调试过程中的一些价值..正确的结果可以在rdrSelectDeviceProperties发现,..但DeviceProperties数据表保持空...
确切问题:调试时数据表看起来是空的,因为悬停在上面显示:'{}'。 其余代码根据数据表作出响应,因为数据表为空。 SOLUTION:当你按下放大镜,你得到的数据表中的数据表示。 我的错误是在代码的其余部分(比较数据表中的数据与字符串,而不使用'.ToString()')。
从我的错误中学习..
你试过'使用(VAR daSelectDeviceProperties =新SqlDataAdapter的(查询,connectionDBTest ))daSelectDeviceProperties.Fill(DeviceProperties);'而不是? ' –
感谢您的回答,但是您能否详细说明放置上述代码的位置? 并在第二个注意,我有点想知道为什么DataTable DeviceProperties是空的,即使我使用包含结果的SqlReader的负载.. – Atoq