یکی از زمانبرترین عملیاتها در نرم افزارهای اتوماسیون، خواندن اطلاعات از فایلهای اکسل با حجم بالا است. در صورتی که این کار را میتوان با استفاده از کلاس SqlBulkCopy به سرعت انجام داد. در ادامه نحوه استفاده از این کلاس، همراه نمونه کدها آورده شده است.
توضیحات به صورت Comment است.
try { //انتخاب فایل اکسل OpenFileDialog ofd = new OpenFileDialog(); ofd.Title = "انتخاب فایل اکسل حاوی اطلاعات"; ofd.Filter = "فایل اکسل 2003 (*.xls)|*.xls|فایل اکسل 2007 به بعد(*.xlsx)|*.xlsx"; if (ofd.ShowDialog() == DialogResult.OK) { string excelConnectionString = ""; string SourceFilePath = ofd.FileName; //ایجاد کانکشن استرینگ برا خواندن کل اطلاعات از فایل اکسل و ریختن آنها در یک دیتاتیبل به نام dt if (System.IO.Path.GetExtension(ofd.FileName) == ".xlsx") //تشخیص نوع فایل اکسل برای ایجاد کانکشن استرینگ برای نسخههای مختلف اکسل excelConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + SourceFilePath + ";Extended Properties=Excel 12.0"; else if (System.IO.Path.GetExtension(ofd.FileName) == ".xls") excelConnectionString = "Provider=Microsoft.Jet.Oledb.4.0;Data Source=" + SourceFilePath + ";Extended Properties=Excel 8.0"; DataTable dt = new DataTable("tblinfos"); using (System.Data.OleDb.OleDbConnection connection = new System.Data.OleDb.OleDbConnection(excelConnectionString)) { connection.Open(); System.Data.OleDb.OleDbDataAdapter da = new System.Data.OleDb.OleDbDataAdapter("SELECT * FROM [List$]", connection);//List نام شیت در فایل اکسل است da.Fill(dt); connection.Close(); } using (System.Data.OleDb.OleDbConnection connection = new System.Data.OleDb.OleDbConnection(excelConnectionString)) { this.Cursor = Cursors.WaitCursor; connection.Open(); //ایجاد ارتباط با بانک اس کیو ال string sqlConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\BankDPR.mdf;Max Pool Size=6000; Connection Timeout=50;Integrated Security=True;User Instance=True"; Dataaccess db = new Dataaccess(); DataTable dtr = db.select("Select Top(1) * From tblinfos");//بدست آورن نام ستونهای جدول مورد نظر برای تطبیق با ستونهای فایل اکسل //******************* Fast Copy using (System.Data.SqlClient.SqlBulkCopy bulkCopy = new System.Data.SqlClient.SqlBulkCopy(sqlConnectionString, System.Data.SqlClient.SqlBulkCopyOptions.KeepIdentity))//تعریف یک شی از کلاس SqlBulkCopy { for (int i = 1; i < dtr.Columns.Count; i++) { bulkCopy.ColumnMappings.Add(dt.Columns[i - 1].Caption, dtr.Columns[i].Caption);//با استفاده از خاصیت ColumnMappings نام ستونهای فایل اکسل با نام ستونهای جدول مورد نظر بانک sql تطبیق داده میشود } bulkCopy.DestinationTableName = "tblinfos";//مشخص نمودن نام جدول که قرار است اطلاعات درون ان کپی گردد bulkCopy.WriteToServer(dt);//انجام عملیات کپی اطلاعات از دیتاتیبل با نام dt به بانک } this.Cursor = Cursors.Arrow; MessageBox.Show("اطلاعات از فایل شما خوانده شد"); } } } catch (Exception ex) { this.Cursor = Cursors.Arrow; MessageBox.Show(ex.Message, "error"); }