使用 SqlDataReader 获取所有 SQL 列作为字符串

本文关键字:字符串 SQL SqlDataReader 获取 使用 | 更新日期: 2023-09-27 18:35:06

>我有几列的表,但是在收到它们之前我不知道每列的类型。 我想打印出所有这些的值,而无需检查每列的类型并使用开关块进行适当的转换。

我有以下代码:

string c0 = reader.GetValue(0).ToString();
string c1 = reader.GetValue(1).ToString();

但是,这并没有按预期工作。

例如,如果列作为类型返回 {int, byte[]} ,上面的代码将产生:

c0 = "719231" // as expected
c1 = "System.Byte[]" // trying to get "0x728AEBF720"

虽然我的具体问题

有没有一种我错过的干净方法可以做到这一点,或者我必须有一堆基于如下类型的切换逻辑?

if (o.GetType() == typeof(byte[]))
    return System.Text.Encoding.Default.GetString(o as byte[]);
else if (... more chained special cases)
    return o.ToString();

使用 SqlDataReader 获取所有 SQL 列作为字符串

正如您所发现的,如果这是针对泛型表结构的,则必须自己处理无法转换为字符串的类型。

byte[]您可以通过以下方式获取类型

reader.GetFieldType(column)

还要确保检查空值