使用双引号和参数添加到查询

Work with double quotes and parameter adding to a query

我可以在 PgAdminIII 中 运行 肯定的原始查询:

SELECT * FROM oestrat."Themenfeld"

oestratThemenfeld 是来自 Winform 文本框的字符串。

所以我在 VS 中的查询是:

string qry = "SELECT * FROM @schema.\"@line\"";

NpgsqlCommand cmd = conn.CreateCommand();
cmd.Parameters.Add(new NpgsqlParameter("@schema", tbSchema.Text)); // tbSchema.Text = oestrat
cmd.Parameters.Add(new NpgsqlParameter("@line", l)); // string l = Themenfeld

cmd.CommandText = qry;

conn.Open();
NpgsqlDataReader dr = cmd.ExecuteReader();

while (dr.Read()) <<< ERROR
{
     ....
}

它总是捕获异常:

42601: syntax error at or near "@"

我不相信您可以将 table 名称指定为参数...只能将 指定为参数。

相反,要么有一个允许 table 名称的白名单,要么至少有一个允许 table 名称中的 个字符 的白名单,将其应用于您的用户输入,然后 - 小心地 - 动态构建 SQL。

只需将架构和 table 名称解析为字符串...

string qry = $"SELECT * FROM {tbSchema.Text}.{l}";

显然您已经为 SQL 注入清理了这些输入值...