1

我们有一个 US7ASCII 11gr2 数据库,我正在尝试针对该数据库构建参数化查询。

public CustDetailsModel SelectCustDetails(string CustCode)
{
    string sql;
    OracleDataReader reader;

    OracleConnection OraConn = OraConnection.GetConnection;

        OraConn.Open();

        sql = "SELECT CUSTOMER, NAME, POSTCODE FROM CUSTOMER WHERE CUSTOMER = :CUSTCODE";

        OracleCommand cmd = new OracleCommand(sql, OraConn);

        OracleParameter parameter = cmd.CreateParameter();
        parameter.ParameterName = "CUSTCODE";
        parameter.OracleDbType = OracleDbType.NVarchar2;
        parameter.Value = CustCode;
        cmd.Parameters.Add(parameter);

            reader = cmd.ExecuteReader();

            reader.Read();

            return new CustDetailsModel
            {
                Cust = reader.GetString(reader.GetOrdinal("CUSTOMER")),
                CustName = reader.GetString(reader.GetOrdinal("NAME")),
                CustPostCode = reader.GetString(reader.GetOrdinal("POSTCODE")),
            };

}

在添加参数行,上面的代码触发了 System.InvalidCastException“无法将 'System.String' 类型的对象强制转换为 'Oracle.ManagedDataAccess.Client.OracleParameter”。

我已经尝试了所有可以在互联网上找到的东西,包括字符串生成器、按名称绑定、不同的 dbtype 等。

有谁知道如何在 C# 中设置字符串绑定变量来查询 ASCII oracle db?

提前致谢。

编辑我应该解释一下,我知道这与数据库和应用程序的不同类型有关,因为我们已经成功使用了 int 绑定变量,而且我们还可以用硬编码值替换字符串绑定变量。我们还可以用常规字符串变量(我们试图避免)替换字符串绑定变量。绑定变量在命中数据库时的转换似乎是一个问题?

4

0 回答 0