2013-10-23 65 views
0

根据http://msdn.microsoft.com/en-us/library/office/aa211091(v=office.11).aspx,则MS Jet数据库引擎不具有“NUMBER”的数据类型;然而,这就是我在我查询表的MS Access的设计视图中看到 - 我正在检索机智的查询是“一把手”的数据类型的第一列的MS Access“Number”类型对应哪个C#数据类型?

数据类型。

我有了这个代码,打破,无论是当我尝试将该值转换为int32和双:

// 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?我应该把它转换成什么呢?

+2

你试过考虑看看'oleDbD8aReader [“字段名”]的GetType()',看看是否能拥有任何线索,返回什么? –

+0

正如老猫在“Never Cry Wolf”中所说的,“好主意!”它说Int16。 –

回答

2

在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相当于将类似十岁上下。

+0

Aaaand我刚刚注意到戈德汤普森的评论 - 这将通过它的声音确实是相似的十岁上下。 –