首先,看一下我的窗体设计:

要插入的Excel表:

编码 名称 联系人 电话 省市 备注
100 100线 张三 12345678910 北京 测试
101 101线 张三 12345678910 上海 测试
102 102线 张三 12345678910 深圳 测试
103 103线 张三 12345678910 广州 测试
104 104线 张三 12345678910 福建 测试
105 105线 张三 12345678910 厦门 测试
106 106线 李四 12345678910 台湾 测试
107 107线 李四 12345678910 石家庄 测试
108 108线 李四 12345678910 合肥 测试
109 109线 李四 12345678910 东城 测试
110 110线 李四 12345678910 丰台 测试
111 111线 李四 12345678910 朝阳 测试
112 112线 王五 12345678910 海淀 测试
113 113线 王五 12345678910 昌平 测试
114 114线 王五 12345678910 大兴 测试
115 115线 王五 12345678910 西城 测试
116 116线 王五 12345678910 通州 测试
117 117线 赵六 12345678910 石景山 测试
118 118线 赵六 12345678910 门头沟 测试
119 119线 赵六 12345678910 房山 测试

后台代码:

/

private void btnFindFile_Click(object sender, EventArgs e)

        {

            #region 选择文件按钮事件

            openFile.Multiselect = true;

            openFile.FileName = "";

            openFile.Filter = "(*.xlsx,*.xls)|*.xlss;*.xls";

            openFile.ShowDialog();

            openFile.Reset();

            #endregion

        }

private void openFile_FileOk(object sender, CancelEventArgs e)

        {            

            #region 打开文件(确定事件)

            try

            {

                if (dgvData.Rows.Count > 0)

                {

                    dgvData.Rows.Clear();

                }

                strFileName = openFile.FileNames;

                strFilePath = openFile.SafeFileNames;

                Microsoft.Office.Interop.Excel.Application excel1 = new Microsoft.Office.Interop.Excel.Application();                

                strFilePaths.Clear();//清空上次要导入的文件

                for (int j = 0; j < strFileName.Length; j++)

                {                 

                    string FileName = strFileName[j];

                    int rows = this.dgvData.Rows.Count;

                    this.dgvData.Rows.Add(1);//添加一行,不然数据不显示

                    //获取工作表名

                    object Nothing = System.Reflection.Missing.Value;

                    Microsoft.Office.Interop.Excel.Workbook wbs = null;

                    //获取EXCEL中的第一张工作簿名称 

                    wbs = excel1.Workbooks.Open(FileName, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing,Nothing, Nothing, Nothing, Nothing, Nothing);

                    Microsoft.Office.Interop.Excel.Worksheet SHT1 = (Microsoft.Office.Interop.Excel.Worksheet)wbs.Sheets[1];

                    string sheetname = SHT1.Name;                  

                    dgvData.Rows[j].Cells["XuHao"].Value=j+1;

                    dgvData.Rows[j].Cells["Lujing"].Value = FileName;

                    dgvData.Rows[j].Cells["Gongzuobiao"].Value = sheetname;

                    dgvData.Rows[j].Cells["Zhuangtai"].Value = "待导入";

                }

                Kill(excel1);

            }

            catch

            {

                return;

            }

            #endregion

        }

