SqLite Dapper Insufficient parameters supplied to the command

2022-10-17  乐帮网

c# sqlite dapper

使用C#操作SQLite时遇到一个错误:Insufficient parameters supplied to the command,网上搜索原因大多都是复制粘贴的,说是参数命令的长度太长,看到这个结论首先就判定这个人的编程经验是零,他可能都不知道什么是语言编译器。还有的是说把参数换成?这种方式,等等。

code = Unknown (-1), message = System.Data.SQLite.SQLiteException (0x80004005): unknown error
Insufficient parameters supplied to the command
   在 System.Data.SQLite.SQLiteStatement.BindParameter(Int32 index, SQLiteParameter param)
   在 System.Data.SQLite.SQLiteStatement.BindParameters()
   在 System.Data.SQLite.SQLiteCommand.BuildNextCommand()
   在 System.Data.SQLite.SQLiteCommand.GetStatement(Int32 index)
   在 System.Data.SQLite.SQLiteDataReader.NextResult()
   在 System.Data.SQLite.SQLiteDataReader..ctor(SQLiteCommand cmd, CommandBehavior behave)
   在 System.Data.SQLite.SQLiteCommand.ExecuteReader(CommandBehavior behavior)
   在 System.Data.SQLite.SQLiteCommand.ExecuteNonQuery(CommandBehavior behavior)
   在 System.Data.SQLite.SQLiteCommand.ExecuteNonQuery()
   在 Dapper.SqlMapper.ExecuteCommand(IDbConnection cnn, CommandDefinition& command, Action`2 paramReader)
   在 Dapper.SqlMapper.ExecuteImpl(IDbConnection cnn, CommandDefinition& command)
   在 Dapper.SqlMapper.Execute(IDbConnection cnn, String sql, Object param, IDbTransaction transaction, Nullable`1 commandTimeout, Nullable`1 commandType)

下面说的下正确的错误原因:
这个错误是由Dapper传参数引起的。可能你的代码如下:

try
            {
                string sql = @"REPLACE into configure(code,name,status,val,updatedate,updater,remark)
VALUES(@code,@name,@status,@val,@updatedate,@updater,@remark);";

                using (SQLiteConnection conn = new SQLiteConnection(_connectionStr))
                {
                    conn.Open();
                    conn.Execute(sql, model);
                }
            }
            catch (Exception ex)
            {
                _logger.Error($"插入或更新configure表出现异常,ex:{ex.Message}");
            }

model是我们的参数,是一个强类型的类。你的写法如下:

Class PModel{
public string Name;
public uint Age;
}

正确的写法应该是:

Class PModel{
public string Name{get;set;}
public uint Age{get;set;}
}

这个叫少了类属性的索引器。这样写看一看你的错误修复了吗?

公众号二维码

关注我的微信公众号
在公众号里留言交流
投稿邮箱:1052839972@qq.com

庭院深深深几许?杨柳堆烟,帘幕无重数。
玉勒雕鞍游冶处,楼高不见章台路。
雨横风狂三月暮。门掩黄昏,无计留春住。
泪眼问花花不语,乱红飞过秋千去。

欧阳修

付款二维码

如果感觉对您有帮助
欢迎向作者提供捐赠
这将是创作的最大动力