【问题标题】:To which C# data type does MS Access "Number" type correspond?MS Access“数字”类型对应于哪种 C# 数据类型?
【发布时间】:2013-11-02 09:29:15
【问题描述】:

根据http://msdn.microsoft.com/en-us/library/office/aa211091(v=office.11).aspx,MS Jet 数据库引擎没有“NUMBER”数据类型;然而,这就是我在我正在查询的表的 MS Access 设计视图中看到的 -

我通过查询检索到的第一列的数据类型是“NUMBER”数据类型。

当我尝试将该值转换为 Int32 和 Double 时,这段代码都会中断:

// A set comprised of two columns are returned from a query in cmd
using (OleDbDataReader oleDbD8aReader = cmd.ExecuteReader())
{
    while (oleDbD8aReader != null && oleDbD8aReader.Read())
    {
        //var accountID = oleDbD8aReader.GetString(0); // <-- this fails (it's a number, not a string)
        //var accountID = oleDbD8aReader.GetInt32(0);   // <-- this also fails!
        var accountID = oleDbD8aReader.GetDouble(0); // <-- as does this!
        var deptName = oleDbD8aReader.GetString(1);    
        . . .
    }
}

为什么无法转换为字符串、int 或 double?我应该把它转换成什么?

【问题讨论】:

  • 您是否尝试过查看oleDbD8aReader["fieldname"].GetType() 以查看其中是否包含有关返回内容的任何线索?
  • 正如老猫在《永不哭泣的狼》中所说的,“好主意!”它说 Int16。

标签: ms-access sqldatatypes type-conversion jet oledbdatareader


【解决方案1】:

Access 表设计器中的“数字”是数据类型的集合,而不是特定类型本身 - 您需要查看字段列表下方的字段属性以了解实际类型是什么。

或者,您可以通过编程方式查找字段类型。使用 Delphi 和 DAO,代码如下所示:

uses
  DAO_TLB; //may need importing first via Component|Import Component

procedure Foo;
var
  Engine: DBEngine;
  DB: Database;
  Table: TableDef;
begin
  Engine := CoDBEngine.Create;
  DB := Engine.OpenDatabase('C:\Somewhere\Database.mdb',
    {exclusively?}False, {read-only?}True, '');
  Table := DB.TableDefs['MyTableName'];
  case Table.Fields['MyFieldName'].Type_ of
    dbBoolean: ;
    dbByte: ;
    dbInteger: ;
    dbLong: ;
    dbCurrency: ;
    dbSingle: ;
    dbDouble: ;
    dbDate: ;
    dbBinary: ;
    dbText: ;
    dbLongBinary: ;
    dbMemo: ;
    dbGUID: ;
    dbBigInt: ;
    dbVarBinary: ;
    dbChar: ;
    dbNumeric: ;
    dbDecimal: ;
    dbFloat: ;
    dbTime: ;
    dbTimeStamp: ;
  end;
end;

我会假设 C#/ADO.NET 等价物会是类似的。

【讨论】:

  • 啊,我刚刚注意到 Gord Thompson 的评论 - 听起来确实很相似。
猜你喜欢
  • 2023-03-09
  • 2012-05-13
  • 1970-01-01
  • 2011-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-22
  • 1970-01-01
相关资源
最近更新 更多