我有一个Test
模型班:
public class Test
{
public string One;
public int Two;
}
我有一个test
表:
CREATE TABLE "test"
(
"one" TEXT NOT NULL,
"two" INTEGER NOT NULL
);
尝试执行此代码时:
using (IDbConnection con = new SQLiteConnection(ConfigurationManager.ConnectionStrings["database"].ConnectionString))
{
con.Execute("INSERT INTO test VALUES (@One, @Two)", new Test
{
One = "hello",
Two = 123
});
}
我收到此错误:
代码=未知(-1),消息= System.Data.SQLite.SQLiteException(0x80004005):未知错误
提供给命令的参数不足
我尽了一切,找不到原因。
答案 0 :(得分:1)
Dapper要求.execute()命令的命令参数为“匿名”,“字符串”,“列表”和“动态”,因此不支持传递键入的对象
using (IDbConnection con = new SQLiteConnection(ConfigurationManager.ConnectionStrings["database"].ConnectionString))
{
con.Execute("INSERT INTO test (one, two) VALUES (@One, @Two)", new
{
One = "hello",
Two = 123
});
}
使用测试对象。</ strong>
using (IDbConnection con = new SQLiteConnection(ConfigurationManager.ConnectionStrings["database"].ConnectionString))
{
Test tobj = new Test();
tobj.One = "hello";
tobj.Two = 123;
con.Execute("INSERT INTO test (one, two) VALUES (@One, @Two)", tobj);
}
答案 1 :(得分:1)
Dapper不知道如何将您的类分解为两个变量。参见https://github.com/StackExchange/Dapper/issues/540。 您可以在Insert语句中使用1个参数并传递类,也可以在2个参数中传递各个参数,如下所示。
DynamicParameters parameters = new DynamicParameters();
parameters.Add("One", Test.One, DbType.String, ParameterDirection.Input);
parameters.Add("Two", Test.Two, DbType.Int32, ParameterDirection.Input);
using (IDbConnection con = new SQLiteConnection(ConfigurationManager.ConnectionStrings["database"].ConnectionString))
{
con.Execute("INSERT INTO test VALUES (@One, @Two)", parameters);
}