C# 无法转换System.DBNull

C# 无法转换System.DBNull,c#,oledb,C#,Oledb,从excel中读取数据时出现问题。如果单元格为空,则会出现异常“无法将'System.DBNull'类型的对象强制转换为'System.String'类型”。我研究了stackoverflow,发现DBNullValues可以转换,我尝试了这个建议,但我的程序甚至在调用转换DBValues的方法之前就抛出了异常。有什么建议吗 int A = reader.GetOrdinal("A"); foreach (DbDataRecord record

从excel中读取数据时出现问题。如果单元格为空,则会出现异常“无法将'System.DBNull'类型的对象强制转换为'System.String'类型”。我研究了stackoverflow,发现DBNullValues可以转换,我尝试了这个建议,但我的程序甚至在调用转换DBValues的方法之前就抛出了异常。有什么建议吗

            int A = reader.GetOrdinal("A");

            foreach (DbDataRecord record in reader)
            {
                string foo = ConvertFromDBVal<string>(record.GetString(A));
            }
        }
        catch
        {

        }
        conn.Close();
        return AllConnections;
    }

    public static T ConvertFromDBVal<T>(object obj)
    {
        if (obj == null || obj == DBNull.Value)
        {
            return default(T);
        }
        else
        {
            return (T)obj;
        }
    }
inta=reader.GetOrdinal(“A”);
foreach(读取器中的DbDataRecord记录)
{
string foo=ConvertFromDBVal(record.GetString(A));
}
}
抓住
{
}
康涅狄格州关闭();
返回所有连接;
}
公共静态T ConvertFromDBVal(对象对象obj)
{
if(obj==null | | obj==DBNull.Value)
{
返回默认值(T);
}
其他的
{
返回(T)obj;
}
}

您正在调用
record.GetString
,我希望它会失败,因为它试图执行到字符串的转换。您应该能够在堆栈跟踪中看到这一点。相反,请使用
record.GetValue

string foo = ConvertFromDBVal<string>(record.GetValue(A));
string foo=ConvertFromDBVal(record.GetValue(A));

然后,在它到达您的方法之前,它将不会执行任何转换。

您能否提供有关引发的异常的更多信息,以及在哪里?当代码跳入以“String foo”开头的行时,会立即引发异常“无法将'System.DBNull'类型的对象强制转换为'System.String'。