2012-12-11 3 views
0

이 문제가 계속됩니다. 도와주세요. InvalidCastException이 얻기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"); 
} 

를 해결하는 방법 확실하지 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

은 (는) 널 (null) 처리

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

Convert.ToString을보십시오.

관련 문제