SqlDataReader GetChar(int index)方法

时间:2013-06-06 18:25:46

标签: c# sqldatareader

在MSDN中指定:

MSDN - SqlDataReader GetChar 除了该方法标有

[EditorBrowsable(EditorBrowsableState.Never)]

属性,您可以编码 - >编译它,当你运行该方法时,它会抛出“不支持的方法”异常。

有没有办法从读取器读取单个字符而不使用(需要缓冲区)GetChars方法或以字符串形式读取它然后获取[0]字符?

(另外,不应该隐藏这些方法或在MSDN上标记某些内容,说明你不应该使用它们吗?)

编辑:

正如Daniel A. White所指出的,在备注部分中有一行说SqlClient不支持该方法。

2 个答案:

答案 0 :(得分:5)

虽然我本可以使用:

reader.GetString(colIndex)[0]

我改为选择:

var buffer = new char[1];
reader.GetChars(colIndex, 0, buffer, 0, 1);

答案 1 :(得分:4)

由于SqlDataReader实施IDataReader,因此它具有GetChar()方法。但是在SqlDataReader上,实现就是抛出NotImplementedException。标记为SqlDataReader,以便在智能感知中不提供GetChar(),但如果您在GetChar()的{​​{1}}末端输入SqlDataReader,则会看到它编译但是在运行时,您将获得NotImplementedException

所有这些都令人失望,因为在我看来,.Net团队只需要几行代码即可实现GetChar()

令人高兴的是,通过使用扩展方法,我们可以将自己的GetChar()方法添加到SqlDataReader。由于GetChar()已被采用(尽管仅使用NotImplmentedException实现),因此我们必须将其称为GetChar()之外的其他内容。我称之为GetSingleChar()

internal static class ExtensionMethods
{
    internal static char GetSingleChar(this SqlDataReader reader, int columnIndex)
    {
        System.Data.SqlTypes.SqlChars val = reader.GetSqlChars(columnIndex);
        if (val.Length != 1)
        {
            throw new ApplicationException(
                "Expected value to be 1 char long, but was "
                + val.Length.ToString() + " chars long.");
        }
        return val[0];
    }
}