private void btnStartIn_Click(object sender, EventArgs e)

        {

            #region 开始导入按钮

            try

            {

                int row = 0;

                int DataNum = dgvData.Rows.Count;//将要导入的表的数量

                if (DataNum == 0)

                {

                    PublicClass.ShowMessage("请先选择文件");

                    return;

                }

                DataSet[] dss = new DataSet[DataNum];

                Microsoft.Office.Interop.Excel.Application m_objExcel = new Microsoft.Office.Interop.Excel.Application();

                Microsoft.Office.Interop.Excel.Workbooks workBooks = m_objExcel.Workbooks;

                Object missing = 1;

                //显示进度条

                grbIn.Visible = true;

                proJinDu.Visible = true;





                string textName = "";//获取选择文件的名称

                string sheetName = "";//获得选中工作表名称

               // DataSet das;

                for (int i = 0; i < DataNum;i++ )

                {

                    textName = dgvData.Rows[i].Cells[1].Value.ToString(); //获得选中的文件的地址                   

                    sheetName = dgvData.Rows[i].Cells[2].Value.ToString(); //获得选中工作表名称

                    workBooks.Open(textName, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing);

                    Microsoft.Office.Interop.Excel.Sheets objSheets = m_objExcel.Worksheets;

                    Microsoft.Office.Interop.Excel._Worksheet objSheet = (Microsoft.Office.Interop.Excel._Worksheet)objSheets[1];                   





                    //读取excel数据

                    dss[i] = GetDataBySheetName07(sheetName, textName);

                    row += dss[i].Tables[0].Rows.Count;

                }

                

                #region 循环表

                int numcout = 0;//记录上一张工作表导入成功的记录条数

                for (int j = 0; j < DataNum; j++)

                {

                    DataSet ds = new DataSet();

                    ds=dss[j];

                    int ii = 1;//导入工作表中的当前行                    

                    textName = dgvData.Rows[j].Cells[1].Value.ToString(); //获得选中的文件的地址                   

                    sheetName = dgvData.Rows[j].Cells[2].Value.ToString(); //获得选中工作表名称

                    //声明导入对象

                    workBooks.Open(textName, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing);

                    Microsoft.Office.Interop.Excel.Sheets objSheets = m_objExcel.Worksheets;

                    Microsoft.Office.Interop.Excel._Worksheet objSheet = (Microsoft.Office.Interop.Excel._Worksheet)objSheets[1];                    





                    //读取excel数据

                    ds = GetDataBySheetName07(sheetName, textName);

                    //row = ds.Tables[0].Rows.Count;

                    proJinDu.Minimum = 0;

                    proJinDu.Value = 0;

                    proJinDu.Maximum = row;

                    if (row == 0)

                    {

                        PublicClass.ShowMessage("当前选择的工作表没有数据信息!");

                        return;

                    }                    

                    #region 循环每张表的记录

                    for (int m = 0; m < ds.Tables[0].Rows.Count; m++)

                    {

                        try

                        {

                            ii++;





                            int_in++;//正在导入第XX条记录

                            string CarriersCode = ds.Tables[0].Rows[m][0].ToString().Trim();//承运商编码

                            string CarriersName = ds.Tables[0].Rows[m][1].ToString().Trim();//名称

                            string CarriersCity = ds.Tables[0].Rows[m][4].ToString().Trim();//省、市





                            //检查编码、名称是否为空

                            if (CarriersCode.Equals(""))

                            {

                                objSheet.Cells[ii, 7] = "编码不能为空!";

                                int_wrong++;                                

                                lblRecord.Text = "共" + row + "条记录,正在导入" + int_in + "条记录,错误" + int_wrong + "条!";

                                continue;

                            }

                            if (CarriersName.Equals(""))

                            {

                                objSheet.Cells[ii, 7] = "名称不能为空!";

                                int_wrong++;

                                lblRecord.Text = "共" + row + "条记录,正在导入" + int_in + "条记录,错误" + int_wrong + "条!";

                                continue;

                            }

                            if (CarriersCity.Equals(""))

                            {

                                objSheet.Cells[ii, 7] = "省市不能为空!";

                                int_wrong++;

                                lblRecord.Text = "共" + row + "条记录,正在导入" + int_in + "条记录,错误" + int_wrong + "条!";

                                continue;

                            }

                            //检查编码、名称是否存在

                            string ssql = "select * from T_Base_Carriers where Carriers_Code='" + CarriersCode + "' or Carriers_Name='" + CarriersName + "'";

                            DataSet ddss = DataAccess.GetDataSet(ssql, false, null);

                            if (ddss.Tables[0].Rows.Count > 0)

                            {

                                if (CarriersCode == ddss.Tables[0].Rows[0]["Carriers_Code"].ToString())

                                {





                                    objSheet.Cells[ii, 7] = "编码已存在!";

                                    int_wrong++;

                                    lblRecord.Text = "共" + row + "条记录,正在导入" + int_in + "条记录,错误" + int_wrong + "条!";

                                    continue;

                                }

                                if (CarriersName == ddss.Tables[0].Rows[0]["Carriers_Name"].ToString())

                                {

                                    objSheet.Cells[ii, 7] = "名称已存在!";

                                    int_wrong++;

                                    lblRecord.Text = "共" + row + "条记录,正在导入" + int_in + "条记录,错误" + int_wrong + "条!";

                                    continue;

                                }

                            }





                            object[] obj = new object[8];

                            obj[0] = doubleid;

                            obj[1] = CarriersCode;

                            obj[2] = CarriersName;

                            obj[3] = CarriersCity;

                            obj[4] = ds.Tables[0].Rows[m][2].ToString();

                            obj[5] = ds.Tables[0].Rows[m][3].ToString();

                            obj[6] = ds.Tables[0].Rows[m][5].ToString();

                            obj[7] = 1;

                            //obj[7] = Frm_Login.userID;

                            int hh = Convert.ToInt32(DataAccess.ExecuteNonQuery("P_Base_Carriers_Save", true, obj));

                            if (hh > 0)

                            {

                                int_right++;

                            }

                            else

                            {

                                int_wrong++;

                            }

                        }

                        catch

                        {

                            m_objExcel.Visible = true;

                            throw;

                        }





                        lblRecord.Text = "共" + row + "条记录,正在导入" + int_in + "条记录,错误" + int_wrong + "条!";

                        this.proJinDu.Value = int_in;

                    }

                    #endregion

                    lblRecord.Text = "共" + row + "条记录,导入成功" + (int_in - int_wrong) + "条记录,错误" + int_wrong + "条!";

                    this.proJinDu.Maximum = row - int_wrong;

                    this.proJinDu.Value = row - int_wrong;

                    numcout = int_right-numcout;

                    if (numcout < ds.Tables[0].Rows.Count)

                    {

                        dgvData.Rows[j].Cells[3].Value = "有错误记录";

                    }

                    else 

                    {

                        dgvData.Rows[j].Cells[3].Value = "导入成功!";

                    }

                }

                #endregion

                if (int_right < row)

                {

                    //设置进度条不显示

                    grbIn.Visible = false;

                    proJinDu.Visible = false;                   

                    PublicClass.ShowMessage("共" + row + "条记录,导入成功" + int_right + "条记录,错误" + int_wrong + "条!");

                    m_objExcel.Visible = true;

                    System.Windows.Forms.Application.DoEvents();

                    return;

                }                 

                System.Windows.Forms.Application.DoEvents();

                m_objExcel.Quit();

                Kill(m_objExcel);

                m_objExcel = null;

                for (int s = 0; s < DataNum; s++)

                {

                    dss[s].Dispose();

                }

                    

                GC.Collect();

                //设置进度条不显示

                grbIn.Visible = false;

                proJinDu.Visible = false;

                PublicClass.ShowMessage("导入成功! 共" + row + "条记录,导入成功" + (int_in - int_wrong) + "条记录,错误" + int_wrong + "条!");

                nowpage = 1;

                DataBind();

                PageState();

                btnCancel.Focus();

            }

            catch (Exception ex)

            {

                PublicClass.ShowMessage(ex.Message);

            }

            #endregion          

        }

