Import File Excel trong C# vào cơ sở dữ liệu (Import Excel File to Database) có nghĩa là lấy dữ liệu từ file excel nhập vào cơ sở dữ liệu (Database).Nó được sử dụng rất nhiều trong lập trình C# cho các ứng dụng phần mềm hiện nay.
Import file excel vào cơ sở dữ liệu sử dụng ngôn ngữ C# được ứng dụng cho trường hợp bạn phải nhập hoặc xử lý với dữ liệu lớn, một dach sách dữ liệu lớn nhằm giúp tiết kiệm thời gian nhập liệu hoặc xử lý dữ liệu.
Ví dụ khi bạn cần nhập một danh sách nhân viên khoảng 50000 nhân viên thì cần rất nhiều thời gian, có khi phải mất 5 tuần mới nhập xong.Tuy nhiên nếu bạn đã có sẵn 1 file excel của danh 50000 nhân viên đó thì bạn có thể import file excel trong C# chỉ mất khoảng 10 đến 20 giây.Vậy làm thế nào để import file excel trong C# vào cơ sở dữ liệu ? Trong bài này chúng tôi sẽ hướng dẫn bạn viết code C# để import dữ liệu của file excel vào trong cớ sở dữ liệu MSSQL Server.
Ví dụ yêu cầu bài toán của phần mềm là đọc dữ liệu từ file excel sau đó lưu dữ liệu vào cơ sở dữ liệu và hiển thị dữ liệu từ cơ sở dữ liệu lên DataGridview.
Chúng ta sẽ cần xây dựng chương trình C# để import dữ liệu từ file excel vào cơ sở dữ liệu (Database) như sau:
1. Tạo file excel:
2. Tạo bảng table trong cơ sở dữ liệu MS SQL Server.
3. Tạo project import file excel vào database trong windows form.
Tạo file excel mà bạn cần import vào cơ sở dữ liệu với tên là : ImportExcel_Tem.xlsx
Nội dung file excel như hình ảnh dưới đây:
Tạo bảng table : Employee_t trong Database TestLuu
Nội dung bảng Employee_t như sau:
Các bước tạo project như sau:
Giải thích:
+ Label: File Name
+ Textbox: txt_FilePath là để hiển thị đường dẫn của file excel
+ Button: import Excel File… là để chọn file excel
+ DataGridView : dt_List_Employees là để hiển thị dữ liệu từ file excel.
+ openFileDialog1: là để chọn nơi lưu trữ file excel.
Để làm việc với file excel bạn cần thêm thư viện Microsoft.Office.Interop.Excel vào dự án project.
Có 2 cách thêm thư viện Microsoft.Office.Interop.Excel
+ Cách 1: Nhấp chuột phải vào References sau đó chọn Add Reference.Sau đó hộp thoại xuất hiện và Click vào Assemblies, Extensions, sau đó tích chọn Microsoft.Office.Interop.Excel.
+ Cách 2: Nhấp chuột phải vào References sau đó chọn Add Reference.Sau đó hộp thoại xuất hiện và Click vào nút Browse, ổ C, Microsoft Office, Office12, sau đó mở EXCEL.EXE.
+ Thêm thư viện dưới đây vào source code
using System.IO;
using System.Data.OleDb;
using System.Data.SqlClient;
+ Viết code cho sự kiện click của nut button Import Excel File để đọc file excel và lưu dữ liệu vào cơ sở dữ liệu và sau đó hiển thị dữ liệu lên DataGridView.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Data.OleDb;
using System.Data.SqlClient;
namespace ImportExcel_CSharp
{
public partial class ImportExcel_CSharp : Form
{
public ImportExcel_CSharp()
{
InitializeComponent();
}
//Import Excel file and Save data to a table in Database
private void btn_Choose_ExcelFile_Click(object sender, EventArgs e)
{
string filePath = string.Empty;
string fileExt = string.Empty;
//open dialog to choose file
OpenFileDialog file = new OpenFileDialog();
//if there is a file choosen by the user
if (file.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
//get the path of the file
filePath = file.FileName;
txt_FilePath.Text = Path.GetFullPath(filePath);
//get the file extension
fileExt = Path.GetExtension(filePath);
if (fileExt.CompareTo(".xls") == 0 || fileExt.CompareTo(".xlsx") == 0)
{
try
{
DataTable dtExcel = new DataTable();
//read excel file
dtExcel = ReadExcel(filePath, fileExt);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
}
else
{
//custom messageBox to show error
MessageBox.Show("Please choose .xls or .xlsx file only.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
//Function Read data from excel file
private DataTable ReadExcel(string fileName, string fileExt)
{
string conn = string.Empty;
DataTable dtexcel = new DataTable();
if (fileExt.CompareTo(".xls") == 0)
//for below excel 2007 version
conn = @"provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileName + ";Extended Properties='Excel 8.0;HRD=Yes;IMEX=1';";
else
//for above excel 2007 version
conn = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + ";Extended Properties='Excel 12.0;HDR=Yes';";
using (OleDbConnection con = new OleDbConnection(conn))
{
try
{
//Read data from sheet
OleDbDataAdapter oleAdpt = new OleDbDataAdapter("select * from [Sheet1$]", con);
DataSet ds = new DataSet();
// Fill excel data oleAdpt into dataTable
oleAdpt.Fill(ds, "AA");
if (ds.Tables[0].Rows.Count > 0)
{
//Connect to Database TestLuu
String Str_connect_DB = "data source=192.168.1.10;initial catalog=TestLuu; user id=sa; password=123456";
SqlConnection conn_DB = new SqlConnection(Str_connect_DB);
conn_DB.Open();
for (int i = 0; i <= ds.Tables[0].Rows.Count - 1; i++)
{
//Insert data to a table : Employee_t in Database
string SQL_Insert = " INSERT INTO Employee_t(EmployeeID, EmployeeName, EmployeeAge) VALUES('" + ds.Tables[0].Rows[i]["EmployeeID"].ToString().Trim() + "',N'" + ds.Tables[0].Rows[i]["EmployeeName"].ToString().Trim() + "','" + Convert.ToInt32(ds.Tables[0].Rows[i]["EmployeeAge"].ToString().Trim()) + "')";
SqlCommand cmd = new SqlCommand(SQL_Insert, conn_DB);
cmd.ExecuteNonQuery();
}
MessageBox.Show("Imported successfully");
//Show data in DataGridView
String sql_ShowData = "Select * from Employee_t ";
SqlDataAdapter da = new SqlDataAdapter(sql_ShowData, conn_DB);
DataTable dt = new DataTable();
da.Fill(dt);
dt_List_Employees.DataSource = dt;
conn_DB.Close();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
}
return dtexcel;
}
}
}