zoukankan      html  css  js  c++  java
  • Excel导入导出数据库

      有时候我们会遇到这样的需求,需要向数据库导入Excel,或者从数据库中导出数据存为Excel,尤其是在做报表的时候,或者需要从其他系统导入数据,一般都是以Excel文件形式存在的。正好这几天在做这样的事,我整理一下这两种操作的大概做法。以后遇到这样的问题就不用怕了!!!

    1.数据从数据库中导出存为Excel:

     private void btnInput_Click(object sender, EventArgs e)
            {
                DataGridViewToExcel("采集信息");
            }
     
            private void DataGridViewToExcel( string filename)
            {
                using (OperationClient proxy = new OperationClient())//引用了服务代理
                {
                    try
                    {
                        SaveFileDialog dlg = new SaveFileDialog();
                        dlg.Filter = "Execl files (*.xls)|*.xls";
                        dlg.FilterIndex = 0;
                        dlg.RestoreDirectory = true;
                        dlg.Title = "保存为Excel文件";
                        dlg.FileName = filename;
                        if (dlg.ShowDialog() == DialogResult.OK)
                        {
                            Stream myStream;
                            myStream = dlg.OpenFile();
                            StreamWriter sw = new StreamWriter(myStream, System.Text.Encoding.GetEncoding(-0));
                            string colHeaders = "", ls_item = "";
                            //写入列标题    
                            colHeaders += "身份证号" + "	";
                            colHeaders += "是否采集";
                            sw.WriteLine(colHeaders);
                            //写入列内容
                            //这里的proxy.Output()函数是调用定义好的WCF服务中的,它返回值是一个集合,而每个元素都是一条记录(多个字段)
                            foreach (var s in proxy.Output())
                            {
                                ls_item += s.ID + "	";
                                ls_item += s.statu;
                                sw.WriteLine(ls_item);
                                ls_item = "";
                            }
                            sw.Close();
                            myStream.Close();
                            MessageBox.Show("导出[" + filename + "]成功""提示");
     
                        }
                    }
                    catch (Exception e)
                    {
                        MessageBox.Show(e.Message);
                    }
                }
            }

    2.Excel的数据导入到数据库中

    private void btnOutput_Click(object sender, EventArgs e)
            {
                OpenFileDialog openFileDialog = new OpenFileDialog();
                openFileDialog.Filter = "表格文件 (*.xls)|*.xls";
                openFileDialog.RestoreDirectory = true;
                openFileDialog.FilterIndex = 1;
                if (openFileDialog.ShowDialog() == DialogResult.OK)
                {
                    InExcelData(openFileDialog.FileName);
                }
                MessageBox.Show("导入[" + openFileDialog.FileName + "]成功""提示");
            }
             private bool InExcelData(string filePath)
            {
                try
                {
                    string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + filePath + ";" + "Extended Properties=Excel 8.0;";
     
                    OleDbConnection con = new OleDbConnection(strConn);
                    con.Open();
                    string[] names = GetExcelSheetNames(con);//GetExcelSheetNames(filePath);
                    if (names != null)
                    {
                        if (names.Length > 0)
                        {
                            foreach (string name in names)
                            {
                                OleDbCommand cmd = con.CreateCommand();
                                cmd.CommandText = string.Format(" select * from [{0}]", name);//[sheetName$]要如此格式
                                OleDbDataReader odr = cmd.ExecuteReader();
     
                                while (odr.Read())
                                {
     
                                     if (odr[0].ToString() != "")
                                    {
                                        if (odr[0].ToString() == "身份证号")//过滤列头 按你的实际Excel文件
                                            continue;
                       //以下内容视自己的需要改动,要知道这里odr就是一个集合了,这里用循环是把集合里面每个元素读出来,一个元素就是一条记录(多个字段),
    //一般我们都会把一条记录定义成一个数据契约,方便传输                                       using (OperationClient proxy = new OperationClient())                                     {                                         Excel excel=new Excel(){ID = odr[0].ToString(),statu = odr[1].ToString()};                                         proxy.InExcels(excel); //服务那边定义成一个数据契约类型的集合,例如InExcels(Excel excel)                                    }                                 }                             }                             odr.Close();                                                      }                     }                 }                 con.Close();                 return true;                             }             catch (Exception ex)             {                 MessageBox.Show(ex.Message);                 return false;             }         }         public static string[] GetExcelSheetNames(OleDbConnection con)         {             try             {                 DataTable dt = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new[] { nullnullnull"Table" });//检索Excel的架构信息                 var sheet = new string[dt.Rows.Count];                 for (int i = 0, j = dt.Rows.Count; i < j; i++)                 {                     sheet[i] = dt.Rows[i]["TABLE_NAME"].ToString();                 }                 return sheet;             }             catch             {                 return null;             }         }
  • 相关阅读:
    SQL Server 存储过程
    FindControl的详细介绍
    Transaction-SQL 游标
    硬盘安装工具nt6 hdd installer无法卸载的问题
    Some question about Source Tree
    java 简单加密
    java 多态与多重继承
    构造方法和方法的重载
    64位WIN7上安装11G R2 ,PLSQL的配置方法
    语录(排名不分先后)
  • 原文地址:https://www.cnblogs.com/xushaoxin/p/3227442.html
Copyright © 2011-2022 走看看