当我执行如下所示的 C# 脚本时,它给出 ORA-01036: 非法变量名称/编号
using (OracleConnection conn = new OracleConnection(connectionString))
using (OracleCommand cmd = conn.CreateCommand())
using (OracleDataAdapter da = new OracleDataAdapter())
using (DataTable dt = new DataTable())
{
cmd.BindByName = true;
cmd.CommandText = "SELECT :A A FROM DUAL";
cmd.Parameters.Add("A", "THE DATA");
da.SelectCommand = cmd;
da.Fill(dt);
}
但是当我更改 cmd.CommandText = "SELECT :A A FROM DUAL"; 时to cmd.CommandText = "从 DUAL 中选择 'A' A,其中 :A = '数据'"; 运行了
我的问题是,C# 无法执行 select 和 from 之间的 bind params 吗?
解决方案:我已将库从 Oracle.DataAccess 更改为 Oracle.托管数据访问
我将 Oracle.DataAccess 库更改为 Oracle.ManagedDataAccess 库,它可以工作
无效字符为
:
,因为 SQL 无法在 select 语句中识别它,所以按如下方式操作
cmd.CommandText = "SELECT A FROM DUAL WHERE A = @A";
cmd.Parameters.Add("@A", "THE DATA");
Updates
Oracle 命令需要在参数中使用
:
,如 where A=:A
,而不是选择列,如 select :A A from
回答你的问题,错误来自 SQL 查询而不是 C#