gpt4 book ai didi

c# - SQLite 不在准备好的语句中保留我的前导零

转载 作者:搜寻专家 更新时间:2023-10-30 22:34:07 24 4
gpt4 key购买 nike

我很难坚持前导零。

我有一个看起来像这样的准备好的声明:

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);

经常有前导零的相关字段是“系统”。它是用这一行构建的:

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

如果我在 Item.System 从中提取的文本框中输入“0159”,在运行时我确实确认 Item.System 在准备 SQL 语句时确实保存了“0159”的值。这让我觉得我在数据库中将其转换为 System.Data.DbType.String 的类型在这里是有问题的。使用 SQLiteStudio 将数据直接输入数据库会保留前导零。

我不确定从这里到哪里去。 System.Data.DbType 中没有其他类型是我可以尝试的更高抽象文本。我不太确定从这里去哪里。如何在此处保留前导零?

编辑:类型说明

var AssetTagParam = new SQLiteParameter("@AssetTagParam", System.Data.DbType.Int32) { Value = item.AssetTag };
var VendorParam = new SQLiteParameter("@VendorParam", System.Data.DbType.String) { Value = item.Vendor };
var DeviceParam = new SQLiteParameter("@DeviceParam", System.Data.DbType.String) { Value = item.Device };
var AttributeParam = new SQLiteParameter("@AttributeParam", System.Data.DbType.String) { Value = item.Attribute };
var DeviceTypeParam = new SQLiteParameter("@DeviceTypeParam", System.Data.DbType.String) { Value = item.DeviceType };
var SystemParam = new SQLiteParameter("@SystemParam", System.Data.DbType.String) { Value = item.System };
var LocationParam = new SQLiteParameter("@LocationParam", System.Data.DbType.String) { Value = item.Location };
var OnLoanParam = new SQLiteParameter("@OnLoanParam", System.Data.DbType.Boolean) { Value = item.OnLoan };
var NotesParam = new SQLiteParameter("@NotesParam", System.Data.DbType.String) { Value = item.Notes };
var LastModifiedTimeParam = new SQLiteParameter("@LastModifiedTimeParam", System.Data.DbType.String) { Value = item.LastModifiedTime };
var LastModifiedPersonParam = new SQLiteParameter("@LastModifiedPersonParam", System.Data.DbType.String) { Value = item.LastModifiedPerson };
var IsDeletedParam = new SQLiteParameter("@IsDeletedParam", System.Data.DbType.Boolean) { Value = item.IsDeleted };

在DB端,除了AssetTag和AssetID是INTS之外,所有字段都是STRING类型。 OnLoan 和 IsDeleted 是 bool 值。

最佳答案

您可能落入了 this thread 中描述的同一个陷阱.

简而言之,SQLite 不理解“STRING”数据类型,在这种情况下,它采用默认的NUMERICaffinity”(请记住,与大多数情况相反数据库,SQLite 没有列类型,只有少数“亲和性”)。

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

关于c# - SQLite 不在准备好的语句中保留我的前导零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39579610/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com