C# SQLite C插入无符号整数存储负数
我有一张桌子 创建表MyTable Id NUMERIC非空,无符号值NUMERIC 不为空默认值0 我必须在“UnsignedValue”列中保存一个数字作为Id和一个无符号整数。 我的插入使用C:C# SQLite C插入无符号整数存储负数,c#,sqlite,C#,Sqlite,我有一张桌子 创建表MyTable Id NUMERIC非空,无符号值NUMERIC 不为空默认值0 我必须在“UnsignedValue”列中保存一个数字作为Id和一个无符号整数。 我的插入使用C: int id = 1; uint myUnsignedValue = 3990427167; using (IDbCommand cmd = connection.CreateCommand()) { cmd.CommandText = $@"INSERT INTO MyTable (Id
int id = 1;
uint myUnsignedValue = 3990427167;
using (IDbCommand cmd = connection.CreateCommand())
{
cmd.CommandText = $@"INSERT INTO MyTable (Id, UnsignedValue) VALUES (@id, @value)";
IDbDataParameter par = cmd.CreateParameter();
par.ParameterName = "@id";
par.Value = id;
cmd.Parameters.Add(par);
par = cmd.CreateParameter();
par.ParameterName = "@value";
par.Value = myUnsignedValue;
cmd.Parameters.Add(par);
cmd.ExecuteNonQuery();
}
插入可以工作,但如果我使用DB Browser for SQLite查看,则在该列中会看到一个负值。
我担心的是,我正在使用Dapper将数据源映射到对象模型。SELECt查询出现异常,因为该值对于uint类型来说太小
我在运行时检查了IDBPAMETER.DbType,它与预期的一样是UInt32
我错过什么了吗
编辑:
正如下面评论中所建议的,我尝试使用整数列类型而不是数字列类型。但结果是一样的
我还注意到,存储的负值与显式Int32转换为myUnsignedValue的值相同。我怀疑SQLite没有正确地确定值-首先它没有无符号整数-它们都是有符号的64位值,其次它确定给定值的大小,我认为这是错误的 从您描述的内容来看,SQLite似乎正确地将参数的大小确定为32位,然后将其视为有符号值,因为它没有无符号整数。因此,当该值被视为有符号32位整数时,它会给您一个负值
将变量声明为Int64,它应该正确存储值。可能是添加参数的方法错误。您应该尝试明确指定类型的方法。在这里,您的值大于max int并转换为negaviveCan,您可以检查错误的不仅仅是DB Browser吗?使用命令行并选择值,是否仍然得到负值?@DragandDrop即使指定参数类型,结果也是一样的。顺便说一下,我的价值低于。所以我仍然不明白为什么它被转换为负数。听起来SQLite正确地确定了参数的大小为32位,然后将其视为有符号值-因为它没有无符号值。我会尝试将其声明为Int64