【问题标题】:Can't run oracle command with a specific where c#无法使用特定位置 c# 运行 oracle 命令
【发布时间】:2017-02-22 16:26:25
【问题描述】:

我需要运行这个查询:

"Select column_name from all_tab_columns 
where table_name=''" + tableName + " owner='" + ownerName + "'";

这是在 C# 中将其作为 OracleCommand 运行。它没有用。我尝试了许多变体,包括不同的变量,但是当我将 table_name 放在 where 子句中时,它永远不会起作用。也不是因为我没有使用LIKE

【问题讨论】:

  • 你遇到了什么错误?
  • 我认为 single quotes 没有正确放置。对于tableName 变量。
  • 试试"Select column_name from all_tab_columns where table_name='" + tableName + "' owner='" + ownerName + "'";
  • 另外,在 Oracle 中,我们不使用 single quote。使用:

标签: c# sql oracle ado.net


【解决方案1】:

格式正确的命令文本必须如下所示:

var query = String.Format(@"
    SELECT 
        column_name 
    FROM all_tab_columns 
    WHERE table_name='{0}'
    AND owner='{1}'", tableName, ownerName);

如果tableNameownerName 是用户输入,这很容易受到注入攻击。在这种情况下,请改用参数化命令:

var query = @"
    SELECT 
        column_name 
    FROM all_tab_columns 
    WHERE table_name=:tablename'
    AND owner=:ownername";

然后使用OracleParameter instances 分配值。

【讨论】:

  • 我知道我的查询格式不正确。这只是为了测试它。我的意思是,当 where 子句中有表名时,无论格式如何,这个查询都将永远无法工作......
  • table_nameall_tab_columns 表中的有效列名。我的回答不是关于“更好的格式”,而是例如在您的原始代码中,您有一个双引号,这会导致语法错误。所以当你说“从不工作”时,你会得到什么?一个空的结果集?例外? ORA-00933: SQL 命令未正确结束?
  • 双单引号可能是拼写错误。我没有复制粘贴它。
  • 我得到一个带有 HasRows 标志的 OracleDataReader 错误。所以一个空的结果集。对不起
  • 在这种情况下,不再是编码问题。关注参数的值和该表中的实际行/列值。也许这是一个区分大小写的问题?
猜你喜欢
  • 1970-01-01
  • 2020-11-30
  • 2021-06-22
  • 2020-12-10
  • 1970-01-01
  • 2019-04-29
  • 1970-01-01
  • 1970-01-01
  • 2013-03-11
相关资源
最近更新 更多