从 C# SqlDataReader 获取值到整型变量中

问题描述 投票:0回答:1

我正在使用

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
结果,我会得到

枚举没有结果

我尝试写入数据表,然后将其移动到数组以及不同的强制转换和数组。我有点不知所措。

c# sql-server sqldatareader sqlcommand
1个回答
0
投票

您正在尝试读取在尝试访问时可能不可用的数据。要解决此问题,请考虑在尝试读取数据之前检查 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();
© www.soinside.com 2019 - 2024. All rights reserved.