6

MSDN で指定:

MSDN - SqlDataReader GetChar メソッドがマークされていることを除いて

[EditorBrowsable(EditorBrowsableState.Never)]

属性であり、コーディング -> コンパイルが可能ですが、メソッドを実行すると、「サポートされていないメソッド」例外がスローされます。

(バッファが必要な) GetChars メソッドを使用したり、文字列として読み込んで [0] 文字を取得したりせずに、リーダーから単一の文字を読み取る方法はありますか?

(また、これらのメソッドを非表示にしたり、MSDN で使用しないようにマークしたりするべきではありませんか?)

編集:

Daniel A. White が指摘したように、コメント セクションの下に、メソッドが SqlClient でサポートされていないという 1 行があります。

4

2 に答える 2

7

私は使用できましたが:

reader.GetString(colIndex)[0]

私は代わりに以下を選びました:

var buffer = new char[1];
reader.GetChars(colIndex, 0, buffer, 0, 1);
于 2013-06-07T13:10:41.443 に答える
5

SqlDataReaderを実装しているためIDataReaderGetChar()メソッドがあります。しかし、SqlDataReaderでは、その実装は単にNotImplementedException. はインテリセンスでSqlDataReader提供しないようにマークされていますが、 の最後に入力すると、コンパイルされていることがわかりますが、実行時に.GetChar()GetChar()SqlDataReaderNotImplementedException

.Net チームが .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];
    }
}
于 2016-12-12T13:47:25.883 に答える