2012-12-11 2 views
0

Я застрял в этой проблеме. Пожалуйста помоги.InvalidCastException C#

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;

Не уверен, как это исправить.

спасибо.

+0

Это «строка»? Позже в коде вы вызываете 'ToString()' на нем. Это было бы излишним, если бы это не была строка. –

+1

попробуйте использовать cmd.Parameters ["pv_error"]. Value.ToString(). – JleruOHeP

+0

Это потому, что вы настраиваете параметры типа Oracle.Number со строками. –

ответ

2

тип параметров ["pv_error"]. Значение, вероятно, не является строкой.

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

попробовать заменить его:

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

Как вы в следующей строке. И вам нужно проверить значение Value! = Null.

+0

Спасибо, что сработал! –

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

было бы полезно, чтобы увидеть фактическое значение pv_error, которое вызывает исключение, но так как pv_error является параметромвыхода - если нет «ошибки», он выйдет, как NULL и, следовательно, вызвать InvalidCastException

Я думаю, что некоторые проверки перед установкой решат проблему.

1

Попробуйте

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

Convert.ToString() обрабатывает нуль.

Смежные вопросы