效果图:

备注:

1>代码多处调用了自定类,出于机密原因,不能贴出来,敬请原谅。

2>给需要帮助的人们一个思路,里面肯定有许多要完善的地方,大家共同学习。

版权声明:本文为博主原创文章,未经博主允许不得转载。

winform Execl数据 导入到数据库(SQL) 分类: WinForm C# 2014-05-09 20:52 191人阅读 评论(0) 收藏的更多相关文章

  1. UI基础:UIView(window,frame,UIColor,CGPoint,alpha,CGRect等) 分类: iOS学习-UI 2015-06-30 20:01 119人阅读 评论(0) 收藏

    UIView 视图类,视图都是UIView或者UIView子类 UIWindow 窗口类,用于展示视图,视图一定要添加window才能显示 注意:一般来说,一个应用只有一个window 创建一个UIW ...

  2. OC基础:OC 基本数据类型与对象之间的转换方法 分类: ios学习 OC 2015-06-18 20:01 11人阅读 评论(0) 收藏

    1.Foundation框架中提供了很多的集合类如:NSArray,NSMutableArray,NSSet,NSMutableSet,NSDictionary,NSMutableDictionary ...

  3. HBase -ROOT-和.META.表结构(region定位原理) 分类: B7_HBASE 2015-03-13 20:52 90人阅读 评论(0) 收藏

    在HBase中,大部分的操作都是在RegionServer完成的,Client端想要插入,删除,查询数据都需要先找到相应的RegionServer.什么叫相应的RegionServer?就是管理你要操 ...

  4. 哈希-Snowflake Snow Snowflakes 分类: POJ 哈希 2015-08-06 20:53 2人阅读 评论(0) 收藏

    Snowflake Snow Snowflakes Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 34762 Accepted: ...

  5. 选择排序 分类: 算法 c/c++ 2014-10-10 20:32 509人阅读 评论(0) 收藏

    选择排序(假设递增排序) 每次选取从当前结点到末尾结点中最小的一个与当前结点交换,每一轮固定一个元素位置. 时间复杂度O(n^2),空间复杂度O(1).下面的示例代码以带头结点的链表为存储结构: #i ...

  6. Oracle 字符集的查看和修改 分类: H2_ORACLE 2013-06-19 16:52 316人阅读 评论(0) 收藏

    一.什么是Oracle字符集 Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系.ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据.它使数据库 ...

  7. 跨服务器备注SQL数据库 分类: SQL Server 2015-03-05 08:52 227人阅读 评论(0) 收藏

    任务:把服务器1上的SQL数据库自动备份到服务器2上,命名格式=数据库名+年月日+小时. 说明: 服务器2=>192.168.0.22 数据库名=>Book 共享文件夹路径:192.168 ...

  8. winform清空DataGridView中的数据 分类: DataGridView 2014-05-19 20:56 180人阅读 评论(0) 收藏

    我们一般要把dgv情况,一般用: DataTable dt = (DataTable)dgvData.DataSource; dt.Rows.Clear(); dgvData.DataSource = ...

  9. Winform Windows Media Player 简易播放器 分类: WinForm 2014-07-31 20:12 589人阅读 评论(0) 收藏

    新手上路,高手勿进! 窗体设计: 实现效果: 实现代码: using System; using System.Collections.Generic; using System.ComponentM ...

