Как типы данных базы данных возвращаются в классе 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()
посмотреть порядковый номер столбцов во время выполнения.