我正在编写一些代码,为我的应用程序准备数据库。在代码中,当我创建表时,有一些重复的SQL语句,我想在某些方法中隐藏它们(现在只有两个:创建主键并使表的id成为自动增加的一个Postgres的)。对于主键的简单情况,我首先写了一个这样的函数:
public void MakePrimaryKey(DbConnection conn, string tblName, string colName)
{
conn.Execute(@"
ALTER TABLE ""@tblName""
ADD CONSTRAINT ""@constrName"" PRIMARY KEY(""@colName"")
", new { tblName = tblName,
constrName = tblName + "_pkey",
colName = colName } );
}
经过多次摆弄错误和异常之后,我终于得出结论,以这种方式使用参数并不是真的支持,所以我切换到传统的string.Format()
调用,一切都很顺利。
但我并不满意。这种使用参数的方式真的不受支持吗?如果是这样,我可以安全地使用这些参数的地方是什么?仅适用于SQL查询的可变部分 - 例如我可以使用存储过程参数的地方?
答案 0 :(得分:2)
如果我没记错的话,Dapper使用参数化的IDbCommand来执行查询。
参数化查询只是字符串替换操作。
更具体地说,参数化查询允许您在查询中包含参数,发送这些参数的值,然后SQL Server处理编译查询并传递参数的值。
如果无法使用所需语法使用普通ADO.NET创建参数化查询,Dapper.NET也无法为您执行此操作。