gpt4 book ai didi

c# - Oracle 客户端的可选 sql 命令参数

转载 作者:行者123 更新时间:2023-11-30 12:48:54 26 4
gpt4 key购买 nike

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

我到处都找不到 - 这是真的吗?这似乎很愚蠢并且对我来说很有限......

最佳答案

  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,参数不会根据参数名称进行映射,而是根据插入顺序进行映射。

戴夫

关于c# - Oracle 客户端的可选 sql 命令参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13235392/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com