.load(SqlDataReader) 后 DataTable 为空
DataTable empty after .load(SqlDataReader)
我运行DataTable.load(SqlDataReader)后,DataTable好像是空的,但是DataReader里面有结果(调试的时候可以看到)
谁能帮我解决这个问题?我似乎找不到这个问题的任何解决方案,也找不到我的算法中的错误..
我找到了一些使用 DataAdapter & Fill() 的解决方案,但我只是对此感到好奇 'problem'。
我的代码:
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 每次都会通过,所以 reader 肯定包含一些值。正确的结果可以在调试期间的 rdrSelectDeviceProperties 中找到。但是 DeviceProperties 数据 table 仍然是空的..
确切问题: 调试时数据 table 似乎是空的,因为悬停显示:'{ }'。
其余代码,取决于数据 table,响应为数据 table 为空。
解决方案: 当您按下放大镜时,您会得到数据中数据的表示 table。
我的错误在于代码的其余部分(将数据 table 中的数据与字符串进行比较,而不使用“.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..");
我运行DataTable.load(SqlDataReader)后,DataTable好像是空的,但是DataReader里面有结果(调试的时候可以看到)
谁能帮我解决这个问题?我似乎找不到这个问题的任何解决方案,也找不到我的算法中的错误.. 我找到了一些使用 DataAdapter & Fill() 的解决方案,但我只是对此感到好奇 'problem'。 我的代码:
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 每次都会通过,所以 reader 肯定包含一些值。正确的结果可以在调试期间的 rdrSelectDeviceProperties 中找到。但是 DeviceProperties 数据 table 仍然是空的..
确切问题: 调试时数据 table 似乎是空的,因为悬停显示:'{ }'。 其余代码,取决于数据 table,响应为数据 table 为空。 解决方案: 当您按下放大镜时,您会得到数据中数据的表示 table。 我的错误在于代码的其余部分(将数据 table 中的数据与字符串进行比较,而不使用“.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..");