SqlDataReader GetChar(int index) method

本文关键字:method index int GetChar SqlDataReader | 更新日期: 2023-09-27 18:17:20

指定于MSDN:

MSDN - SqlDataReader GetChar除了方法被标记为

[EditorBrowsable(EditorBrowsableState.Never)]

属性,虽然你可以code ->编译它,但当你运行该方法时,它会抛出一个"method not supported"异常。

是否有任何方法可以从阅读器读取单个字符而不使用(缓冲区所需)GetChars方法或将其作为字符串读取,然后获得[0]字符?

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

编辑:

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

SqlDataReader GetChar(int index) method

虽然我可以使用:

reader.GetString(colIndex)[0]

我选择了:

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

因为SqlDataReader实现了IDataReader,所以它有一个GetChar()方法。但是在SqlDataReader上,的实现只是抛出一个NotImplementedException。标记SqlDataReader是为了在智能感知中不提供GetChar(),尽管如果您在SqlDataReader的末尾输入GetChar(),您将看到它会编译,但在运行时您会得到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];
    }
}