MS Access“数字”类型对应于哪种 C# 数据类型?
Posted
技术标签:
【中文标题】MS Access“数字”类型对应于哪种 C# 数据类型?【英文标题】:To which C# data type does MS Access "Number" type correspond? 【发布时间】: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。
【参考方案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 的评论 - 听起来确实很相似。以上是关于MS Access“数字”类型对应于哪种 C# 数据类型?的主要内容,如果未能解决你的问题,请参考以下文章
使用 MS Access 的 C# 标准表达式中的数据类型不匹配?
我想知道 c# 中 ms access 数据库表列的确切数据类型(dbtype)