0

我搜索并发现很少的结果。我发现 DataColums 有一些数据类型属性,但是当从 SQL Server 数据库中检索数据时,检索到的数据类型是什么?我正在使用 aSqlDataAdapter来填充 a 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,那又是什么呢?我是否需要先将它们转换为字符串,然后再将它们转换为我需要的其他数据类型?

4

2 回答 2

2

那么,dtt.Rows[0][0]如果数据库列数据类型是bigint、或int,那又是什么呢?datebit

分别是一个盒装Int64、一个盒装Int32、一个盒装DateTime和一个盒装Boolean。这就是为什么这个表达式的返回类型是Object- 以便它可以返回一个适当类型的值。您需要做的所有事情(知道应该返回什么类型)就是插入一个强制转换/取消框 - 除非您希望继续将它们全部视为Objects.

我同意安东尼奥的评论 - 最好按名称而不是按序号位置访问列 - 您可以使用接受strings 而不是ints 的重载运算符,或者至少IndexOf()用于查找列的序号位置在运行时。

于 2012-04-28T11:39:18.373 回答
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")];
于 2012-04-28T12:03:19.297 回答