从 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
帮助我解决这个简单的语法错误,我被卡住了。
您自己添加单引号
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));