【问题标题】:How are database datatypes returned in DataColumn class?DataColumn 类中如何返回数据库数据类型?
【发布时间】:2012-04-28 11:24:46
【问题描述】:

我进行了搜索,发现的结果非常少。我发现 DataColums 有一些数据类型属性,但是当从 SQL Server 数据库中检索数据时,检索到的数据类型是什么?我正在使用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] 中的内容是什么? 我需要先将它们转换为字符串,然后再将它们转换为我需要的其他数据类型吗?

【问题讨论】:

  • 请发布您的表架构,并且您应该按名称访问列,并且使用 Field 和 SetField DataRow 扩展方法更容易
  • 在第二行设置断点,然后在调试器中检查值可以很快回答你的问题。
  • @AntonioBakula 架构是什么意思?抱歉,我对数据库很陌生……但我怀疑你需要知道我的架构。我只想知道数据类型是否已填写以及如何最好地将它们转换为 C# 数据类型...
  • 表模式我的意思是你的SQL和数据库中使用的字段的类型,类型在数据库中定义
  • @Damien_The_Unbeliever 你是对的,但我希望在没有反复试验的情况下做到这一点......我希望这是对 SO 提出诉讼的正当理由,所以我不不必摆弄...

标签: c# sql-server-2008-r2 sqldatatypes datacolumn


【解决方案1】:

这取决于如何在数据库中定义,例如假设你有这个表:

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")];

【讨论】:

    【解决方案2】:

    如果数据库列数据类型为bigintintdatebit,那么dtt.Rows[0][0] 中的内容是什么?

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

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

    【讨论】:

      猜你喜欢
      • 2014-06-11
      • 2014-12-13
      • 1970-01-01
      • 1970-01-01
      • 2019-11-08
      • 2013-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多