20160308 C#代码实现Excel数据导入到SQL Server数据库中

添加一个类,StoreHouse.cs

第一个函数:

/// 
/// 获取一个Excel中的所有worksheet,放到一个List集合中
/// 
/// 
/// 返回包含Excel中所有sheet的一个sheet集合
public static List GetSheetName(string excelName)
{
	List sheetNames = new List();
	OleDbConnection oleconn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + excelName + ";Extended Properties=Excel 12.0");
	oleconn.Open();
	DataTable DTable = oleconn.GetSchema("Tables");
	DataTableReader DTReader = new DataTableReader(DTable);
	while (DTReader.Read())
	{
		string sheetName = DTReader["Table_Name"].ToString().Replace('$', ' ').Trim();
		if (!sheetNames.Contains(sheetName))
		{
			sheetNames.Add(sheetName);
		}
	}
	DTable = null;
	DTReader = null;
	oleconn.Close();
	return sheetNames;
}



第二个函数:

/// 
/// 一个sheet一个sheet导入到数据库中
/// 
/// 
/// 
/// 
/// 数据库中的表名
public static void ImportDataToSql(string excelName, string sheetName, string connStr, string T_Name)
{
	string OledbConnstr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + excelName + ";Extended Properties=Excel 12.0;";
	string sqlExcel = string.Format("SELECT * FROM [{0}$]", sheetName);
	OleDbDataAdapter oleda = new OleDbDataAdapter(sqlExcel, OledbConnstr);
	DataSet ds = new DataSet();
	oleda.Fill(ds, sheetName);

	using (SqlBulkCopy bcp = new SqlBulkCopy(connStr))
	{
		bcp.BatchSize = 100;
		bcp.DestinationTableName = T_Name;
		bcp.WriteToServer(ds.Tables[0]);
	}
}

第三个函数:

/// 
/// 通过打开Excel将Excel导入到数据库中的指定表格中,需要结合GetSeetName和ImportDataToExcel
/// 
/// 
/// 
public static bool ExcelToSql(string destTable)
{
	//打开文件
	OpenFileDialog ofd = new OpenFileDialog();
	ofd.Title = "CMC";
	ofd.Filter = "Excel files(*.xls,*.xlsx)|*.xls;*.xlsx|All files(*.*)|*.*";
	ofd.Multiselect = true;
	if (ofd.ShowDialog() != DialogResult.OK)
	{
		return false;
	}
	//获取打开的文件的文件名
	string selectfilenames = "";
	for (int i = 0; i < ofd.FileNames.Length; i++)
	{
		selectfilenames += ofd.FileNames[i] + ",";
	}
	//得到所有选择的Excel的路径,中间以逗号分隔,去除最后一个逗号
	selectfilenames = selectfilenames.TrimEnd(',');

	//声明一个数组,一个数组元素存储一个excel
	string[] excelNames = selectfilenames.Split(',');
	string excelName = "";  //存储单个excel路径名
	List sheetNames = new List();   //存储所有Excel的List集合
	for (int i = 0; i < excelNames.Length; i++)
	{
		excelName = excelNames[i];
		sheetNames = StoreHouse.GetSheetName(excelName);
		for (int j = 0; j < sheetNames.Count; j++)
		{
			StoreHouse.ImportDataToSql(excelName, sheetNames[j], Program.connStr, destTable);
		}
	}
	return true;
}


关于connStr见http://blog.csdn.net/kevinhuang2088/article/details/50767671

这样就可以使用StoreHouse.ExcelToSql(string destTable)将Excel导入到数据库中,destTable是数据库中已经新建好的Table



你可能感兴趣的:(SQL,Server,.NET)