在MSDN中指定:
MSDN - SqlDataReader GetChar 除了该方法标有
[EditorBrowsable(EditorBrowsableState.Never)]
属性,您可以编码 - >编译它,当你运行该方法时,它会抛出“不支持的方法”异常。
有没有办法从读取器读取单个字符而不使用(需要缓冲区)GetChars方法或以字符串形式读取它然后获取[0]字符?
(另外,不应该隐藏这些方法或在MSDN上标记某些内容,说明你不应该使用它们吗?)
编辑:
正如Daniel A. White所指出的,在备注部分中有一行说SqlClient不支持该方法。
答案 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];
}
}