从 C# 中的查询字符串中删除 ''

本文关键字:删除 查询 字符串 | 更新日期: 2023-09-27 18:34:45

下面是我硬引用的Oracle查询,它本身运行良好。

SELECT F.*
      ,R.EARN_NAME
      ,R.EARN_TYPE
      ,D.DESIG_NAME
      ,D.DESIG_NO 
from FIXED_EARN_DETAILS F,
     EARNINGS R,
     DESIGNATION D 
WHERE F.FIXED_EARN_NO IN(
                       select max(FIXED_EARN_NO) 
                       FROM FIXED_EARN_DETAILS  
                       where DESIG_NO=(
                             SELECT DEPT_CODE 
                             FROM EMP_ALLOCATION 
                             WHERE EMP_NO='000507') 
                      GROUP BY earn_no) 
AND F.EARN_NO=R.EARN_NO 
AND D.DESIG_NO=F.DESIG_NO 
ORDER BY F.EARN_NO

这是我的 C# 查询字符串

string strDesig_No="(SELECT DESIG_NO FROM EMP_ALLOCATION WHERE EMP_NO='000507')";
string  SelectQuery="SELECT F.*,R.EARN_NAME,R.EARN_TYPE,D.DESIG_NAME,D.DESIG_NO from FIXED_EARN_DETAILS F,EARNINGS R,DESIGNATION D WHERE F.FIXED_EARN_NO IN(select max(FIXED_EARN_NO) FROM FIXED_EARN_DETAILS  where DESIG_NO='" + strDesig_No + "' GROUP BY earn_no) AND F.EARN_NO=R.EARN_NO AND D.DESIG_NO=F.DESIG_NO ORDER BY F.EARN_NO";

因此,当我尝试运行它时,最终查询总是如下所示,我在(SELECT DEPT_CODE FROM EMP_ALLOCATION WHERE EMP_NO='000507')旁边找到两个额外的逗号'',因此查询失败。

SELECT F.*,R.EARN_NAME,R.EARN_TYPE,D.DESIG_NAME,D.DESIG_NO from FIXED_EARN_DETAILS F,EARNINGS R,DESIGNATION D WHERE F.FIXED_EARN_NO IN(select max(FIXED_EARN_NO) FROM FIXED_EARN_DETAILS  where DESIG_NO='(SELECT DEPT_CODE FROM EMP_ALLOCATION WHERE EMP_NO='000507')' GROUP BY earn_no) AND F.EARN_NO=R.EARN_NO AND D.DESIG_NO=F.DESIG_NO ORDER BY F.EARN_NO

帮助我解决这个简单的语法错误,我被卡住了。

从 C# 中的查询字符串中删除 ''

您自己添加单引号

string  SelectQuery="... where DESIG_NO='" + strDesig_No + "' GROUP ...";
                                        ^                   ^

如果您不添加它们,它们就不会在那里。

但这并不是一个好方法,它太容易注入,而且代码看起来很丑陋。您可以只使用参数绑定。

OracleCommand oraCommand = new OracleCommand("SELECT name FROM users
                           WHERE name = :userName", db);
oraCommand.Parameters.Add(new OracleParameter("userName", userName));