C#利用OLEDB实现将DataTable写入Excel文件中

下面我将详细讲解“C#利用OLEDB实现将DataTable写入Excel文件中”的完整攻略。

1. OLEDB介绍

OLE DB 是一种标准的连接方式,支持多种数据库和文件格式,可以用于访问关系数据库、普通数据文件、Excel 和文本文件等。OLE DB 的本质是一种支持 COM 的面向 ROWSET 的标准,应用可以通过 OLE DB 访问所有遵守本标准的提供程序。OLE DB 提供了一个很好的统一接口,使得应用可以无需了解不同的数据库或文件格式就能访问并操作它们。

2. 利用OLEDB实现将DataTable写入Excel文件中的步骤

  1. 引入命名空间

using System.Data;
using System.Data.OleDb;

  1. 定义连接字符串

连接字符串格式如下:

Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 12.0;HDR=YES;IMEX=1';

其中,Data Source 表示 Excel 文件路径,HDR=YES 表示第一行是标题行,IMEX=1 表示值为文本类型(不自动转换数据类型)。

举个例子:

string path = @"D:\test.xlsx";
string connstr = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 12.0;HDR=YES;IMEX=1';", path);

  1. 创建连接对象并打开连接

OleDbConnection conn = new OleDbConnection(connstr);
conn.Open();

  1. 创建命令对象

OleDbCommand cmd = new OleDbCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;

  1. 创建插入语句

string insertSql = "INSERT INTO [Sheet1$]({0}) VALUES({1})";

  1. 循环遍历 DataTable,将数据插入到 Excel 文件中

foreach(DataRow row in dt.Rows)
{
string field = "";
string values = "";
foreach(DataColumn col in dt.Columns)
{
field += "["+col.ColumnName+"]" + ",";
values += "'" + row[col.ColumnName].ToString().Replace("'","''") + "',";
}
field = field.TrimEnd(',');
values = values.TrimEnd(',');
string sql = string.Format(insertSql, field, values);
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
}

  1. 关闭连接

conn.Close();

3. 示例说明

下面给出两条示例说明:

示例 1:导出一个 DataTable 到 Excel 文件

假设有一个名为 dt 的 DataTable,包含了三列数据:Name、Age 和 Gender,数据如下:

Name Age Gender
Tom 20 Male
Jack 25 Male
Lily 18 Female

现在要将这个 DataTable 导出到名为 test.xlsx 的 Excel 文件中,代码如下:

DataTable dt = new DataTable();
// 假设 dt 有三列 Name、Age、Gender,数据如上所示

string path = @"D:\test.xlsx";
string connstr = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 12.0;HDR=YES;IMEX=1';", path);

OleDbConnection conn = new OleDbConnection(connstr);
conn.Open();

OleDbCommand cmd = new OleDbCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;

string insertSql = "INSERT INTO [Sheet1$]({0}) VALUES({1})";

foreach(DataRow row in dt.Rows)
{
    string field = "";
    string values = "";
    foreach(DataColumn col in dt.Columns)
    {
        field += "["+col.ColumnName+"]" + ",";
        values += "'" + row[col.ColumnName].ToString().Replace("'","''") + "',";
    }
    field = field.TrimEnd(',');
    values = values.TrimEnd(',');
    string sql = string.Format(insertSql, field, values);
    cmd.CommandText = sql;
    cmd.ExecuteNonQuery();
}

conn.Close();

示例 2:导出一个 SqlDataReader 到 Excel 文件

假设有一个名为 dr 的 SqlDataReader,包含了三列数据:Name、Age 和 Gender,数据如下:

Name Age Gender
Tom 20 Male
Jack 25 Male
Lily 18 Female

现在要将这个 SqlDataReader 导出到名为 test.xlsx 的 Excel 文件中,代码如下:

string path = @"D:\test.xlsx";
string connstr = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 12.0;HDR=YES;IMEX=1';", path);

OleDbConnection conn = new OleDbConnection(connstr);
conn.Open();

OleDbCommand cmd = new OleDbCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;

string insertSql = "INSERT INTO [Sheet1$]({0}) VALUES({1})";

while(dr.Read())
{
    string field = "";
    string values = "";
    for(int i=0; i<dr.FieldCount; i++)
    {
        field += "["+dr.GetName(i)+"]" + ",";
        values += "'" + dr.GetValue(i).ToString().Replace("'","''") + "',";
    }
    field = field.TrimEnd(',');
    values = values.TrimEnd(',');
    string sql = string.Format(insertSql, field, values);
    cmd.CommandText = sql;
    cmd.ExecuteNonQuery();
}

