当前位置:  开发笔记 > 编程语言 > 正文

关于SQLite的整数和int数据类型的问题

如何解决《关于SQLite的整数和int数据类型的问题》经验,为你挑选了2个好方法。

我遇到了一个问题:在运行基于SQLite提供程序的SubSonic.Examples.SimpleRepo项目时,无法将类型为"System.Int64"的对象转换为类型"System.Int32".

我喜欢表类别列CategoryID的数据类型是' 整数 ',而SQLite中的'整数'将作为Int64返回,同时ClassID中的CategoryID数据类型为int,发生上述错误.

我检查了SubSonic的源代码:\ SubSonic.Core\SQLGeneration\Schema\SQLiteSchema.cs并找到以下代码:

else if (column.IsPrimaryKey && column.DataType == DbType.Int32
    || column.IsPrimaryKey && column.DataType == DbType.Int16
    || column.IsPrimaryKey && column.DataType == DbType.Int64
    )
    sb.Append(" integer ");

谁能告诉我这些代码的目的?如何解决数据类型转换错误?



1> 小智..:

在SQLite中,PrimaryKey设置为int 64(long) - 所以你需要将你的设置为long.



2> tchen..:

有趣的是,我刚刚在一小时前阅读了sqlite3文档.所以你很幸运:)

请亲自查看文档 (滚动到底部,64位ROWIDs部分).

这是摘录:

为了最小化存储空间,64位rowid存储为可变长度整数.0到127之间的行只使用一个字节.0到16383之间的行数仅使用2个字节.最多2097152使用三个字节.等等.允许使用负rowid,但它们总是使用9个字节的存储空间,因此不鼓励使用它们.当SQLite自动生成rowid时,它们将始终为非负数.

推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有