2017-04-18 75 views
0

我有一個程序,在某些行使得查詢數據庫,並將其轉換爲XML 但即時得到一個InvalidCast,沒有專門一(我算在XML中的對象和他們有所不同)InvalidCastException的隨機排

Banco objBanco = new Banco(); 


     DataTable objData; 
     DataTable objFotos; 
     objData = objBanco.ListaCondominio(); 

     XmlWriterSettings setting = new XmlWriterSettings(); 
     setting.Indent = true; 
     XmlWriter proprietarios = XmlWriter.Create(@"C:\Users\STUDIO-15\Desktop\arquivocond2.xml", setting); 
     // XmlWriter proprietarios = XmlWriter.Create(@"C:\inetpub\wwwroot\DirectaXml\arquivo\Condominios.xml", setting); 

     //CRIAÇÃO XML 

     //<Imóveis> 
     try { 
     proprietarios.WriteStartElement("Condominios"); 
     foreach (DataRow row in objData.Rows) 
     { 
      //<Imóvel> 
      proprietarios.WriteStartElement("Condominio"); 
      for (int h = 0; h < row.ItemArray.Count(); h++) 
      { 
       //<ID COLUNA> 
       proprietarios.WriteStartElement(objData.Columns[h].ToString()); 

       //CONTEÚDO LINHA/COLUNA 
       proprietarios.WriteString(row.ItemArray[h].ToString()); 

       //FECHA ID COLUNA 
       proprietarios.WriteEndElement(); 
      } 
      //OBTÉM FOTOS 

      objFotos = new DataTable(); 

      objFotos = objBanco.Fotos(Convert.ToInt32(row.ItemArray[0])); 


      proprietarios.WriteStartElement("Fotos"); 
      bool controlFotos = false; 
      foreach (DataRow rowFotos in objFotos.Rows) 
      { 

       //FOTO 
       proprietarios.WriteStartElement("Foto"); 
       //CONTEÚDO FOTO 
       if (controlFotos == false) 
       { 
        proprietarios.WriteString(rowFotos.ItemArray[0].ToString()); 
        controlFotos = true; 
       } 

       else if (controlFotos == true) 
        proprietarios.WriteString(" | " + rowFotos.ItemArray[0].ToString()); 



       //FECHA FOTO 
       proprietarios.WriteEndElement(); 

      } 

      //FECHA FOTOS 
      proprietarios.WriteEndElement(); 
      //FECHA IMÓVEL 





      proprietarios.WriteEndElement(); 


     } 
     //FECHA IMÓVEIS 
     proprietarios.WriteEndElement(); 
     proprietarios.WriteEndDocument(); 
     proprietarios.Close(); 
     } 
     catch (InvalidCastException) 
     { 

     } 

如果有人可以幫助,我將不勝感激

+2

它應該是很容易調試問題,當剛剛停止調試器拋出異常,然後獲取確切位置和當前數據庫值。從你的代碼中猜測拋出異常的位置是不可能的。 – HimBromBeere

+0

其可能 objFotos = objBanco.Fotos(Convert.ToInt32(row.ItemArray [0])); – ojf

+0

它在這行,在convert.toint32 – Manzini

回答

0

檢查是否row.ItemArray [0]返回一個int,如果返回其他任何字符,那麼0到9這將不轉換。

try{ 
    objFotos = objBanco.Fotos(Convert.ToInt32(row.ItemArray[0])); 
    } 
catch(InvalideCastException e) 
    { 
     MessageBox.Show(e.message); 
    } 

另外,你可能想先嚐試.ToString()方法。

+0

感謝您的幫助! – Manzini

0

我的數據庫返回2個空行,這是造成這個異常,我可以很容易地解決這個剛剛加入不在查詢空