Windows 上で Postgres 12 を実行しており、ORM として Dapper を使用する .Net Core アプリを持っています。
次のクエリは正常に動作します。
var sql = "SELECT 1 FROM pg_roles WHERE rolname=@un"
var result = con.ExecuteScalar<int>(sql, new {un = "someuser"});
今、ロールを作成する SQL ステートメントを実行しようとしています。
var sql = @"CREATE ROLE @un WITH LOGIN NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION PASSWORD @pw";
con.Execute(sql, new {un = "someuser", pw = "somepass");
このクエリは次の例外で失敗します: Npgsql.PostgresException: '42601: "$1" またはその付近での構文エラー。
ここで何が足りないのでしょうか?
------------------------
ロールの名前は識別子です。識別子をパラメータとして渡すことはできません。名前を定数値として SQL 文字列に連結して、これを実行する必要があります。
var sql = @"CREATE ROLE someuser WITH LOGIN NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION PASSWORD @pw";
con.Execute(sql, new {pw = "somepass");
私は違いますパスワードをパラメータとして送信しても機能することは間違いありません。それをテストする必要があります。
共有
この回答を改善します
フォローする
2020 年 9 月 3 日 12:04 に回答
ユーザー330315
ユーザー330315
0