2012-05-22 10 views
5

¿Necesitamos instalar Microsoft Office en el servidor para ejecutar una aplicación para importar datos del archivo de Excel a la base de datos mssql?¿Necesitamos instalar Microsoft Office en el servidor para la importación de Excel en Asp.net?

¿Alguna sugerencia o idea?

el código que utiliza

public partial class _Default : System.Web.UI.Page 
{ 
private String strConnection = "Data Source=MYCBJ017550027;Initial Catalog=MySamplesDB;Integrated Security=True"; 
protected void Page_Load(object sender, EventArgs e) 
{ 

} 
protected void btnSend_Click(object sender, EventArgs e) 
{ 
string path = fileuploadExcel.PostedFile.FileName; 
string excelConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=Excel 12.0;Persist Security Info=False"; 
OleDbConnection excelConnection =new OleDbConnection(excelConnectionString); 
OleDbCommand cmd = new OleDbCommand("Select [ID],[Name],[Designation] from [Sheet1$]",excelConnection); 
excelConnection.Open(); 
OleDbDataReader dReader; 
dReader = cmd.ExecuteReader(); 
SqlBulkCopy sqlBulk = new SqlBulkCopy(strConnection); 
sqlBulk.DestinationTableName = "Excel_table"; 
sqlBulk.WriteToServer(dReader); 
excelConnection.Close(); 
} 
} 
+0

¿Esto es algo que está tratando de automatizar, o simplemente hacer una vez? Si está haciendo esto solo una vez, guarde el archivo de Excel como CSV, luego impórtelo a SQL usando BCP. – vcsjones

Respuesta

8

Si está leyendo únicamente archivos XLS a continuación, utilizar Microsoft.Jet.OLEDB.4.0 que es incorporado con su marco .NET.

Si está leyendo archivos xlsx, utilice Microsoft.ACE.OLEDB.12.0. Los controladores para esto se pueden descargar libremente desde el sitio de Microsoft. No es necesario instalar el oficial de Microsoft para la interoperabilidad.

Usar la siguiente cadena de conexión

string excelConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0; 
Data Source=" + path + ";Extended Properties=Excel 12.0;HDR=YES"; 

Download drivers from here

Refer this for running example

2

Como dijo @Romil puede utilizar el marco .NET de que:

string ConnectionString = string.Format(@"Provider=Microsoft.Jet.OLEDB.4.0; Data Source={0}; Extended Properties=""Excel 8.0;HDR=Yes"";", fileName); 

using (OleDbConnection conn = new OleDbConnection(ConnectionString)) 
{ 
    conn.Open(); 
    DataTable schemaTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" }); 

    foreach (DataRow schemaRow in schemaTable.Rows) 
    { 
      string sheet = schemaRow["TABLE_NAME"].ToString(); 
      using (OleDbCommand cmd = new OleDbCommand("SELECT * FROM [" + sheet + "]", conn)) 
      { 
       cmd.CommandType = CommandType.Text; 
       DataTable outputTable = new DataTable(sheet); 
       output.Tables.Add(outputTable); 
       new OleDbDataAdapter(cmd).Fill(outputTable); 
      } 
    } 
       conn.Close(); 
} 
0

El problema con chorro , ¿aún tiene que instalar el proveedor de datos? ider para ello (aunque esto también es gratis) o tener una oficina instalada para que funcione. Si simplemente necesita leer un archivo de Excel, hay muchas librerías totalmente administradas que harán la pista perfectamente sin necesidad de instalar nada.

He enumerado algunos aquí. He usado excelreader plenty con buenos resultados.

http://excelreader.codeplex.com/
http://epplus.codeplex.com/

lector de Excel parecen ser la luz en el lado de la documentación de las cosas. entonces aquí hay un ejemplo de cómo usarlo

IExcelDataReader reader = null; 
try 
{ 
    using (FileStream stream = new FileStream(ofd.FileName, FileMode.Open)) 
    { 
     string ext = System.IO.Path.GetExtension(ofd.FileName).Replace(".", "").ToUpper(); 
     if (ext == "XLS") 
      reader = ExcelReaderFactory.CreateBinaryReader(stream); 
     else 
      reader = ExcelReaderFactory.CreateOpenXmlReader(stream); 

     reader.IsFirstRowAsColumnNames = true; 
     using (DataSet ds = reader.AsDataSet()) 
     { 
      foreach (DataRow dr in ds.Tables[0].Rows) 
      { 
       ImportData toAdd = new ImportData() 
        { 
         Format = dr[0].ToString(), 
        }; 

       Database.Datastore.InsertObject(toAdd); 
      } 
     } 
    } 
} 
Cuestiones relacionadas