随机行上的InvalidCastException

时间:2017-04-18 13:00:57

标签: c# sql sql-server

我有一个程序在数据库中进行查询并将其转换为xml 但我在某些行中获得了一个InvalidCast,而不是特别的一个(我用XML计算对象并且它们各不相同)

 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 个答案:

答案 0 :(得分:0)

检查row.ItemArray [0]是否返回一个int,如果它返回任何其他字符,则返回0到9,它将不会转换。

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

你也可能想先尝试.ToString()方法。

答案 1 :(得分:0)

我的数据库返回2个空行并导致此异常,我可以通过在查询中添加非空来轻松解决此问题