3

我正在编写一些代码来为我的应用程序准备我的数据库。代码中有一些重复的 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 查询的可变部分——比如我可以使用存储过程参数的地方?

4

1 回答 1

2

如果我没记错的话,Dapper 使用参数化的 IDbCommand 来执行它的查询。

参数化查询只是字符串替换操作。

更具体地说,参数化查询允许您在查询中包含参数,发送这些参数的值,然后 SQL Server 处理编译查询并传递参数值。

如果您无法使用所需语法使用普通 ADO.NET 创建参数化查询,那么 Dapper.NET 也无法为您完成。

于 2011-06-07T19:38:31.107 回答