【发布时间】:2018-01-25 17:53:30
【问题描述】:
我创建了列类型为 INT8 的表。当我尝试使用 SQLiteCommand.ExecuteScalar(C#) 执行选择查询时,它返回 SByte 而不是 long。
为什么?
【问题讨论】:
-
请重新阅读您输入的内容...实际上 int8 是一个字节,而 long 是 64 位...
-
根据 sqlite docs INT8 很长。数字 8 表示字节,而不是位。也许答案在这里:link
-
你完全正确,在 C# 中它是 System.SByte 类型。但我想知道,如果我执行查询“ALTER TABLE a ADD COLUMN b INT8;”,将创建哪一列。 SQLiteApi 没有给出明确的答案,是 8 字节还是 8 位。我做了小实验。我插入了值“129”并尝试以不同的方式读取它。主要的魔力在于 SQLiteCommand.ExecuteScalar 将此值读取为 '-127'(System.SByte),而 SQLiteDataReader.GetLong 读取相同的字段为 '129'(System.Int64)。
-
更新。 System.Data.SQLite.dll 来源的行:
new SQLiteDbTypeMapping("INT8", DbType.SByte, false).
标签: c# sqlite system.data.sqlite