conn.Close();

以上就是利用 OLEDB 实现将 DataTable 写入 Excel 文件的完整攻略了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#利用OLEDB实现将DataTable写入Excel文件中 - Python技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • c# 钩子学习笔记

    C#钩子学习笔记 什么是钩子 Windows操作系统为我们提供了许多钩子(Hooks),如键盘钩子、鼠标钩子、Windows消息钩子、时间戳钩子等。钩子可以让我们在系统层面对各种事件消息进行拦截、监控、修改或者定制化输出等操作。 钩子的分类 Windows中的钩子有很多种,我们可以将它们大体分为两类: 系统钩子 (system-wide hook):作用于整…

    C# 2023年5月15日
    00
  • C# 删除数组内的某个值、一组值方法详解

    下面是关于“C# 删除数组内的某个值、一组值方法详解”的完整攻略。 1.题目理解 首先,让我们理解题目的含义。该题目要求我们使用C#编写一个可以删除一个数组内的某个值或一组值的方法。 2.方法介绍 我们可以使用以下两种方法来删除数组内的某个值或一组值。 2.1.使用LINQ方法 使用LINQ方法进行数组的删除,主要是使用Where()和ToArray()函数…

    C# 2023年6月1日
    00
  • c# 图片加密解密的实例代码

    c# 图片加密解密是一种通过对图片进行加密操作来保障图片内容安全的方法。下面我们将提供一份完整的攻略,介绍如何使用c#实现图片加密解密。 准备工作 在开始之前,我们需要先下载并安装c#运行环境,常用的c#开发环境有Visual Studio和Visual Studio Code。本攻略将使用Visual Studio 2019作为开发环境。 实现过程 图片加…

    C# 2023年6月8日
    00
  • C# StringBuilder.Append()方法: 将一个字符串追加到 StringBuilder 对象的末尾

    StringBuilder是C#中用来动态生成字符串的类,可以有效地避免字符串拼接等操作因为频繁创建新的字符串对象而造成的性能问题。StringBuilder类有多种方法可以用来操作字符串,其中Append()是最常用的方法之一。 Append()方法的作用 StringBuilder.Append()方法用于在已有字符串的末尾追加新的内容。具体来说,就是将…

    C# 2023年4月19日
    00
  • C#版免费离线人脸识别之虹软ArcSoft V3.0(推荐)

    C#版免费离线人脸识别之虹软ArcSoft V3.0(推荐)是一款完全开源免费的人脸识别程序,使用者可以在本地环境下运行,不需要联网即可进行人脸识别。下面是详细的使用攻略。 1. 安装ArcSoft SDK 首先,在官网下载并安装ArcSoft SDK,根据自己的操作系统版本选择相应的SDK安装包,可以在ArcSoft官网的开发者中心下载: http://w…

    C# 2023年5月15日
    00
  • Asp.Net MVC中配置Serilog的方法

    Serilog是一个.NET平台上的日志库,可以方便地记录应用程序的日志信息。在Asp.Net MVC中,我们可以使用Serilog来记录应用程序的日志信息。以下是在Asp.Net MVC中配置Serilog的方法的完整攻略。 环境准备 在使用Serilog前,需要安装Serilog和Serilog.Sinks.File包。可以使用以下命令来安装Serilo…

    C# 2023年5月15日
    00
  • c#字符串使用正则表达式示例

    下面是c#字符串使用正则表达式的完整攻略: 1. 使用正则表达式匹配字符串 使用c#中的正则表达式需要使用System.Text.RegularExpressions命名空间。下面是一个示例代码,其使用正则表达式匹配字符串,并将匹配到的结果输出到控制台: using System; using System.Text.RegularExpressions; …

    C# 2023年6月8日
    00
  • C# PictureBox控件方法参数及图片删除重命名上传详解

    C# PictureBox控件方法参数及图片删除重命名上传详解 控件介绍 PictureBox控件是 C#中非常常用的图片显示控件,可以显示多种图片格式的静态图像和动态图像。 常用方法及参数 PictureBox.ImageLocation 属性 该属性可以指定 PictureBox 控件要显示的图像文件的路径,路径可以是绝对路径,也可以是相对于应用程序包含…

    C# 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部