我正在使用
SqlCommand
对我的数据库运行一个简单的查询:
SELECT MIN(ID), MAX(ID)
FROM DocumentImage
显然,查询应该返回一行,其中有两列:minID (1) 和 maxID (12xxxxxx)。我正在尝试将这两个值放入可以在 while 循环中使用的整数变量中。
int[] minMax = new int[2];
DataTable dT = new DataTable();
SqlCommand myCommand = new SqlCommand();
myCommand.Connection = databaseName;
myCommand.CommandText = "SELECT MIN(ID), MAX(ID) FROM DocumentImage";
databaseName.Open();
using (SqlDataReader dr = myCommand.ExecuteReader())
{
while (dr.Read())
{
minMax[0] = dr.GetInt32(0);
minMax[1] = dr.GetInt32(1);
}
}
databaseName.Close();
如果我在
while (dr.Read())
处插入断点,dr
将显示我期望的值。但是当我运行minMax[0] = dr.GetInt32(0)
时,代码抛出异常
不存在数据时尝试读取无效
如果我深入了解
SqlDataReader
结果,我会得到
枚举没有结果
我尝试写入数据表,然后将其移动到数组以及不同的强制转换和数组。我有点不知所措。
您正在尝试读取在尝试访问时可能不可用的数据。要解决此问题,请考虑在尝试读取数据之前检查 SqlDataReader 是否有任何行。这是代码的修改版本,其中包含错误处理,以确保您正确读取数据:
int[] minMax = new int[2];
SqlCommand myCommand = new SqlCommand();
myCommand.Connection = databaseName;
myCommand.CommandText = "Select MIN(ID), MAX(ID) FROM DocumentImage";
databaseName.Open();
using (SqlDataReader dr = myCommand.ExecuteReader())
{
if (dr.HasRows)
{
dr.Read(); // Move to the first row
if (!dr.IsDBNull(0)) // Check for DBNull before reading
minMax[0] = dr.GetInt32(0);
if (!dr.IsDBNull(1)) // Check for DBNull before reading
minMax[1] = dr.GetInt32(1);
}
}
databaseName.Close();