Реклама:

Свойство FieldCount возвращает число столбцов в текущей записи ридера:

public int FieldCount {get;}

Доступ к отдельному столбцу возможен при помощи индексатора

public object this[ string ColumnName ] {get;} public object this[ int ColumnIndex ] {get;}

Для идентификации столбца при этом используется его строковое имя:

SqlDataReader r;

listBoxl.Items.Add(r["KK"].ToString()); либо индекс столбца в строке: listBoxl.Items.Add(r[0].ToString());

Лучше, конечно, использовать строковое имя столбца, поскольку в этом случае мы не привязаны к физическому порядку следования столбцов в строке. Это порядок запросто может поменяться, стоит нам внести коррективы в текст оператора SELECT, процедуры или функции, т. е. в тот запрос, результат выполнения которого и считывает ридер.

Обращение к индексатору ридера возвращает объект типа object, который еще нужно приводить к типу соответствующего столбца. Это не всегда удобно. Поэтому ридер снабдили группой методов вида

public XXX GetXXX(int ColumnIndex);

Каждый такой метод читает в ридере значение столбца, указанного по его индексу, приводя это значение к типу XXX:

public bool GetBoolean( int ColumnIndex ); public byte GetByte( int ColumnIndex ); public char GetChar( int ColumnIndex ); public DateTime GetDateTime( int ColumnIndex ); public decimal GetDecimal( int ColumnIndex ); public double GetDouble( int ColumnIndex ); public float GetFloat( int ColumnIndex ); public Guid GetGuid( int ColumnIndex ); public short GetInt16( int ColumnIndex ); public int GetInt32( int ColumnIndex ); public long GetInt64( int ColumnIndex ); public string GetString( int ColumnIndex );

public SqlBinary GetSqlBinary( int ColumnIndex ); public SqlBoolean GetSqlBoolean( int ColumnIndex ); public: SqlByte GetSqlByte( int ColumnIndex ); public: SqlDateTime GetSqlDateTime( int ColumnIndex ); public SqlDecimal GetSqlDecimal( int ColumnIndex ); public: SqlDouble GetSqlDouble( int ColumnIndex ); public SqlGuid GetSqlGuid( int ColumnIndex ); public SqlInt16 GetSqlInt16( int ColumnIndex ); public SqlInt32 GetSqlInt32( int ColumnIndex ); public SqlInt64 GetSqlInt64( int ColumnIndex ); public SqlMoney GetSqlMoney( int ColumnIndex ); public SqlSingle GetSqlSingle( int ColumnIndex ); public SqlString GetSqlString( int ColumnIndex );

Пример. При добавлении в список элемента управления ListBox значений столбцов из ридера первое значение берется как object, второе как string, третье также как string, четвертое как целочисленное.

SqlDataReader r;

listBox1.Items.Add(r["KK"].ToString() + (char)9 + r.GetString(l) + (char)9 + r.GetString(2) + (char)9 + r.GetInt32(3));

_I

Есть также два метода, берущие значение столбца как есть, в том формате, в котором они присутствуют в строке. В этом случае пользователь несет ответственность за то, чтобы применить это значение в приложении соответственно их типу.

public object GetValue( int ColumnIndex ); public object GetSqlValue( int ColumnIndex );

Например, пусть первый столбец ридера числового типа, поэтому при помещении в список элемента управления ListBox его нужно приводить к строковому виду. Пусть второй столбец ридера строкового типа, поэтому в приведении нет нужды, так как элемент коллекции Items объекта ListBox также строкового типа:


⇐ Предыдущая страница| |Следующая страница ⇒