Данное руководство устарело. Актуальное руководство: по ADO.NET и работе с базами данных в .NET 6
В прошлой теме для получения результатов SqlDataReader использовался метод GetValue
, который возвращал значение определенного столбца
в текущей ячейки в виде объекта типа object. Однако в ряде случаев такой способ не является оптимальным. Например, мы знаем, что в третьем
столбце хранится возраст пользователя, который представляет целое число, и в программе мы хотели бы его использовать как целое число.
Так как GetValue возвращает объект типа object, то, чтобы его использовать, к примеру, как число, нам надо его привести к типу int. Однако мы моем выбрать другой путь - использовать типизированные методы. Итак,
изменим код программы следующим образом:
static void Main(string[] args) { string connectionString = @"Data Source=.\SQLEXPRESS;Initial Catalog=usersdb;Integrated Security=True"; string sqlExpression = "SELECT * FROM Users"; using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); SqlCommand command = new SqlCommand(sqlExpression, connection); SqlDataReader reader = command.ExecuteReader(); if(reader.HasRows) // если есть данные { // выводим названия столбцов Console.WriteLine("{0}\t{1}\t{2}", reader.GetName(0), reader.GetName(1), reader.GetName(2)); while (reader.Read()) // построчно считываем данные { int id = reader.GetInt32(0); string name = reader.GetString(1); int age = reader.GetInt32(2); Console.WriteLine("{0} \t{1} \t{2}", id, name, age); } } reader.Close(); } Console.Read(); }
Для получения данных здесь теперь используются методы GetInt32()
и GetString()
, которые возвращают объекты
типа int и string соответственно. Причем поскольку мы знаем, что в столбце id хранится число, то мы можем получить его именно с помощью
метода GetInt32, но никак не GetString. И также в этот метод передается номер столбца в таблице (нумерация опять же начинается с нуля).
Для получения данных каждого примитивного типа есть свой метод:
Тип sql | Тип .NET | Метод |
bigint | Int64 | GetInt64 |
binary | Byte[] | GetBytes |
bit | Boolean | GetBoolean |
char | String и Char[] | GetString и GetChars |
datetime | DateTime | GetDateTime |
decimal | Decimal | GetDecimal |
float | Double | GetDouble |
image и long varbinary | Byte[] | GetBytes и GetStream |
int | Int32 | GetInt32 |
money | Decimal | GetDecimal |
nchar | String и Char[] | GetString и GetChars |
ntext | String и Char[] | GetString и GetChars |
numeric | Decimal | GetDecimal |
nvarchar | String и Char[] | GetString и GetChars |
real | Single (float) | GetFloat |
smalldatetime | DateTime | GetDateTime |
smallint | Intl6 | GetIntl6 |
smallmoney | Decimal | GetDecimal |
sql variant | Object | GetValue |
long varchar | String и Char[] | GetString и GetChars |
timestamp | Byte[] | GetBytes |
tinyint | Byte | GetByte |
uniqueidentifier | Guid | GetGuid |
varbinary | Byte[] | GetBytes |
varchar | String и Char[] | GetString и GetChars |