ORA-01036: 非法变量名/编号,在 select 和 from 之间绑定参数

问题描述 投票:0回答:2

当我执行如下所示的 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# 无法执行 selectfrom 之间的 bind params 吗?

解决方案:我已将库从 Oracle.DataAccess 更改为 Oracle.托管数据访问

c# odp.net
2个回答
0
投票

我将 Oracle.DataAccess 库更改为 Oracle.ManagedDataAccess 库,它可以工作


-1
投票

无效字符为

:
,因为 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#

© www.soinside.com 2019 - 2024. All rights reserved.