【问题标题】:C# Oracle command Parameters add. How can I add part of the text itself into the command text?C# Oracle 命令参数添加。如何将部分文本本身添加到命令文本中?
【发布时间】:2018-09-05 18:19:14
【问题描述】:

例如下面是我的代码:

ss.StoreNumber 是来自用户的字符串,store_no 是数据库中的 int 类型。

string sql = "SELECT * FROM SALES_STATUS WHERE store_no = :SerchStore";
//Creating cmd using sql and conn
OracleCommand cmd = new OracleCommand(sql, conn);
//Create Parameters to add value
if (int.TryParse(ss.StoreNumber, out int n) == true)
{
cmd.Parameters.Add("SerchStore", int.Parse(ss.StoreNumber));
}
else
{
cmd.Parameters.Add("SerchStore", "store_no");
}

简单的函数,我想创建一个SQL应用程序,如果用户输入商店编号,那么它将返回商店编号的销售状态。

否则,如果用户没有输入任何内容或在商店编号文本框中输入任何非数字信息,那么它应该返回来自所有商店的信息。

我使用了以下代码:

cmd.Parameters.Add("SerchStore", "store_no");

因为我想把它变成这个查询,它在 Oracle Develoepr 中工作:

SELECT * FROM SALES_STATUS WHERE store_no = store_no;

所以我的问题是,我应该在“X”下面输入什么才能使查询成为我想要的上面的查询?

cmd.Parameters.Add("SerchStore", X);

【问题讨论】:

    标签: c# sql oracle


    【解决方案1】:

    为此,我只需运行一个不同的查询:

    string sql = "";
    if (int.TryParse(ss.StoreNumber, out int n) == true)
    {
      sql = "SELECT * FROM SALES_STATUS WHERE store_no = :SerchStore";
    }
    else
    {
      sql = "SELECT * FROM SALES_STATUS;"
    }    
    //Creating cmd using sql and conn
    OracleCommand cmd = new OracleCommand(sql, conn);
    
    //Create Parameters to add value
    if (int.TryParse(ss.StoreNumber, out int n) == true)
    {
      cmd.Parameters.Add("SerchStore", int.Parse(ss.StoreNumber));
    }
    

    如果它在存储过程中,您可能会执行“OR :SerchStore is NULL”之类的操作,但由于您是从 C# 代码发送查询,因此只需发送您想要发送的查询。

    【讨论】:

    • 感谢您的回答。但我试图不创建 2 个查询。因为这是一个虚拟查询,所以我的真实查询很长,包括 3 个参数,它们都可以为空。所以我需要创建 6 个查询...无论如何我可以在一个查询中完成它吗?
    • 所以你把“OR is null”放到你的查询中。 select * from your_table where (your_column = :your_parameter or :your_parameter is null)
    • 或动态构建查询 - 无需编写多个完全独立的查询字符串,而是逐步构建字符串,以便将逻辑应用于文本。仍然使用参数 - 你可以安全地使用动态 SQL。
    【解决方案2】:

    参数化查询旨在防止您现在尝试执行的操作(sql 注入)。

    如何做到这一点是首先检查用户输入并根据输入是否有效获取适当的查询。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-22
      • 1970-01-01
      • 2019-08-20
      • 1970-01-01
      • 2011-10-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多