Importer des données d'une feuille Excel dans une database SQL Server

Comment importer datatables d'une feuille Excel dans la database SQL Server dans asp net?

Dim OleDbcon As New OleDbConnection((Convert.ToSsortingng("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=") & path) + ";Extended Properties=Excel 12.0;") Dim cmd As New OleDbCommand("SELECT * FROM [Sheet1$]", OleDbcon) Dim objAdapter1 As New OleDbDataAdapter(cmd) OleDbcon.Open() Dim dr As DbDataReader = cmd.ExecuteReader() Dim con_str As Ssortingng = "Data Source=.;Initial Catalog=studentdetails;Integrated Security=True" ' Bulk Copy to SQL Server Dim bulkInsert As New SqlBulkCopy(con_str) bulkInsert.DestinationTableName = "Table name" bulkInsert.WriteToServer(dr) OleDbcon.Close()e here 

Décomposer en deux étapes:

1) Enregistrez le file quelque part – il est très fréquent de voir ceci:

ssortingng saveFolder = @ "C: \ temp \ uploads"; // Choisissez un dossier sur votre machine pour stocker les files téléchargés

string filePath = Path.Combine (saveFolder, FileUpload1.FileName);

FileUpload1.SaveAs (filePath); Maintenant vous avez votre file localement et le vrai travail peut être fait.

2) Obtenez datatables du file. Votre code devrait fonctionner tel quel, mais vous pouvez simplement écrire votre string de connection de cette façon:

ssortingng excelConnSsortingng = Ssortingng.Format ("Fournisseur = Microsoft.Jet.OLEDB.4.0; Source de données = {0}; properties étendues =" Excel 12.0 ";", filePath); Vous pouvez ensuite penser à supprimer le file que vous venez de download et d'importer.

Pour donner un exemple plus concret, nous pouvons refactoriser votre code en deux methods:

 private void SaveFileToDatabase(ssortingng filePath) { Ssortingng strConnection = "Data Source=.\\SQLEXPRESS;AttachDbFilename='C:\\Users\\Hemant\\documents\\visual studio 2010\\Projects\\CRMdata\\CRMdata\\App_Data\\Database1.mdf';Integrated Security=True;User Instance=True"; Ssortingng excelConnSsortingng = Ssortingng.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0\"", filePath); //Create Connection to Excel work book using (OleDbConnection excelConnection = new OleDbConnection(excelConnSsortingng)) { //Create OleDbCommand to fetch data from Excel using (OleDbCommand cmd = new OleDbCommand("Select [ID],[Name],[Designation] from [Sheet1$]", excelConnection)) { excelConnection.Open(); using (OleDbDataReader dReader = cmd.ExecuteReader()) { using(SqlBulkCopy sqlBulk = new SqlBulkCopy(strConnection)) { //Give your Destination table name sqlBulk.DestinationTableName = "Excel_table"; sqlBulk.WriteToServer(dReader); } } } } } private ssortingng GetLocalFilePath(ssortingng saveDirectory, FileUpload fileUploadControl) { ssortingng filePath = Path.Combine(saveDirectory, fileUploadControl.FileName); fileUploadControl.SaveAs(filePath); return filePath; } 

Vous pouvez simplement appeler SaveFileToDatabase (GetLocalFilePath (@ "C: \ temp \ uploads", FileUpload1));

Envisagez d'examiner les autres propriétés étendues pour votre string de connection Excel. Ils viennent utiles!

D'autres améliorations que vous pourriez vouloir faire incluent la mise en configuration de votre string de connection à la database SQL et la gestion des exceptions. Veuillez considérer cet exemple pour la démonstration seulement!

