C#访问数据库进行查询并将查询结果导出到Excel的总结(窗体)

主要内容:1.C#访问数据库的语句(当前访问的是Access建的mdb数据库,后续转为Oracle建库)

                   2.C#将查询结果导出到Excel

                   3.在查询结果最后一行加入总计行,便于后期插入Word文档

1.C#访问数据库的语句(当前访问的是Access建的mdb数据库,后续转为Oracle建库)

加入 using System.Data.OleDb;用于连接数据库

using System.Data.OleDb;

建立连接数据库的字符串 con,建立存储后续查询语句的字符串数组sql,用dbconn建立连接,用inst查询数据,用dt存储数据,将dt中的数据显示在窗体上的datagridview控件里,最后关闭连接

static string con = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Zhang\Desktop\Database1.mdb;Persist Security Info=False";//用于连接Access数据库的字符串
OleDbConnection dbconn = new OleDbConnection(con);
public static string[] sql = new string[16];
dbconn.Open();
OleDbDataAdapter inst = new OleDbDataAdapter(sql[choosenum], dbconn);
System.Data.DataTable dt = new System.Data.DataTable();
inst.Fill(dt);
dataGridView1.DataSource = dt;
dbconn.Close();

个人对于C#连接Oracle数据库的理解https://blog.csdn.net/linnge/article/details/108419781 

  2.C#将查询结果导出到Excel

加入 using Microsoft.Office.Interop.Excel;

using Microsoft.Office.Interop.Excel;

一次导出多个表到一个Excel文件,不同表放在不同的Sheet上

int OLDOFFICEVESION = -4143;
            int NEWOFFICEVESION = 56;
            SaveFileDialog dialog = new SaveFileDialog();
            dialog.Filter = "Excel file(*.xls)|*.xls";
            dialog.FilterIndex = 0;
            dialog.RestoreDirectory = true;
            dialog.Title = "Export Excel File";
            if (dialog.ShowDialog() == DialogResult.OK)
            {
                if (dialog.FileName == "")
                {
                    MessageBox.Show("请输入保存文件名");
                    dialog.ShowDialog();
                }
            }
            Microsoft.Office.Interop.Excel.Application xlApp1 = new ApplicationClass();
            if (xlApp1 == null) { MessageBox.Show("xlApp为空,报错返回2"); }
            Workbook xlBook1 = xlApp1.Workbooks.Add(true);
            for (int i = 0; i < comboBox1.Items.Count; i++)
            {
                dbconn.Open();
                OleDbDataAdapter inst = new OleDbDataAdapter(sql[i], dbconn);
                System.Data.DataTable dt = new System.Data.DataTable();
                inst.Fill(dt);
                DataRow dr = dt.NewRow();
                //MessageBox.Show(dt.Columns[0].GetType().ToString());
                if (dt.Columns[0].DataType == typeof(string)) { dr[dt.Columns[0].ColumnName.ToString()] = "总计"; }
                else { dr[dt.Columns[0].ColumnName.ToString()] = 111; }
                for (int j = 1; j < dt.Columns.Count; j++)//增加最后合计行
                {
                    if (dt.Columns[j].DataType == typeof(double))
                    {
                        double sumCount = 0;
                        string lie = dt.Columns[j].ColumnName.ToString();
                        object obj = dt.Compute("sum(" + lie + ")", "true");
                        if (obj != null && !string.IsNullOrEmpty(obj.ToString()))
                        {sumCount = (double)obj;}
                        dr[dt.Columns[j].ColumnName.ToString()] = sumCount;
                    }
                    else { dr[dt.Columns[j].ColumnName.ToString()] = "/"; }
                }
                dt.Rows.Add(dr);
                dataGridView1.DataSource = dt;
                dbconn.Close();
                Worksheet xlSheet = (Worksheet)xlBook1.Worksheets[i + 1];
                string ExcelTitle = comboBox1.Items[i].ToString().Split(new char[] { '(' })[0];
                xlSheet.Name = ExcelTitle;
                // Microsoft.Office.Interop.Excel.Worksheet sheet = (Worksheet)xlBook1.Sheets.Item[xlBook1.Sheets.Count];
                xlBook1.Worksheets.Add(After: xlSheet);
                int FormatNum;
                string Version = xlApp1.Version;
                if (Convert.ToDouble(Version) < 12)
                {FormatNum = OLDOFFICEVESION;}
                else { FormatNum = NEWOFFICEVESION; }
                int ColIndex = 0, RowIndex = 0;
                int ColCount = dataGridView1.ColumnCount, RowCount = dataGridView1.RowCount;
                try
                {
                    Range range = xlSheet.Range[xlSheet.Cells[1, 1], xlSheet.Cells[1, ColCount]];
                    range.MergeCells = true;
                    range.Value2 = comboBox1.Items[i].ToString();
                    range.Font.Size = 14;
                    range.Font.Bold = true;
                    range.HorizontalAlignment = Constants.xlCenter;
                    object[,] objData = new object[RowCount + 2, ColCount];//创建缓存数据
                    foreach (DataGridViewColumn col in dataGridView1.Columns) //获取列标题
                    {objData[RowIndex, ColIndex++] = col.HeaderText;}
                    //获取数据
                    for (RowIndex = 1; RowIndex < RowCount; RowIndex++)
                    {
                        for (ColIndex = 0; ColIndex < ColCount; ColIndex++)
                        {
                            if (dataGridView1[ColIndex, RowIndex - 1].ValueType == typeof(string) || dataGridView1[ColIndex, RowIndex - 1].ValueType == typeof(DateTime))
                            {
                                objData[RowIndex, ColIndex] = "";
                                if (dataGridView1[ColIndex, RowIndex - 1].Value != null)
                                {objData[RowIndex, ColIndex] = "" + dataGridView1[ColIndex, RowIndex - 1].Value.ToString();}
                            }
                            else
                            {objData[RowIndex, ColIndex] = dataGridView1[ColIndex, RowIndex - 1].Value;}
                        }
                        System.Windows.Forms.Application.DoEvents();
                    }
                    Range range1 = xlSheet.Range[xlSheet.Cells[2, 1], xlSheet.Cells[RowCount + 1, ColCount]];
                    range1.Value2 = objData;
                    xlSheet.Cells[RowCount + 1, 1] = "总计";
                    range1.HorizontalAlignment = 3;
                    range1.VerticalAlignment = 2;
                    xlBook1.Saved = true;
                    xlBook1.SaveAs(dialog.FileName, FormatNum);
                }
                catch (Exception err)
                { MessageBox.Show("Err:" + err.Message);}
            }
            xlApp1.Quit();
            GC.Collect();//杀进程,避免软件结束后存在多个Microsoft Excel进程,进而影响Excel操作

