Как типы данных базы данных возвращаются в классе DataColumn?

Я искал и нашел удивительно мало результатов. Я обнаружил, что существует некоторое свойство типа данных для DataColums, но при извлечении данных из базы данных сервера SQL, какой тип данных извлекается? Я работаю с SqlDataAdapter заполнить DataTable, Чтобы получить значения, я работаю следующим образом:

DataTable dtt = Database.get(SQLString); //pseudo-code
string value = dtt.Rows[0][0]; //Or is this a string?

Так что же в dtt.Rows[0][0] если тип данных столбца базы данных - это bigint, int, date или bit? Нужно ли сначала преобразовывать их в строку, а затем преобразовывать их в другие типы данных, которые мне нужны?

2 ответа

Решение

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

CREATE TABLE [dbo].[Test](
    [ID] [int] NOT NULL,
    [Name] [nvarchar](128) NOT NULL,
    [Birthday] [datetime]) 

тогда вы можете получить доступ к первой строке следующим образом:

DataTable dtt = Database.get("Select * from Test"); //pseudo-code
DataRow rw = dtt.Rows[0];
int id = rw.Field<int>("ID");
string name = rw.Field<string>("Name");
DateTime dt = rw.Field<DateTime>("Birthday");

или же

DataTable dtt = Database.get("Select * from Test"); //pseudo-code
int id = (int) dtt[0]["ID"];
string name = (string) dtt[0]["Name"];
DateTime dt = (DateTime) dtt[0]["Birthday")];

Так что же в dtt.Rows[0][0] если тип данных столбца базы данных bigint, int, date или же bit?

В штучной упаковке Int64 в штучной упаковке Int32 в штучной упаковке DateTime и в штучной упаковке Boolean соответственно. Вот почему тип возвращаемого значения этого выражения Object - чтобы он мог вернуть значение соответствующего типа. Все, что вам нужно сделать (зная, какой тип должен был быть возвращен), это вставить бросок / распаковать - если вы не хотите продолжать рассматривать их как Object s.

И я согласен с комментарием Антонио - было бы предпочтительнее получать доступ к столбцам по имени, а не по порядковой позиции - вы можете использовать перегруженные операторы, которые принимают string скорее, чем int или, по крайней мере, использовать IndexOf() посмотреть порядковый номер столбцов во время выполнения.

Другие вопросы по тегам