WPF读取Sql的表导出为EXCEL

1.目的和思路

我们想做的是把Sql的数据库的表导出到Excel。。。

 

那么想一想应该怎么做?

 

首先我们要连接数据库,读取数据库的表,把每个表的每行和每列依次读取出来,然后写入到文件,文件为Excel格式的。。。

 

2.步骤和过程

第一,我们要连接数据库。。

 

数据库添加到工程里面,参见前面的文章。。然后

 

我们要创建一个类,我们命名为SqlToExcel.cs

 

 

public class sqlconn
    {
        public sqlconn()
        {
            //
            // TODO: 在此处添加构造函数逻辑
            //
        }

        public SqlConnection ConnStr;

        public string SqlConnStr()//设置数据库文件连接字符串
        {
            string ConnectString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\DataBase\Student.mdf;Integrated Security=True;User Instance=True";
            //@"Data Source=.\SQLEXPRESS2008;AttachDBFilename=|DataDirectory|\10xinguan-DB.mdf;Integrated Security=True;User Instance=True";
            //"server=.;database=Student-DB;uid=sa;pwd=sa";


            //这里没有打开数据库的原因是遵循晚打开、早关闭的原则        
            return ConnectString;
        }

        public void open()      //打开数据库
        {
            string constr;
            constr = SqlConnStr();
            ConnStr = new SqlConnection(constr);
            ConnStr.Open();
        }

        public void close()      //关闭数据库
        {
            ConnStr.Dispose();
            ConnStr.Close();
        }

        public int execsql(string sql)   //执行sql语句
        {
            open();
            SqlCommand cmd = new SqlCommand(sql, ConnStr);
            int count = cmd.ExecuteNonQuery();
            close();
            return count;
        }

        public DataSet dataset(string sql, string tablename)  //返回DataSet对象
        {
            open();
            SqlDataAdapter da = new SqlDataAdapter(sql, ConnStr);
            DataSet ds = new DataSet();
            da.Fill(ds, tablename);
            return ds;
        }

        public DataView dataview(string sql, string tablename) //返回DataView对象
        {
            DataSet ds = new DataSet();
            ds = dataset(sql, tablename);
            DataView dv = new DataView(ds.Tables[0]);
            return dv;
        }

        public SqlDataReader datareader(string sql) //返回DataReader对象
        {
            open();
            SqlCommand cmd = new SqlCommand(sql, ConnStr);
            SqlDataReader dr = cmd.ExecuteReader();
            return dr;

        }

        public DataTable datatb(string sql)  //返回DataSet对象
        {
            open();
            SqlDataAdapter da = new SqlDataAdapter(sql, ConnStr);
            DataTable dt = new DataTable();
            da.Fill(dt);
            return dt;
        }

    }
View Code

 



 

这个类的作用就是配置下数据库,方便读取数据库的表方便。。

 

数据库配置完成了我们要操作EXCEL了。。首先我们要引用一个.net类库Microsoft.Office.Interop.Excel

 

 

public int DataToExcel1()
        {

            Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application();//出错原因是没安装OFFICE的Excel,wps的不行
            Microsoft.Office.Interop.Excel.Workbook excelWB;

            excelWB = excelApp.Workbooks.Add(System.Reflection.Missing.Value);    //创建工作簿(WorkBook:即Excel文件主体本身)  
            Worksheet excelWS = (Worksheet)excelWB.Worksheets[1];   //创建工作表(即Excel里的子表sheet) 1表示在子表sheet1里进行数据导出  
            excelWS.Cells.NumberFormat = "@";     //  如果数据中存在数字类型 可以让它变文本格式显示  





            sqlconn con = new sqlconn();
            con.open();


            System.Data.DataTable dt = con.datatb("SELECT * FROM 部门列表");



            //int  count = dt.Columns.Count;
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                for (int j = 0; j < dt.Columns.Count; j++)
                {
                    excelWS.Cells[i + 1, j + 1] = dt.Rows[i][j].ToString(); //Excel单元格第一个从索引1开始  
                }
            }
            excelWB.SaveAs("D:\\部门列表.xlsx");  //将其进行保存到指定的路径  
            excelWB.Close();
            excelApp.Quit();  //释放可能还没释放的进程  
            con.close();
            return dt.Rows.Count;
        }
View Code

 


我们定义一个自定义方法,用来创建,读取,写入EXCEL..

 

 

 

 

 

然后我们前台可以放一个按钮

<Button Content="导出到EXCEL" Height="23" HorizontalAlignment="Left" Margin="0,25,0,0" Name="button1" VerticalAlignment="Top" Width="82" Click="button1_Click" />

 

 

相应的后台代码是

 

 private void button1_Click(object sender, RoutedEventArgs e)
        {
            DataToExcel1();

            MessageBox.Show("导出EXCEL文件成功!");
        }

 

调用自定的方法,然后显示消息框。。

 

 

 


恩。。然后就结束了。。

posted @ 2013-11-21 22:56  代码拯救世界  阅读(670)  评论(0编辑  收藏  举报