代码之家  ›  专栏  ›  技术社区  ›  Liu Peng

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

  •  5
  • Liu Peng  · 技术社区  · 17 年前

    我遇到了一个问题: 运行SubSonic时。示例。SimpleRepo项目基于SQLite提供程序。

    我喜欢表Categorys的列CategoryID的数据类型是' ',SQLite中的'integer'将返回为 ,同时类类别中的CategoryID的数据类型为

    我检查了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 ");
    

    如何解决数据类型转换错误?

    3 回复  |  直到 17 年前
        1
  •  6
  •   tchen    17 年前

    See the doc yourself (滚动到底部,64位ROWID部分)。

    以下是摘录:

    为了尽量减少存储空间,64位rowid被存储为变量 长度整数。0到127之间的行ID仅使用单个字节。 0到16383之间的行ID仅使用2个字节。高达2097152使用三个 九个字节的存储空间,因此不鼓励使用它们。当rowid是

    我很惊讶 Id

    CREATE TABLE "Example" (
        "Id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
        "Foo" TEXT NULL,
        "SomeDate" DATETIME NULL
    )  
    

    解释也在 64-bit ROWID section

    表的每一行都有一个唯一的行ID。如果表定义了一列 如果类型为“INTEGER PRIMARY KEY”,则该列将成为别名

    在SQLite 3.0版本中,rowid是一个64位有符号整数。

        2
  •  7
  •   user1151    17 年前

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

        3
  •  0
  •   Sean    14 年前

    我只是结结巴巴地完成了一个合并过程,取一个SQL Server DataTable并将其与SQLite DataTable(c#.NET win-forms应用程序)合并(追加)。您肯定需要将SQL Server数据库中的整数PK列设置为BIGINT才能使其运行。否则,当您在SQLite DataTable上调用merge时,会收到类型不匹配错误。