简体   繁体   English

InvalidCastException C#

[英]InvalidCastException C#

I'm stuck on this issue. 我被困在这个问题上。 Please help. 请帮忙。

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");
}

Getting InvalidCastException was unhandled on the line that reads pv_error = (string)cmd.Parameters["pv_error"].Value; 在读取pv_error = (string)cmd.Parameters["pv_error"].Value;的行上未处理 Get InvalidCastException pv_error = (string)cmd.Parameters["pv_error"].Value;

Not sure how to fix. 不知道如何解决。

thanks. 谢谢。

the type of Parameters["pv_error"].Value is probably not a string. Parameters [“ pv_error”]。Value的类型可能不是字符串。

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

try to replace it with: 尝试将其替换为:

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

As you do in the next line. 与您在下一行中所做的一样。 And you have to test if Value != null. 并且您必须测试Value!= null。

Try 尝试

Convert.ToString(cmd.Parameters["pv_error"].Value)

Convert.ToString() handles null. Convert.ToString()处理null。

You can try like this. 您可以这样尝试。

        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");
    }

it would be useful to see the actual value of pv_error that is causing the exception, but since pv_error is an output parameter - if there is no 'error', it will come out as NULL and therefore cause an InvalidCastException 查看引起异常的pv_error的实际值会很有用,但是由于pv_error输出参数 -如果没有“错误”,它将以NULL ,因此导致InvalidCastException

I think some checking prior to setting would solve the problem. 我认为设置之前进行一些检查可以解决问题。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM