El valor del tipo especificado String del origen de datos no se puede convertir al tipo nvarchar de la columna de destino especificada SqlBulkCopy

publicado por: Anonymous

Mi problema es el siguiente estoy queriendo pasar un archivo de excel a sql server. Cuando tomo el archivo y lo quiero pasar me tira este error:

“El valor del tipo especificado String del origen de datos no se puede
convertir al tipo nvarchar de la columna de destino especificada”.

Y por lo tanto no lo inserta en la base de datos.

Estoy intentando y no puedo hacer estar conversión

¿Alguna idea de qué puede estar causando este error?

protected void Button5_Click(object sender, EventArgs e)
{       
    try
    {
        //string conexion = "Provider = Microsoft.ACE.OleDb.12.0;Data Source = C:/Users/dtorres/Desktop/Horamar/1131008.xlsx ;Extended Properties = "Excel 8.0;HDR = Yes"";

        string path = Path.GetFileName(FileUpload1.FileName);
        path = path.Replace(" ", "");
        FileUpload1.SaveAs(Server.MapPath("/ExcelFile/") + path);
        String Excelpath = Server.MapPath("/ExcelFile/") + path;

        string conexion = "Provider = Microsoft.ACE.OleDb.12.0;Data Source = " + Excelpath + ";Extended Properties = "Excel 8.0;HDR = Yes"";


        OleDbConnection origen = default(OleDbConnection);
        origen = new OleDbConnection(conexion);

        OleDbCommand seleccion = default(OleDbCommand);
        seleccion = new OleDbCommand("select * from [Hoja2$]", origen);

        OleDbDataAdapter adaptador = new OleDbDataAdapter();

        adaptador.SelectCommand = seleccion;

        DataSet ds = new DataSet();

        adaptador.Fill(ds);


        grDatos.DataSource = ds.Tables[0];
        grDatos.DataBind();

        origen.Close();


        SqlConnection conexion_destino = new SqlConnection();

        conexion_destino.ConnectionString = "Data Source = (Local); Integrated Security = True; Initial Catalog = openGL ";

        conexion_destino.Open();

        SqlBulkCopy importar = default(SqlBulkCopy);
        importar = new SqlBulkCopy(conexion_destino);
        importar.DestinationTableName = "mayorizacion";



        importar.WriteToServer(ds.Tables[0]);
        conexion_destino.Close();

    }
    catch (Exception ex)
    {

        Label3.Text = ex.Message;
    }
}

solución

El origen del error está en los datos.

Es posible que una de sus columnas “del excel” no tenga datos.

Revise la tabla en SQL Server y compare la información del Excel. Revíselo bien porque puede que una de esas columnas tenga valores incorrectos.

Tal como menciona en su comentario, era necesario aumentar el tamaño de la columna
a nvarchar(50).

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *