У меня есть эта таблица
CREATE TABLE MyTable
(Id
NUMERI C NOT NULL, UnsignedValue
NUMERI C NOT NULL DEFAULT 0)
Я должен сохранить число как Id и целое число без знака в столбце «UnsignedValue». Моя вставка с использованием 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 для SQLite, в этом столбце я вижу отрицательное значение . Меня беспокоит то, что я использую Dapper для отображения источника данных в моей объектной модели. Запрос SELECt дает исключение, потому что значение слишком мало для типа uint.
Я проверил IDbParameter.DbType во время выполнения, и это UInt32, как и ожидалось.
Я что-то упустил?
EDIT :
Как указано в комментариях ниже, я попытался использовать тип столбца INTEGER вместо NUMERI C. Но результат тот же.
Я также заметил, что сохраненное отрицательное значение совпадает с явным приведением Int32 к myUnsignedValue.