【问题标题】:Optional sql command parameters with Oracle ClientOracle 客户端的可选 sql 命令参数
【发布时间】:2012-11-05 15:38:40
【问题描述】:

我正在尝试为 sqlcommand 提供比它使用的更多的参数。因此,我得到了 ORA 01036 异常。该描述使我了解到一个事实,即我只能传递将在查询中实际使用的参数。

我在任何地方都找不到它 - 这是真的吗?这似乎很愚蠢,仅限于我......

【问题讨论】:

  • 为什么要传递更多参数?
  • @w0lf,从我的脑海中浮现——因为我有一个泛型参数基类?或者有很多参数我不想每次都手动准备。它适用于 Postgres 和 SqlServer...
  • @IAmDeveloper 哇,直到现在我才意识到这一点。刚刚签入 SQL Server,它确实工作。
  • 你能举一个简单的例子来说明你想要做什么吗?

标签: c# .net oracle sqlcommand


【解决方案1】:
  1. 我尝试使用 System.Data.SqlClient.SqlConnection 重新创建您的情况以连接到 Oracle 数据库,但未成功。

  2. 使用 System.Data.OracleClient.OracleConnection 我能够测试带参数和不带参数的查询。以下代码使用未注释的“string sql ...”成功。注释的“string sql”将遇到您问题中提到的相同错误。

        StringBuilder sb = new StringBuilder ();
    
        string sql = "SELECT CASE_ID, CLAIM_NR, CLAIM_PHS_CD FROM TABLENAME WHERE CASE_ID = :ci";
        //string sql = "SELECT CASE_ID, CLAIM_NR, CLAIM_PHS_CD FROM TABLENAME";
    
        using ( OracleConnection connection = new OracleConnection ( RegistryConnectionInformation.GetDBConnString () ) )
        {
            OracleParameter ci = new OracleParameter();
            ci.ParameterName = "ci";
            ci.Value = "12345";
    
            OracleCommand command = new OracleCommand ( sql, connection );
            command.Parameters.Add ( ci );
    
            connection.Open ();
            OracleDataReader reader = command.ExecuteReader ();
    
            try
            {
                while ( reader.Read () )
                {
                    sb.Append ( string.Format ( "{0} - {1} - {2}\n", reader [ 0 ], reader [ 1 ], reader [ 2 ] ) );
                }
            }
            catch ( Exception ex )
            {
                sb.Append ( string.Format ( "{0}\n\n{1}", ex.Message, ex.StackTrace ) );
            }
            finally
            {
                reader.Close ();
            }
        }
    
        return sb.ToString ();
    
  3. 这让我相信你是对的:查询Oracle时,命令中传递的参数数量必须与查询中的参数数量匹配。

    一个。在使用 Oracle 时,我还建议您保持参数的顺序与其在查询中的使用顺序相同。根据您使用的 DLL,参数不会根据参数名称进行映射,而是根据插入顺序。

戴夫

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-23
    • 2020-04-12
    • 2019-11-09
    • 2015-09-15
    • 2017-04-04
    • 2012-10-06
    相关资源
    最近更新 更多