SQLite不在预准备语句中保留我的前导零

时间:2016-09-19 18:14:17

标签: c# database sqlite

我很难让领先的零点坚持下去。

我有一份准备好的声明,如下所示:

c:
 \main
  \sub
    \working
     \sass
        config.rb
        test.scss
     \test
        style.css

通常具有前导零的相关字段是“系统”。它是用这条线构建的:

SQLiteCommand insertSQL = new SQLiteCommand(@"INSERT INTO Inventory(
            AssetTag, Vendor, Device, Attribute, DeviceType, System, Location, OnLoan, Notes, LastModifiedTime, LastModifiedPerson, IsDeleted)
            VALUES (@AssetTagParam, @VendorParam, @DeviceParam, @AttributeParam, @DeviceTypeParam, @SystemParam, @LocationParam, @OnLoanParam, @NotesParam, @LastModifiedTimeParam, @LastModifiedPersonParam, @IsDeletedParam)", conn);

如果我在Item.System提取的文本框中输入'0159',在运行时我确实确认Item.System确实在准备SQL语句时保持'0159'的值。这让我认为这种类型,我将其转换为DB,System.Data.DbType.String,这是错误的。使用SQLiteStudio将数据直接输入数据库会保留前导零。

我不知道从哪里开始。 System.Data.DbType中没有另一种类型,它是一个更高的文本抽象,供我尝试。我不确定从哪里开始。我怎样才能在这里保留我的前导零?

修改:输入说明

var SystemParam = new SQLiteParameter("@SystemParam", System.Data.DbType.String) { Value = item.System };

在数据库方面,除了AssetTag和AssetID之外,所有字段都是STRING类型,它们是INTS。 OnLoan和IsDeleted是BOOLEAN。

1 个答案:

答案 0 :(得分:2)

可能你正陷入this thread中描述的同一陷阱。

简而言之,SQLite不理解" STRING"数据类型,在这种情况下,它假定默认为NUMERIC" affinity" (请记住,与大多数数据库相反,SQLite没有列类型,只有少数几个'亲和力')。

尝试使用正确的(" TEXT")说明符重新创建表格。