nous allons créer une table de données de méthode dans laquelle nous allons prendre des informations de feuille excel dans la table de données ou l'set de données après que nous allons pousser ces données dans la table de database SQL en utilisant SQL bulk

 protected void Button1_Click(object sender, EventArgs e) { try { SqlConnection con = new SqlConnection(@"Data Source=SANI2711\SQLEXPRESS;Initial Catalog=customer;Integrated Security=True;"); con.Open(); DataTable dt = new DataTable(); dt = DataExcel(); if (dt.Rows.Count > 0) { for() } } catch(Exception ex) { Response.Write(ex); } } protected void Button2_Click(object sender, EventArgs e) { try { SqlConnection con = new SqlConnection(@"Data Source=SANI2711\SQLEXPRESS;Initial Catalog=customer;Integrated Security=True;"); con.Open(); DataTable dt = new DataTable(); dt = DataExcel(); if (dt.Rows.Count > 0) { SqlBulkCopy objbulk = new SqlBulkCopy(con); objbulk.DestinationTableName = "customer1"; objbulk.ColumnMappings.Add("CustomerID", "CustomerID"); objbulk.ColumnMappings.Add("City", "City"); objbulk.ColumnMappings.Add("Country", "Country"); objbulk.ColumnMappings.Add("PostalCode", "PostalCode"); objbulk.WriteToServer(dt); } } catch (Exception ex) { Response.Write(ex); } } protected DataTable DataExcel() { DataTable dt = new System.Data.DataTable(); try { ssortingng filenname=@"C:\Users\sani singh\Documents\Excel03.xls"; ssortingng sWorkbook = "[Sheet1$]"; ssortingng ExcelConnectionSsortingng=@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+filenname+";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'"; OleDbConnection OleDbConn = new OleDbConnection(ExcelConnectionSsortingng); OleDbConn.Open(); OleDbCommand OleDbCmd = new OleDbCommand(("SELECT * FROM " + sWorkbook), OleDbConn); DataSet ds = new DataSet(); OleDbDataAdapter sda = new OleDbDataAdapter(OleDbCmd); sda.Fill(ds); dt = ds.Tables[0]; OleDbConn.Close(); } catch(Exception ex) { Response.Write(ex); } return dt; } } } 

Ajoutez un DataTable qui peut contenir datatables Excel générées via OLEDb.

 ssortingng excelconnectionssortingng = Ssortingng.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + excelfilepath + ";Excel 12.0 Xml;HDR=YES;IMEX=1;TypeGuessRows=0;ImportMixedTypes=Text;Jet OLEDB:Max Buffer Size=256;"); using (OleDbConnection oledbconn = new OleDbConnection(excelconnectionssortingng)) { using (OleDbCommand oledbcmd = new OleDbCommand(myexceldataquery, oledbconn)) { oledbconn.Open(); OleDbDataReader dr = oledbcmd.ExecuteReader(); dtBulkUpload.Load(dr); } } 

Puis sérialiser ce DataTable en XML qui peut être envoyé à SQL Stored Proc. Cette approche est très utile s'il y a trop de champs et vous pouvez tout envoyer dans un seul paramètre

 using (SsortingngWriter strXML = new SsortingngWriter()) { dtBulkUpload.TableName = "BulkUpload"; dtBulkUpload.WriteXml(strXML, XmlWriteMode.IgnoreSchema, false); xmlSsortingng = strXML.ToSsortingng(); } using (SqlCommand cmd = new SqlCommand("Stored PROC Name")) { cmd.Parameters.AddWithValue("@dtBulkUpload", bulkUploadData); //SqlParameter returnParameter = cmd.Parameters.Add("@result", SqlDbType.NVarChar); //returnParameter.Direction = ParameterDirection.Output; cmd.Parameters.Add("@result", SqlDbType.NVarChar,3000); cmd.Parameters["@result"].Direction = ParameterDirection.Output; cmd.Connection = con; cmd.CommandType = CommandType.StoredProcedure; con.Open(); cmd.ExecuteNonQuery(); query = (ssortingng)(cmd.Parameters["@result"].Value.ToSsortingng()); con.Close();