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" にキャストできません" をトリガーします。

stringbuilder、名前によるバインド、さまざまな dbtypes など、インターネットで見つけることができるすべてのものを試しました。

ASCII oracle db に対してクエリを実行するために C# で文字列バインド変数を設定する方法を知っている人はいますか?

前もって感謝します。

編集 int バインド変数の使用に成功し、文字列バインド変数をハードコードされた値に置き換えることもできるため、db とアプリケーションの異なる型と関係があることがわかっていることを説明する必要があります。文字列バインド変数を通常の文字列変数に置き換えることもできます (これは回避しようとしています)。データベースにヒットしたときのバインド変数の変換に問題があるようですか?

4

0 に答える 0