【问题标题】:.Net/C# - Oracle SQL Not All Variables Bound - Managed Data Access.Net/C# - Oracle SQL 并非所有变量都绑定 - 托管数据访问
【发布时间】:2018-02-07 05:28:04
【问题描述】:

我对 Oracle 风格的 SQL 比较陌生。我无法弄清楚为什么这会返回以下异常:

Oracle.ManagedDataAccess.Client.OracleException (0x80004005): ORA-01008: 并非所有变量都绑定

                    OracleCommand cmd1 = con.CreateCommand();
                    cmd1.CommandType = CommandType.Text;
                    cmd1.CommandText = @"MERGE INTO SECURITY_PRICES$V tgt USING (select * from DUAL) src ON (src.DTE = tgt.DTE AND src.SECURITY = tgt.SECURITY AND src.SOURCE = tgt.SOURCE) WHEN MATCHED THEN UPDATE SET tgt.TYPE = 'I', tgt.SOURCE = src.Source, tgt.CURRENCY = 'JMD' ,tgt.SECURITY = src.Security, tgt.LAST_PRICE = :Close, tgt.HIGH_PRICE = :High, tgt.LOW_PRICE = :Low, tgt.DTE = src.DTE, tgt.Volume = :Vol WHEN NOT MATCHED THEN INSERT (TYPE, SOURCE, CURRENCY, SECURITY, LAST_PRICE, HIGH_PRICE, LOW_PRICE, DTE, Volume) VALUES ('I', 'E', 'JMD', :insID,:Close,:High, :Low, :Time, :Vol)";


                    cmd1.Parameters.Add("insID", secid);
                    cmd1.Parameters.Add("Close", data.Close);
                    cmd1.Parameters.Add("High", data.High);
                    cmd1.Parameters.Add("Low", data.Low);
                    cmd1.Parameters.Add("Time", data.Time);
                    cmd1.Parameters.Add("Vol", data.Volume);

                    int suc = cmd1.ExecuteNonQuery();

我尝试了以下方法。将冒号 (':') 添加到 parameters.add。使用较少的变量,确保它没有传入空参数。

这是数据。它被解析成一个对象,每个属性都是一个字符串。 oracle 需要强类型参数吗?在 MS SQL Server 中传入一个字符串不会导致问题 - 这是我唯一的猜测。

  • insID:228IL
  • 低:0
  • 高0
  • 时间:2018-01-29T13:05:26
  • 卷:0
  • 关闭:0

【问题讨论】:

    标签: c# oracle oracle-manageddataaccess


    【解决方案1】:

    尝试将此行添加到开始代码中:

    OracleCommand cmd1 = con.CreateCommand();
    cmd1.BindByName = true;
    cmd1.CommandType = CommandType.Text;
    

    如果我记得,如果没有设置 BindByName,那么 OracleCommand 类将按照提交的顺序在查询中绑定参数,而不是按它们的名称。因此,由于您多次使用 SQL 字符串中的某些绑定占位符,它们需要再次绑定 - 导致“并非所有变量都绑定”异常。

    【讨论】:

      猜你喜欢
      • 2022-07-08
      • 2021-12-11
      • 1970-01-01
      • 2023-03-27
      • 2011-01-11
      • 1970-01-01
      • 2012-09-05
      • 2010-11-28
      • 1970-01-01
      相关资源
      最近更新 更多