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不支持该方法
虽然我可以使用:
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];
}
}