小巧玲珑:我可以使用参数吗?

时间:2011-06-07 19:33:27

标签: parameter-passing npgsql dapper

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

1 个答案:

答案 0 :(得分:2)

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

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

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

如果无法使用所需语法使用普通ADO.NET创建参数化查询,Dapper.NET也无法为您执行此操作。