我是使用预准备语句查询数据库中的数据的新手,我遇到了为c#专门为OracleParameters实现参数的问题.
所以假设我有以下SQL:
string sql = "select *
from table1 t1, table2 t2
where t1.columnX = @parm and t2.columnY = @parm"
Run Code Online (Sandbox Code Playgroud)
代码是这样的:
OracleCommand cmd = new OracleCommand(sql, conn);
cmd.Parameters.Add(new OracleParameter("@parm", strParm));
Run Code Online (Sandbox Code Playgroud)
问题是当执行cmd时t1.columnX获取strParm的值但是当t2.columnY即将获得strParm的值时,它会抛出"ORA-01008:并非所有变量绑定"异常.
在我看来,即使该参数在sql中的其他位置被看到,该参数也只被替换一次.
我试过并为我工作的一个解决方案是:
OracleCommand cmd = new OracleCommand(sql, conn);
cmd.Parameters.Add(new OracleParameter("@parm", strParm));
cmd.Parameters.Add(new OracleParameter("@parm", strParm));
Run Code Online (Sandbox Code Playgroud)
另一种解决方案是:
OracleCommand cmd = new OracleCommand(sql, conn);
cmd.Parameters.Add(new OracleParameter("@parm1", strParm));
cmd.Parameters.Add(new OracleParameter("@parm2", strParm));
Run Code Online (Sandbox Code Playgroud)
和修改过的sql是这样的:
string sql = "select *
from table1 t1, table2 t2
where t1.columnX = @parm1 and t2.columnY = @parm2"
Run Code Online (Sandbox Code Playgroud)
问题是,是否有更好的方法,这样我就不必添加具有相同值的另一个参数.
注意:我刚刚简化了上面的查询,以显示@parm用于查询的几个部分.在现实生活中,此查询多次使用相同的参数,并且必须添加多个具有相同名称和值的参数.
有没有办法在执行后立即访问CommandText?我有以下代码:
cmd = new OracleCommand(sql.ToString(), conn);
cmd.Parameters.Add(new OracleParameter("@parm", parmValue));
OracleDataAdapter da = new OracleDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);
Run Code Online (Sandbox Code Playgroud)
我需要知道的是在数据库中执行的sql命令字符串已经包含在sql中的parmValue值.换句话说,我一定不能在查询中看到字符串"@parm",而是查看它的值.
我需要这个,以便我可以将这个sql推送到日志数据库中以供将来参考.
提前致谢.
我正在使用 ajax 从服务器返回一小组数据,该数据集以以下格式返回 JSON 数据:
{
"data": [
{
"id": "1",
"value": "One"
},
{
"id": "2",
"value": "Two"
},
{
"id": "3",
"value": "Three"
}
]
}
Run Code Online (Sandbox Code Playgroud)
在客户端,这被分配给一个名为 的变量response。我response.data用来获取内容。
问题是,有没有更简单的方法来获取值而不进行循环?我有点在寻找这样的东西response[id==2].value,它应该给我“两个”。
如果这是不可能的,我愿意接受任何建议。