【问题标题】:Inner join statement in bind variables绑定变量中的内连接语句
【发布时间】:2019-01-28 19:13:29
【问题描述】:

我使用绑定变量从 SQL 表中获取数据。

代码:

string commandText = string.Format("SELECT {0} FROM {1} WHERE {2} ORDER BY {3}", fields, from, whereStr, orderBy);
DbCommand command = GetSqlCommandWrapper(commandText);
int index = 0;
foreach (var item in whereParams)
{
    command.Parameters.Add(new OracleParameter(item, whereParamsBy[index++]));
}
DataTable db = new DataTable();

DataSet dataSet = null;
dataSet = CurrentDatabase.ExecuteDataSet(command);

命令文本:

fields = "TableA.*";
from = "TableA INNER JOIN TableB ON TableA .id = TableB.id";
whereStr = "TableA .id > 10";
orderBy = "TableA .id, TableB .id";

一切正常,直到我必须从 2 个表中获取数据,如查询:

select * from a inner join b on a.id = b.id where....

谁能告诉我怎么做? 提前致谢

【问题讨论】:

  • 您能否展示一下您的commandText 尝试,其中包含内连接命令?
  • 为什么以及如何失败?您将在from 字符串中包含连接或将String.Format 参数向右移动,因此{2} 成为连接子句的占位符。但 IMO 的整个方法值得商榷。您可以使用现有的框架来生成动态 sql 吗?
  • 我将它包含在 from 字符串中,但出现错误。你能举例说明 commandText 应该如何显示吗?
  • 让您的from 包含a inner join b on a.id = b.id,完成。您自己生成查询文本,因此您的工作是确保结果最终有意义。在构造 SQL 时,总是在事后评估结果(即打印或检查commandText);当语法错误时通常很明显。请注意,当您开始进行连接时,您希望将表名添加到fields,否则id 之类的内容不明确。
  • 我收到这个错误:ORA-01036: 变量名或变量号无效

标签: c# sql bind-variables


【解决方案1】:

整体方法不是很好,但就得到你想要的而言,这应该可以。

fields = "*";
from = "TableA AS a INNER JOIN TableB AS B ON a.id = b.id";
whereStr = "a.id > 10";
orderBy = "a.id, b.id";

将您的输入参数设置为该参数,或者将其粘贴到您提供给我们的代码之前,它将生成命令SELECT * FROM TableA AS a INNER JOIN TableB AS B ON a.id = b.id WHERE a.id > 10 ORDER BY a.id, b.id

请注意orderBy = "a.id; DROP TABLE TableA;"; 是一个可怕的前景

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-25
    • 1970-01-01
    • 1970-01-01
    • 2017-09-26
    • 1970-01-01
    相关资源
    最近更新 更多