0

私はこの問題に行き詰まっています。助けてください。

OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandTimeout = 0;
cmd.CommandText = "hhrcv_upsert_grv_sku";
cmd.CommandType = CommandType.StoredProcedure;

cmd.Parameters.Add("pv_delivery_bay_code", OracleDbType.VarChar).Value = this.bayCode.ToString();
cmd.Parameters.Add("pn_company_id_no", OracleDbType.Number).Value = lblCompany_id_no.Text.ToString();
cmd.Parameters.Add("pn_order_no", OracleDbType.Number).Value = this.orderCode.ToString();
cmd.Parameters.Add("pn_sku_id_no", OracleDbType.Number).Value = lblSku_id_no.Text.ToString();
cmd.Parameters.Add("pn_price", OracleDbType.Number).Value = txtPrice.Text.ToString();

cmd.Parameters.Add(new OracleParameter("pv_error", OracleDbType.VarChar));
cmd.Parameters["pv_error"].Direction = ParameterDirection.Output;

string pv_error;

conn.Open();
cmd.ExecuteNonQuery();
pv_error = (string)cmd.Parameters["pv_error"].Value;

if (cmd.Parameters["pv_error"].Value.ToString().Equals("Invalid"))
{
    MessageBox.Show("Invalid");
}
else
{
    MessageBox.Show("valid");
}

InvalidCastExceptionの取得は、次の行で処理されませんでしたpv_error = (string)cmd.Parameters["pv_error"].Value;

修正方法がわからない。

ありがとう。

4

4 に答える 4

2

Parameters["pv_error"].Value の型はおそらく文字列ではありません。

pv_error = (string)cmd.Parameters["pv_error"].Value;

それを次のものに置き換えてみてください:

pv_error = cmd.Parameters["pv_error"].Value.ToString();

次の行で行うように。Value != null かどうかをテストする必要があります。

于 2012-12-11T12:05:32.913 に答える
0

このように試すことができます。

        OracleCommand cmd = new OracleCommand();
        cmd.Connection = conn;
        cmd.CommandTimeout = 0;
        cmd.CommandText = "hhrcv_upsert_grv_sku";
        cmd.CommandType = CommandType.StoredProcedure;

    cmd.Parameters.Add("pv_delivery_bay_code", OracleDbType.VarChar).Value = this.bayCode.ToString();
    cmd.Parameters.Add("pn_company_id_no", OracleDbType.Number).Value = lblCompany_id_no.Text.ToString();
    cmd.Parameters.Add("pn_order_no", OracleDbType.Number).Value = this.orderCode.ToString();
    cmd.Parameters.Add("pn_sku_id_no", OracleDbType.Number).Value = lblSku_id_no.Text.ToString();
    cmd.Parameters.Add("pn_price", OracleDbType.Number).Value = txtPrice.Text.ToString();

    var pv_error = cmd.Parameters.Add(new OracleParameter("pv_error", OracleDbType.VarChar));
    pv_error.Direction = ParameterDirection.Output;

    conn.Open();
    cmd.ExecuteNonQuery();


    if (pv_error.Value.ToString().Equals("Invalid"))
    {
        MessageBox.Show("Invalid");
    }
    else
    {
        MessageBox.Show("valid");
    }
于 2012-12-11T12:05:06.887 に答える
0

pv_error例外の原因となっている実際の値を確認すると便利ですが、これpv_error出力パラメーターであるため、「エラー」がない場合は次のように出力されNULLInvalidCastExceptionが発生します。

設定前に確認することで問題が解決すると思います。

于 2012-12-11T12:05:46.547 に答える