C# 从Access97 db读取无符号小整数

C# 从Access97 db读取无符号小整数,c#,ms-access-97,C#,Ms Access 97,我有一个古老的Access97数据库,其中包含天文数据,我想用在望远镜的指向软件中。赤经的小时和分钟被存储为UnsignedTinyInt 我假设UnsignedTinyInt是一个unsignedshort,或ushort。如果我编写以下代码,其中reader是OleDbDataReader,fld是序数值。显然,Int16是可用的最短整数 select myValue from myTable; ushort myValue; myValue = reader.GetInt16(fld);

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

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

select myValue from myTable;

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

确切的异常是无效的强制转换。OleDbDataReader中有许多Get方法可用,包括三个GetInt。无论我如何声明myValue,GetInt都不起作用。

我可以通过以下方法解决此问题:

select myValue from myTable;

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

为什么是乌什特?它既没有字典中字节字段的大小,也没有进行数学运算的int或uint的大小。@JonHanna,它努力获取我需要的信息。如图所示,Access97数据库系统中的unsigned tiny int非常小,您可以将其放入代码中的一个字节中,但它小于一个字节,甚至小于uint。在项目的最后一段代码中,我所做的只是将其作为一个常规整数存储在我创建的Sql Server数据库中,以保存我提取的数据。我在这里修改了我的答案,以回应那些不喜欢我使用ushort的用户的压力。哦,好吧。顺便说一下,我从未读完你的书,但还是觉得很有趣。快乐的小径!在两个世界的妥协中,ushort有点糟糕。byte或sbyte是访问中与tiny最直接的比较,具有大小优势,但任何算术或按位使用都会将其提升为int,因此使用它有一个速度优势,并且在操作后不必费心再次回溯,因此在两个极端中都有优势,但不在两者之间。这本书读起来最好,略读第一章,它必须得到它所得到的东西,但几年后回顾,我担心它的开头相当薄弱。我假设UnsignedTinyInt是一个不正确的unsignedshort。它是一个字节。GetInt不起作用,这是因为它们设计为短2字节、短4字节、长8字节,而您拥有的是一个1字节的字节。将来,您可以调用并检查返回的对象myValue.GetType,以查看OleDbDataReader认为该字段是什么类型,即或。此外,还可以参考。