随机推荐

  1. 零售ERP开发(一)

    随着企业信息化不断提高,各种企业管理系统应用而生:怎么才能开发一套简洁.易用.功能健全的管理系统,尤其是能够帮助企业做出重大策略的系统,一致是我们追求的目标.近些年,接触的Erp系统主要包括国内比较知 ...

  2. iOS狂暴之路---iOS的第一个应用中能学到哪些知识

    一.前文回顾 在之前已经介绍了 iOS的学习路线图,因为中间遇到一些Android开发问题,所以就耽搁了一段时间,那么接下来的这段时间我们将继续开始iOS的狂暴之路学习,按照国际惯例,第一个应用当然是 ...

  3. 2016022606 - redis事务

    Redis事务 Redis事务让一组命令在单个步骤执行.事务中有两个属性,说明如下: 1.在一个事务中的所有命令按顺序执行作为单个隔离操作.通过另一个客户端发出的请求在Redis的事务的过程中执行,这 ...

  4. Xsd: Xml序列化、反序列化的利器

    下面讲述根据xml生成对应序列化反序列化类的过程,xml需要首先转化为xsd,然后再生成为实体类.其中,XSD是XML Schema Definition的缩写. 1.制作xml文件:   <? ...

  5. Core MVC

    Core MVC 配置全局路由前缀 前言 大家好,今天给大家介绍一个 ASP.NET Core MVC 的一个新特性,给全局路由添加统一前缀.严格说其实不算是新特性,不过是Core MVC特有的. 应 ...

  6. linux下安装MySQL5.6记录

    把之前装的mysql卸载了,准备重新用代码包装一遍,问了一下公司的DBA,他推荐给我mysql-5.6.16版本,说这个版本比较稳定. 按照网上的教程安装,结果就少文件,我还在找原因的时候,同事来找我 ...

  7. VC下Debug和Release区别

    整理日: 2015年3月23日 最近写代码过程中,发现 Debug 下运行正常,Release 下就会出现问题,百思不得其解,而Release 下又无法进行调试,于是只能采用printf方式逐步定位到 ...

  8. android小知识

    string 与 []byte 互转: public String BytesToString(byte[] data) { return new String(data); } public byt ...

  9. [BZOJ 1082] [SCOI2005] 栅栏 【二分 + DFS验证(有效剪枝)】

    题目链接:BZOJ - 1082 题目分析 二分 + DFS验证. 二分到一个 mid ,验证能否选 mid 个根木棍,显然要选最小的 mid 根. 使用 DFS 验证,因为贪心地想一下,要尽量先用提 ...

  10. Cocos2d-x 2.0以上版本安装方法

    1,cd 到2dx根目录,MAC平台使用./create-multi-platform-projects.py  然后提示: -bash: ./create-multi-platform-projec ...