我目前在SQL字符串中有一个WHERE
子句,如下所示:
CmdTxt = CmdTxt + "Where FA.CSE_LAN = '" + UID + "' ";
最终以对Oracle的调用结束:
OracleCommand cmd = new OracleCommand(CmdTxt, connection);
cmd.Connection = connection;
cmd.CommandText = CmdTxt;
cmd.CommandType = CommandType.Text;
OracleDataAdapter da = new OracleDataAdapter(cmd);
da.Fill(dt);
我现在需要做的是更改WHERE逻辑,以便它首先查看名为FA.BUILD_CSE_LAN
的列。如果它有值,它将在WHERE
子句中使用该列。
如果它没有值,它将使用FA.CSE_LAN
子句中的WHERE
列。
我该怎么做?我在ASP.Net环境中对Oracle 12c数据库使用C#代码隐藏,如果有任何重要的话。
答案 0 :(得分:2)
这篇关于Oracle的文档可能有所帮助:NVL或COALESCE可以提供帮助。
CmdTxt = CmdTxt + "Where NVL(FA.BUILD_CSE_LAN, FA.CSE_LAN) = '" + UID + "' ";
或
CmdTxt = CmdTxt + "Where COALESCE(FA.BUILD_CSE_LAN, FA.CSE_LAN) = '" + UID + "' ";
答案 1 :(得分:1)
我不是oracle的专家,但我会尝试这样的事情。
CmdTxt = CmdTxt + "Where FA.BUILD_CSE_LAN = @UID OR ( FA.BUILD_CSE_LAN IS NULL AND FA.CSE_LAN = @UID)";
这样,如果你的构建字段为null,没有值,它会检查另一个。
并声明@UID
作为命令的参数,以避免注入或特殊字符问题。