C# SQLite 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

我有一张桌子

创建表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, 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