从 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
字段的大小,也没有 int
或 uint
的大小。
@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 指定“只读”