9

次のコードがあり、このクエリの結果のすべてのフィールドをループして、fieldという辞書にデータを入力します。

データリーダーを考えると、これは可能ですか?

            OracleCommand command = connection.CreateCommand();
            string sql = "Select * from MYTABLE where ID = " + id;
            command.CommandText = sql;

            Dictionary<string, string> fields = new Dictionary<string, string>();
            OracleDataReader reader = command.ExecuteReader();
4

2 に答える 2

19

あなたはこのようなことをすることができるはずです:

Dictionary<string, string> fields = new Dictionary<string, string>();
OracleDataReader reader = command.ExecuteReader();

if( reader.HasRows )
{
    for( int index = 0; index < reader.FieldCount; index ++ )
    {
        fields[ reader.GetName( index ) ] = reader.GetString( index );
    }    
}
于 2010-06-08T03:10:49.193 に答える
4

GetSchemaTableは、名前だけでなく、サイズ、タイプなど、列に関する多くの情報を返します。

辞書のキーを列名にし、値を行の値にする必要があると思います。もしそうなら、これはうまくいくはずです:

var dict = reader.GetSchemaTable().Rows.OfType<DataRow>().Select(
    r => r["ColumnName"].ToString()
).ToDictionary(
    cn => cn,
    cn => reader[cn].ToString()
);

GetValues()を使用して列の数を取得し、それぞれに対してGetName(int)を呼び出すこともできます。

于 2010-06-08T03:07:42.093 に答える