从 Access 97 db 中读取 unsigned tinyint

Posted

技术标签:

【中文标题】从 Access 97 db 中读取 unsigned tinyint【英文标题】:Reading unsigned tiny int from Access97 db 【发布时间】:2017-12-23 21:44:14 【问题描述】:

我有一个古老的 Access97 数据库,其中包含我想在望远镜的指向软件中使用的天文数据。赤经的小时和分钟存储为 UnsignedTinyInt。

我假设 UnsignedTinyInt 是一个 unsigned short 或 ushort。如果我编写以下代码,其中“reader”是 OleDbDataReader,而 fld 是序数值。显然,Int16 是可用的最短整数。

select myValue from myTable;

ushort myValue;
myValue = reader.GetInt16(fld);

确切的例外是无效的演员表。 OleDbDataReader 中有许多 Get 方法可用,包括三个 GetInt。无论我如何声明 myValue,GetInt 都不起作用。

【问题讨论】:

I am assuming UnsignedTinyInt is an unsigned short 这是不正确的。这是一个byte No GetInt works 那是因为它们是为(2 个字节)short、(4 个字节)int 和(8 个字节)long 而设计的——而你所拥有的是(1字节)byte. 以后您可以调用 object GetValue(int ordinal) 并检查返回的对象 (myValue.GetType()) 以查看 OleDbDataReader 认为该字段是什么类型,或者 GetSchemaTable 还有this table可以咨询。 【参考方案1】:

我能够解决这个问题:

select myValue from myTable;

byte myValue;
myValue = reader.GetByte(fld);

【讨论】:

为什么是ushort?它既没有字典中 byte 字段的大小,也没有 intuint 的大小。 @JonHanna,它可以获取我需要的信息。如前所述,Access97 数据库系统中的 unsigned tiny int 非常小,当然您可以将其放入代码中的一个字节中,但它小于一个字节甚至 uint。在项目的最终代码中,我所做的只是将它作为常规整数存储在我创建的 Sql Server 数据库中,以保存我正在提取的数据。我在这里修改了我的答案,以应对不喜欢我使用 ushort 的用户的压力。那好吧。顺便说一句,我没有读完你的书,但觉得它很有趣。快乐的小径! ushort 是两全其美的妥协。 byte(或 sbyte,这是 Access 中与 tiny 最直接的比较)具有大小优势,但在任何算术或按位使用时,它都会被提升为 int,因此使用它有速度优势,而不必费心手术后又回弹,所以两端各有优势,中间没有。 (这本书最好是略读第一章,它必须把它得到的东西让开,让开,但几年后回头看,恐怕它开始相当薄弱)。

以上是关于从 Access 97 db 中读取 unsigned tinyint的主要内容,如果未能解决你的问题,请参考以下文章

在 Access 97 的 SQL 查询中访问另一个受密码保护的数据库

如何为从 Access DB 读取的 Datafactory 指定“只读”

ASP.NET 无法读取网络文件夹中的 Access DB

如何在 Spring 批处理中读取 MS Access db(.mdb 文件)并加载到 mysql db

从 access 97 数据库中获取表/模式

无法使用 Ucanaccess 3.0.6 将值插入 access 97。它显示访问是只读的