使用Dapper在Postgres 12上创建角色的SQL语句失败

使用Dapper在Postgres 12上创建角色的SQL语句失败,sql,postgresql,.net-core,dapper,Sql,Postgresql,.net Core,Dapper,我在Windows上运行Postgres 12,有一个.Net核心应用程序,它使用Dapper作为ORM: 以下查询工作正常: var sql = "SELECT 1 FROM pg_roles WHERE rolname=@un" var result = con.ExecuteScalar<int>(sql, new {un = "someuser"}); 此查询失败,出现以下异常:Npgsql.postgresception:“4260

我在Windows上运行Postgres 12,有一个.Net核心应用程序,它使用Dapper作为ORM:

以下查询工作正常:

var sql = "SELECT 1 FROM pg_roles WHERE rolname=@un"
var result = con.ExecuteScalar<int>(sql, new {un = "someuser"});
此查询失败,出现以下异常:Npgsql.postgresception:“42601:在“$1”处或附近出现语法错误。”


我在这里遗漏了什么?

角色的名称是一个标识符。不能将标识符作为参数传递,需要将名称作为常量值连接到SQL字符串中,以便执行以下操作:

var sql = @"CREATE ROLE someuser WITH LOGIN NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION PASSWORD @pw";     
con.Execute(sql, new {pw = "somepass");
我也不完全确定将密码作为参数发送是否有效。你需要对此进行测试

var sql = @"CREATE ROLE someuser WITH LOGIN NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION PASSWORD @pw";     
con.Execute(sql, new {pw = "somepass");