您的位置:首页 > 编程语言 > C#

Excel数据导入(C#)

2015-06-03 00:30 816 查看
这种需求还是很多,感觉是因为天朝很多三四五六七八线城市的(没去过大城市啊)企业还有政府部门还都处于试图脱离文件存储,但是历史数据大量存在于Excel表格之中的阶段。(纸质文件就不知道怎么解决了,手工录入吧,反正大天朝不缺人)

最近做了一些,试图写写。

工具:

ExcelDataReader:https://github.com/ExcelDataReader/ExcelDataReader,不用太考虑内存,简单粗暴。

System.Data.SqlClient.SqlbulkCopy:针对MSSQL。

别的数据库再议。

思路方面:

Created with Raphaël 2.1.2开始配置映射读取数据校验数据导入数据读取结束?结束yesno

实现

映射关系

要确认Excel列的数据类型,要不没法玩。建议统一在Excel中处理成文本数据。

[code]class ExcelColumn
{
    public string name {get;set;}
    public string datatype {get;set;}
}

Dictionary<ExcelColumn, string> ExcelToDbMap


ExcelDataReader

改明儿再写,挺简单的。。

导入数据之SqlbulkCopy

[code]using System.Data;
using System.Data.SqlClient;

public static bool Import(Dictionary<string, string> map, DataTable dt, string tablename, int batch = 5000, out string message)
        {
            bool res = true;
            message = "";

            using (SqlConnection conn = new SqlConnection("我是数据库连接字符串"))
            {
                conn.Open();
                using (SqlTransaction trans = conn.BeginTransaction())
                {
                    try
                    {
                        using (SqlBulkCopy bulk = new SqlBulkCopy(conn, SqlBulkCopyOptions.Default, trans))
                        {
                            foreach (var s in map)
                                  {bulk.ColumnMappings.Add(s.Key,s.Value);}
                            bulk.BatchSize = batch;
                            bulk.DestinationTableName = tablename;
                            bulk.WriteToServer(dt);
                            trans.Commit();
                        }
                    }
                    catch (Exception ex)
                    {
                        trans.Rollback();
                        message = ex.ToString();
                        res = false;
                    }
                }
            }
            return res;
        }


最后

祝大家生活愉快。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: