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

要插入的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. 一个由IsPrime算法引发的细节问题

    //******************************* // //    2014年9月18日星期四,于宿舍撰写 //    作者:夏华林 // //******************* ...

  2. Binary Tree Level Order Traversal II 解题思路

    思路: 与Binary Tree Level Order Traversal I 几乎一样.只是最后将结果存放在栈里,然后在栈里再传给向量即可. 再次总结思路: 两个queue,先把第一个放进q1,循 ...

  3. Django练习项目之搭建博客

    背景:自从今年回家过年后,来到公司给我转了试用,我的学习效率感觉不如从前,而且刚步入社会我总是想要怎么想明白想清楚一些事,这通常会花掉,消耗我大量的精力,因为我想把我的生活管理规划好了,而在it技术学 ...

  4. 更改input【type=file】样式

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  5. 怎样制作PHP验证码?

    <?php /** *制作验证码 *1.启动session *2.设定标头 *3.创建画布 *4.创建颜色 *5.创建随机数并放到画布上 *6.将得到的若干随机数放入session中 *7.添加 ...

  6. MySql模糊查询like通配符使用详细介绍

    MySQL提供标准的SQL模式匹配,以及一种基于象Unix实用程序如vi.grep和sed的扩展正则表达式模式匹配的格式. 一.SQL模式 SQL的模式匹配允许你使用“_”匹配任何单个字符,而“%”匹 ...

  7. 一次 php nusoap 调试过程

    今天跟同事调用一个数据api ,用soap方式调用.本以为很简单的事情,却弄到了晚上. 因为有过调试经验,直接按照以往的过程直接部署,结果是错误. 1. 以为是调用方式错了,问了一下对接的同事,没问题 ...

  8. debug(fmt,args...)调试

    1.定义宏(debug.h) #ifndef __DEBUG__H #define __DEBUG__H #include <stdio.h> #ifdef DEBUG #define d ...

  9. 更新wix installer里的Guid

    string path=@"\Setup\Installer"; var files = Directory.GetFiles(path); foreach (var item i ...

  10. matlab操作之--读取指定文件夹下的“指定格式”文件

    %% 正负样本所在folder fext='*.png';%要读取的文件格式 positiveFolder='F:\课题\Crater detection\machingLearning\Positi ...