我们正在使用 Snowflake 客户端 nuget 包并创建动态查询,如下所示:
using Snowflake.Client;
using (var conn = new SnowflakeDbConnection())
{
conn.ConnectionString = ConnectionString;
conn.Open();
var cmd = new SnowflakeDbCommand(conn);
cmd.CommandText = $"select count(*) from {tableName}";
//other code goes here
}
我们正在使用上面的代码,但我们的声纳不断标记动态 SQL 查询,如下所示:
确保使用动态格式化的 SQL 查询在这里是安全的。
我们尝试使用此处提到的参数:
使用 Snowflake 进行参数化查询并传递来自 Snowflake .NET Connector 的值
但是这样命令就会失败并为空。
我们还尝试使用 string.format 作为:
string.Format("select count(*) from \"{0}\"", tableName);
但是这个仍然被声纳标记。
如果有人可以提供任何其他建议。
谢谢
我在 SQL 和 Python 中做过类似的事情,但没有在 .NET 中做过。所以你的里程可能会有所不同。
当我无法进行字符串替换时,我通常会在初始 SQL 调用之外创建一个变量。
using Snowflake.Client;
var sqlCall = "select count(*) from \"" + tableName + "\"";
using (var conn = new SnowflakeDbConnection())
{
conn.ConnectionString = ConnectionString;
conn.Open();
var cmd = new SnowflakeDbCommand(conn);
cmd.CommandText = sqlCall;
//other code goes here
}
这通常对我来说效果很好。您应该注意的是在提交到 cmd.CommandText 之前查询字符串中出现的双引号数量。