none
La ColumnMapping proporcionada no coincide con ninguna columna del origen o del destino. RRS feed

  • Pregunta

  • Buenos días, estoy trabajando en un proyecto, en esté es necesario que el usuario ingrese datos de excel , lo cual me ha estado dando problemas, ahorra me sale este error:  La ColumnMapping proporcionada no coincide con ninguna columna del origen o del destino.. No se que podría ser. Agradecería que alguien me ayude, les dejo el código para que vean lo que he que tengo:

    using (OleDbConnection sourceConn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\\Users\\Guilty Soul\\Desktop\\Formato.xlsx;Extended Properties=\"Excel 12.0 xml; HDR=Yes\""))
                {
                    OleDbCommand command = new OleDbCommand("SELECT * FROM [Gasolina$]", sourceConn);

                    sourceConn.Open();
                    OleDbDataReader reader = command.ExecuteReader();

                    DataTable dt = new DataTable();
                    dt.Columns.Add("Vaucher", typeof(int));
                    dt.Columns.Add("Placa", typeof(string));
                    dt.Columns.Add("Kilometraje", typeof(int));
                    dt.Columns.Add("Fecha", typeof(DateTime));
                    dt.Columns.Add("Hora", typeof(TimeSpan));
                    dt.Columns.Add("Consumo", typeof(decimal));
                    dt.Columns.Add("Galones", typeof(decimal));
                    dt.Columns.Add("Combustible", typeof(string));
                    dt.Columns.Add("Estacion", typeof(string));

                    while (reader.Read())
                    {
                        DataRow dr = dt.NewRow();

                        dr["Vaucher"] = Convert.ToInt32(reader[1]);
                        dr["Placa"] = reader[2].ToString();
                        dr["Kilometraje"] = Convert.ToInt32(reader[3]);
                        dr["Fecha"] = Convert.ToDateTime(reader[4]).Date;
                        dr["Hora"] = Convert.ToDateTime(reader[5]).TimeOfDay;
                        dr["Consumo"] = Convert.ToDecimal("100");
                        dr["Galones"] = Convert.ToDecimal(reader[7]);
                        dr["Combustible"] = reader[8].ToString();
                        dr["Estacion"] = reader[9].ToString();

                        dt.Rows.Add(dr);
                    }

                    using (SqlConnection destinationConn = new SqlConnection("Data Source=TAVO\\SQLEXPRESS;Initial Catalog=Prueba; Integrated Security = True"))
                    {
                        destinationConn.Open();
                        using (SqlBulkCopy bc = new SqlBulkCopy(destinationConn.ConnectionString))
                        {
                            bc.DestinationTableName = "dFactura";
                            bc.ColumnMappings.Add("Vaucher", "Vaucher");
                            bc.ColumnMappings.Add("Placa", "Placa");
                            bc.ColumnMappings.Add("Kilometraje", "Kilometraje");
                            bc.ColumnMappings.Add("Fecha", "Fecha");
                            bc.ColumnMappings.Add("Hora", "Hora");
                            bc.ColumnMappings.Add("Consumo", "Consumo");
                            bc.ColumnMappings.Add("Galones", "Galones");
                            bc.ColumnMappings.Add("Combustible", "Combustible");
                            bc.ColumnMappings.Add("Estacion", "Estacion");
                            bc.WriteToServer(dt);
                        }
                    }
                }

    Gracias de antemano.

    lunes, 18 de septiembre de 2017 17:59

Respuestas

  • Si las columnas en la tabla del servidor fuesen todas iguales que en la del cliente, entonces podrías eliminar todas las filas que dicen bc.ColumnMappings.Add(....). Pero dado el error que te está saliendo, casi seguro que NO son iguales. Debe haber alguna columna en el servidor cuyo nombre discrepa de alguna de las columnas cliente. Aunque parezcan iguales, revísalos con cuidado. A lo mejor en el servidor pone "Estación" mientras que en la tabla cliente pone "Estacion", o alguna otra pequeña discrepancia por el estilo.
    • Marcado como respuesta Tadeath martes, 19 de septiembre de 2017 14:17
    martes, 19 de septiembre de 2017 7:06

Todas las respuestas

  • Prácticamente seguro que el error debe de estar en uno del los ColumnMappings que le añades al SqlBulkCopy. Revisa los nombres de las columnas de destino, ya que alguna de ellas debe estar mal escrita. Comprueba que coincidan exactamente con los nombres de columna que la tabla dFactura tenga en el lado servidor. Solo hay que revisar los de destino; los de origen sí que coinciden con los de la tabla dt.

    Si todas las columnas de destino son idénticas a las de origen (como parece que ocurre en tu código, ya que todos los nombres de origen y destino que has puesto en los mappings son iguales), entonces puedes ahorrarte los mappings. Solo hay que ponerlos cuando los nombres son distintos.

    lunes, 18 de septiembre de 2017 20:04
  •  using (SqlBulkCopy bc = new SqlBulkCopy(destinationConn.ConnectionString))
                        {
                            bc.DestinationTableName = "dFactura";
                            bc.ColumnMappings.Add("Vaucher", "Vaucher");
                            bc.ColumnMappings.Add("Placa", "Placa");
                            bc.ColumnMappings.Add("Kilometraje", "Kilometraje");
                            bc.ColumnMappings.Add("Fecha", "Fecha");
                            bc.ColumnMappings.Add("Hora", "Hora");
                            bc.ColumnMappings.Add("Consumo", "Consumo");
                            bc.ColumnMappings.Add("Galones", "Galones");
                            bc.ColumnMappings.Add("Combustible", "Combustible");
                            bc.ColumnMappings.Add("Estacion", "Estacion");
                            bc.WriteToServer(dt);
                        }

    Entonces elimino todo esto?

    lunes, 18 de septiembre de 2017 20:18
  • Si las columnas en la tabla del servidor fuesen todas iguales que en la del cliente, entonces podrías eliminar todas las filas que dicen bc.ColumnMappings.Add(....). Pero dado el error que te está saliendo, casi seguro que NO son iguales. Debe haber alguna columna en el servidor cuyo nombre discrepa de alguna de las columnas cliente. Aunque parezcan iguales, revísalos con cuidado. A lo mejor en el servidor pone "Estación" mientras que en la tabla cliente pone "Estacion", o alguna otra pequeña discrepancia por el estilo.
    • Marcado como respuesta Tadeath martes, 19 de septiembre de 2017 14:17
    martes, 19 de septiembre de 2017 7:06
  • Increíblemente el hecho de que mi tabla tuviera estilos en el fondo y que tuviera celdas me hacia que diera error. Muchas gracias por la ayuda.  
    martes, 19 de septiembre de 2017 14:19