在C#窗体加 了一个导出数据的按钮,怎么把sql数据库的数据根据月份导出到excel中。求大神帮忙啊 !!!!
1个回答
2013-03-16
展开全部
下面是一个 C# 通过 OLEDB 把数据写入到 Excel 的例子代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace A0151_Excel.Sample
{
public class Common
{
#region OLEDB 驱动的选择处理.
/// <summary>
/// 取得 OLEDB 的连接字符串.
/// 优先启动 ACE 驱动,
/// 假如 ACE 失败,再尝试启动 JET
///
/// 该方法可能用不上。
/// 因为 在 Office 2010 上面,Jet 与 ACE 都能正常运作
///
/// 唯一需要注意的是, 如果目标机器的操作系统,是64位的话。
/// 项目需要 编译为 x86, 而不是简单的使用默认的 Any CPU.
/// </summary>
/// <param name="excelFileName"></param>
/// <returns></returns>
public static string GetOleDbConnectionString(string excelFileName, bool hasTitle)
{
string optionString = null;
// HDR表示要把第一行作为数据还是作为列名,作为数据用 HDR=no,作为列名用HDR=yes;
if (hasTitle)
{
optionString = "HDR=yes;";
}
else
{
optionString = "HDR=no;";
}
// Office 2007 以及 以下版本使用.
string jetConnString =
String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;" + optionString + "\"", excelFileName);
// xlsx 扩展名 使用.
string aceConnXlsxString =
String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0 Xml;" + optionString + "\"", excelFileName);
// xls 扩展名 使用.
string aceConnXlsString =
String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 8.0;" + optionString + "\"", excelFileName);
// 默认非 xlsx
string aceConnString = aceConnXlsString;
if (excelFileName.EndsWith(".xlsx", StringComparison.CurrentCultureIgnoreCase))
{
// 如果扩展名为 xlsx.
// 那么需要将 驱动切换为 xlsx 扩展名 的.
aceConnString = aceConnXlsxString;
}
// 尝试使用 ACE. 假如不发生错误的话,使用 ACE 驱动.
try
{
System.Data.OleDb.OleDbConnection cn = new System.Data.OleDb.OleDbConnection(aceConnString);
cn.Open();
cn.Close();
// 使用 ACE
return aceConnString;
}
catch (Exception e)
{
// 启动 ACE 失败.
//Console.WriteLine(e.Message);
}
// 尝试使用 Jet. 假如不发生错误的话,使用 Jet 驱动.
try
{
System.Data.OleDb.OleDbConnection cn = new System.Data.OleDb.OleDbConnection(jetConnString);
cn.Open();
cn.Close();
// 使用 Jet
return jetConnString;
}
catch (Exception e)
{
// 启动 Jet 失败.
//Console.WriteLine(e.Message);
}
// 假如 ACE 与 JET 都失败了,默认使用 JET.
return jetConnString;
}
/// <summary>
/// 默认 认为 Excel 数据文件是包含 列名的.
/// </summary>
/// <param name="excelFileName"></param>
/// <returns></returns>
public static string GetOleDbConnectionString(string excelFileName)
{
return GetOleDbConnectionString(excelFileName, true);
}
#endregion
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Data;
using System.Data.OleDb;
namespace A0151_Excel.Sample
{
/// <summary>
/// 创建 并 写入 Excel
/// </summary>
public class CreateWriteExcel
{
/// <summary>
/// 建表语句.
/// </summary>
private const string CREATE_TABLE_SQL =
@"CREATE TABLE [测试表格1] (
[编号] INT,
[名称] VARCHAR,
[成绩] INT
)
";
/// <summary>
/// 插入语句.
/// </summary>
private const string INSERT_SQL =
@"INSERT INTO [测试表格1] (
[编号] , [名称] , [成绩]
) VALUES (
?, ?, ?
)
";
/// <summary>
/// 更新语句.
/// </summary>
private const string UPDATE_SQL =
@"UPDATE [测试表格1]
SET
[名称] = ?,
[成绩] = ?
WHERE
[编号] = ?
";
/// <summary>
/// 删除语句.
/// </summary>
private const string DELETE_SQL =
@"DELETE FROM [测试表格1]
WHERE
[编号] = ?
";
/// <summary>
/// 测试写入 Excel 文件.
/// </summary>
/// <param name="fileName"> 文件名 </param>
public void TestWriteExcel(string fileName)
{
// 如果文件已存在,那么删除.
if (File.Exists(fileName))
{
File.Delete(fileName);
}
// 取得连接字符串.
string connString = Common.GetOleDbConnectionString(fileName);
// 定义 Oledb 的数据库联接.
OleDbConnection cn = new OleDbConnection(connString);
try
{
// 打开连接.
cn.Open();
// 创建 Excel Sheet的 命令.
OleDbCommand cmdCreate = new OleDbCommand(CREATE_TABLE_SQL, cn);
// 创建Sheet.
cmdCreate.ExecuteNonQuery();
// 插入数据的 命令.
OleDbCommand cmdInsert = new OleDbCommand(INSERT_SQL, cn);
for (int i = 0; i < 10; i++)
{
// 清空参数.
cmdInsert.Parameters.Clear();
// 参数只能按照 SQL语句 中 ? 的顺序,进行添加.
cmdInsert.Parameters.Add(new OleDbParameter("?", i));
cmdInsert.Parameters.Add(new OleDbParameter("?", "名称" + i));
cmdInsert.Parameters.Add(new OleDbParameter("?", i*10 ));
// 插入数据.
cmdInsert.ExecuteNonQuery();
}
// 尝试修改一行.
OleDbCommand cmdUpdate = new OleDbCommand(UPDATE_SQL, cn);
// 参数只能按照 SQL语句 中 ? 的顺序,进行添加.
cmdUpdate.Parameters.Add(new OleDbParameter("?", "名称X1X"));
cmdUpdate.Parameters.Add(new OleDbParameter("?", 100));
cmdUpdate.Parameters.Add(new OleDbParameter("?", 1));
// 修改数据.
cmdUpdate.ExecuteNonQuery();
// 注: 删除一行的操作,将抛出异常.
// 尝试删除一行.
OleDbCommand cmdDelete = new OleDbCommand(DELETE_SQL, cn);
// 参数只能按照 SQL语句 中 ? 的顺序,进行添加.
cmdDelete.Parameters.Add(new OleDbParameter("?", 2));
// 修改数据.
cmdDelete.ExecuteNonQuery();
}
catch (Exception ex)
{
Console.WriteLine("数据库读写操作发生了错误!");
Console.WriteLine(ex.Message);
Console.WriteLine(ex.StackTrace);
}
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace A0151_Excel.Sample
{
public class Common
{
#region OLEDB 驱动的选择处理.
/// <summary>
/// 取得 OLEDB 的连接字符串.
/// 优先启动 ACE 驱动,
/// 假如 ACE 失败,再尝试启动 JET
///
/// 该方法可能用不上。
/// 因为 在 Office 2010 上面,Jet 与 ACE 都能正常运作
///
/// 唯一需要注意的是, 如果目标机器的操作系统,是64位的话。
/// 项目需要 编译为 x86, 而不是简单的使用默认的 Any CPU.
/// </summary>
/// <param name="excelFileName"></param>
/// <returns></returns>
public static string GetOleDbConnectionString(string excelFileName, bool hasTitle)
{
string optionString = null;
// HDR表示要把第一行作为数据还是作为列名,作为数据用 HDR=no,作为列名用HDR=yes;
if (hasTitle)
{
optionString = "HDR=yes;";
}
else
{
optionString = "HDR=no;";
}
// Office 2007 以及 以下版本使用.
string jetConnString =
String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;" + optionString + "\"", excelFileName);
// xlsx 扩展名 使用.
string aceConnXlsxString =
String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0 Xml;" + optionString + "\"", excelFileName);
// xls 扩展名 使用.
string aceConnXlsString =
String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 8.0;" + optionString + "\"", excelFileName);
// 默认非 xlsx
string aceConnString = aceConnXlsString;
if (excelFileName.EndsWith(".xlsx", StringComparison.CurrentCultureIgnoreCase))
{
// 如果扩展名为 xlsx.
// 那么需要将 驱动切换为 xlsx 扩展名 的.
aceConnString = aceConnXlsxString;
}
// 尝试使用 ACE. 假如不发生错误的话,使用 ACE 驱动.
try
{
System.Data.OleDb.OleDbConnection cn = new System.Data.OleDb.OleDbConnection(aceConnString);
cn.Open();
cn.Close();
// 使用 ACE
return aceConnString;
}
catch (Exception e)
{
// 启动 ACE 失败.
//Console.WriteLine(e.Message);
}
// 尝试使用 Jet. 假如不发生错误的话,使用 Jet 驱动.
try
{
System.Data.OleDb.OleDbConnection cn = new System.Data.OleDb.OleDbConnection(jetConnString);
cn.Open();
cn.Close();
// 使用 Jet
return jetConnString;
}
catch (Exception e)
{
// 启动 Jet 失败.
//Console.WriteLine(e.Message);
}
// 假如 ACE 与 JET 都失败了,默认使用 JET.
return jetConnString;
}
/// <summary>
/// 默认 认为 Excel 数据文件是包含 列名的.
/// </summary>
/// <param name="excelFileName"></param>
/// <returns></returns>
public static string GetOleDbConnectionString(string excelFileName)
{
return GetOleDbConnectionString(excelFileName, true);
}
#endregion
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Data;
using System.Data.OleDb;
namespace A0151_Excel.Sample
{
/// <summary>
/// 创建 并 写入 Excel
/// </summary>
public class CreateWriteExcel
{
/// <summary>
/// 建表语句.
/// </summary>
private const string CREATE_TABLE_SQL =
@"CREATE TABLE [测试表格1] (
[编号] INT,
[名称] VARCHAR,
[成绩] INT
)
";
/// <summary>
/// 插入语句.
/// </summary>
private const string INSERT_SQL =
@"INSERT INTO [测试表格1] (
[编号] , [名称] , [成绩]
) VALUES (
?, ?, ?
)
";
/// <summary>
/// 更新语句.
/// </summary>
private const string UPDATE_SQL =
@"UPDATE [测试表格1]
SET
[名称] = ?,
[成绩] = ?
WHERE
[编号] = ?
";
/// <summary>
/// 删除语句.
/// </summary>
private const string DELETE_SQL =
@"DELETE FROM [测试表格1]
WHERE
[编号] = ?
";
/// <summary>
/// 测试写入 Excel 文件.
/// </summary>
/// <param name="fileName"> 文件名 </param>
public void TestWriteExcel(string fileName)
{
// 如果文件已存在,那么删除.
if (File.Exists(fileName))
{
File.Delete(fileName);
}
// 取得连接字符串.
string connString = Common.GetOleDbConnectionString(fileName);
// 定义 Oledb 的数据库联接.
OleDbConnection cn = new OleDbConnection(connString);
try
{
// 打开连接.
cn.Open();
// 创建 Excel Sheet的 命令.
OleDbCommand cmdCreate = new OleDbCommand(CREATE_TABLE_SQL, cn);
// 创建Sheet.
cmdCreate.ExecuteNonQuery();
// 插入数据的 命令.
OleDbCommand cmdInsert = new OleDbCommand(INSERT_SQL, cn);
for (int i = 0; i < 10; i++)
{
// 清空参数.
cmdInsert.Parameters.Clear();
// 参数只能按照 SQL语句 中 ? 的顺序,进行添加.
cmdInsert.Parameters.Add(new OleDbParameter("?", i));
cmdInsert.Parameters.Add(new OleDbParameter("?", "名称" + i));
cmdInsert.Parameters.Add(new OleDbParameter("?", i*10 ));
// 插入数据.
cmdInsert.ExecuteNonQuery();
}
// 尝试修改一行.
OleDbCommand cmdUpdate = new OleDbCommand(UPDATE_SQL, cn);
// 参数只能按照 SQL语句 中 ? 的顺序,进行添加.
cmdUpdate.Parameters.Add(new OleDbParameter("?", "名称X1X"));
cmdUpdate.Parameters.Add(new OleDbParameter("?", 100));
cmdUpdate.Parameters.Add(new OleDbParameter("?", 1));
// 修改数据.
cmdUpdate.ExecuteNonQuery();
// 注: 删除一行的操作,将抛出异常.
// 尝试删除一行.
OleDbCommand cmdDelete = new OleDbCommand(DELETE_SQL, cn);
// 参数只能按照 SQL语句 中 ? 的顺序,进行添加.
cmdDelete.Parameters.Add(new OleDbParameter("?", 2));
// 修改数据.
cmdDelete.ExecuteNonQuery();
}
catch (Exception ex)
{
Console.WriteLine("数据库读写操作发生了错误!");
Console.WriteLine(ex.Message);
Console.WriteLine(ex.StackTrace);
}
}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询