动态SQL参数化查询

问题描述 投票:0回答:1

我们正在使用 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);

但是这个仍然被声纳标记。

如果有人可以提供任何其他建议。

谢谢

c# .net sonarqube snowflake-cloud-data-platform
1个回答
0
投票

我在 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 之前查询字符串中出现的双引号数量。

© www.soinside.com 2019 - 2024. All rights reserved.