3.在查询结果最后一行加入总计行,便于后期插入Word文档。先新建行dr,第一列字符填“总计”,判断列类型是字符型还是数字,”字符型填“/”,数字型求和

DataRow dr = dt.NewRow();
                //MessageBox.Show(dt.Columns[0].GetType().ToString());
                if (dt.Columns[0].DataType == typeof(string)) { dr[dt.Columns[0].ColumnName.ToString()] = "总计"; }
                else { dr[dt.Columns[0].ColumnName.ToString()] = 111; }
                for (int j = 1; j < dt.Columns.Count; j++)//增加最后合计行
                {
                    if (dt.Columns[j].DataType == typeof(double))
                    {
                        double sumCount = 0;
                        string lie = dt.Columns[j].ColumnName.ToString();
                        object obj = dt.Compute("sum(" + lie + ")", "true");
                        if (obj != null && !string.IsNullOrEmpty(obj.ToString()))
                        {
                            sumCount = (double)obj;
                        }
                        dr[dt.Columns[j].ColumnName.ToString()] = sumCount;
                    }
                    else { dr[dt.Columns[j].ColumnName.ToString()] = "/"; }
                }
                dt.Rows.Add(dr);
}

 

  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的示例,演示如何使用 C# 和 NPOI 库查询数据库并将其写入 Excel 中。 首先,你需要使用 ADO.NET 来连接数据库查询数据。以下是一个简单的查询代码示例: ```csharp using System.Data; using System.Data.SqlClient; public class DbHelper { public DataTable Query(string sql) { using (SqlConnection conn = new SqlConnection("your connection string here")) { conn.Open(); using (SqlCommand cmd = new SqlCommand(sql, conn)) { using (SqlDataAdapter adapter = new SqlDataAdapter(cmd)) { DataTable dt = new DataTable(); adapter.Fill(dt); return dt; } } } } } ``` 上面的代码中,`Query` 方法接收一个 SQL 查询语句,并返回一个 `DataTable` 对象,包含了查询结果。 接下来,你可以使用 NPOI 库将查询结果写入 Excel 文件中。以下是一个简单的示例: ```csharp using System.IO; using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; public class ExcelWriter { public void WriteToExcel(DataTable dt, string tableName, string filePath) { IWorkbook workbook = null; ISheet sheet = null; // 判断文件类型 if (Path.GetExtension(filePath) == ".xls") { workbook = new HSSFWorkbook(); } else if (Path.GetExtension(filePath) == ".xlsx") { workbook = new XSSFWorkbook(); } else { throw new Exception("不支持的文件类型"); } // 创建表格 sheet = workbook.CreateSheet(tableName); // 写入表头 IRow headerRow = sheet.CreateRow(0); foreach (DataColumn column in dt.Columns) { headerRow.CreateCell(column.Ordinal).SetCellValue(column.Caption); } // 写入内容 for (int i = 0; i < dt.Rows.Count; i++) { IRow row = sheet.CreateRow(i + 1); for (int j = 0; j < dt.Columns.Count; j++) { row.CreateCell(j).SetCellValue(dt.Rows[i][j].ToString()); } } // 保存文件 using (FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write)) { workbook.Write(fs); } } } ``` 上面的代码中,`WriteToExcel` 方法接收一个 `DataTable` 对象、一个表名和一个文件路径参数,并将 `DataTable` 对象中的数据写入 Excel 文件中。 综上所述,你可以将上面两段代码结合起来,先使用 `DbHelper` 类从数据库查询数据,然后将查询结果传递给 `ExcelWriter` 类,将其写入 Excel 文件中。例如: ```csharp DbHelper dbHelper = new DbHelper(); DataTable dt = dbHelper.Query("SELECT * FROM YourTable"); ExcelWriter excelWriter = new ExcelWriter(); excelWriter.WriteToExcel(dt, "YourTable", "C:\\YourFile.xlsx"); ``` 这样,你就可以将数据库中的数据查询并写入 Excel 文件中了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值