خواندن سریع اطلاعات فایل اکسل و ذخیره در بانک SQL
نویسنده: مجتبی فخاری
تاریخ: ۱۳۹۲/۱۱/۱۷ ۱۸:۳۵
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
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");
} SELECT * FROM [List$]