我搜索过,发现的结果令人惊讶。我发现DataColums有一些数据类型属性,但是当从SQL服务器数据库中检索数据时,检索的数据的数据类型是什么?我正在使用SqlDataAdapter
来填充DataTable
。要获得这些值,我的工作方式如下:
DataTable dtt = Database.get(SQLString); //pseudo-code
string value = dtt.Rows[0][0]; //Or is this a string?
那么,如果数据库列数据类型是bigint,int,date或bit,那么dtt.Rows[0][0]
中的内容是什么?
我是否需要先将它们转换为字符串然后将它们转换为我需要的其他数据类型?
答案 0 :(得分:2)
那么,如果数据库列数据类型是
dtt.Rows[0][0]
,bigint
,int
或date
,那么bit
中的内容是什么?
分别装箱Int64
,装箱Int32
,装箱DateTime
和装箱Boolean
。这就是为什么此表达式的返回类型为Object
- 以便它可以返回适当类型的值。所有你需要做的(知道应该返回什么类型)是插入一个演员/取消框 - 除非你希望继续将它们全部视为Object
。
我同意Antonio的评论 - 最好是按名称而不是按顺序访问列 - 你可以使用接受string
而不是int
s的重载运算符,或者至少使用IndexOf()
在运行时查找列序号位置。
答案 1 :(得分: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")];