C

C# 中的 DataTable – 用法和示例

2025-06-08

C# 中的 DataTable – 用法和示例

DataTable 是 C# 数据处理的重要组成部分,但对于初学者和不常使用的人来说,它可能相当棘手。那么,准备好揭开 C# DataTable 的神秘面纱了吗?让我们一起渡过难关,成为 DataTable 的冠军!

简介:什么是DataTable

在 C# 中,DataTable 就像一个驻留在计算机内存中的微型数据库,代表着一张内存数据表。想象一下在如此小的空间里拥有一个完整的数据库,是不是很令人兴奋?

了解 C# DataTable 及其核心功能

DataTable 是 ADO.NET 的一部分,ADO.NET 是 Microsoft 在 .NET 框架中使用的数据访问模型。它表示包含列和行集合的单个数据表。DataTable 可以是独立的,也可以是 DataSet 的一部分,DataSet 可以容纳多个 DataTable 对象。

// Create a new DataTable
DataTable dt = new DataTable();
Enter fullscreen mode Exit fullscreen mode

看,我们刚刚创建了一个新的 DataTable!

深入研究数据表的创建

让我们更深入地了解一下 DataTable 的创建过程。它就像烘焙,只不过我们用的是列和行,而不是面粉和鸡蛋。

如何创建数据表

创建 DataTable 涉及声明 DataTable 类的新实例。

DataTable table = new DataTable("Customers");
Enter fullscreen mode Exit fullscreen mode

我们创建了一个名为“客户”的新表。谁说编程不能有趣!

向数据表添加列

拥有表格固然很好,但是没有列的表格又算什么呢?

table.Columns.Add("CustomerID", typeof(int));
table.Columns.Add("CustomerName", typeof(string));
Enter fullscreen mode Exit fullscreen mode

就像一位自豪的厨师一样,我们刚刚在“客户”表中添加了两列!

填充数据表

创建表并添加列只是一个开始。现在,我们将添加表的命脉——数据!

将 DataRow 添加到 DataTable

DataRow 表示 DataTable 中的一行。添加方法如下:

DataRow row = table.NewRow();
row["CustomerID"] = 1;
row["CustomerName"] = "John Doe";
table.Rows.Add(row);
Enter fullscreen mode Exit fullscreen mode

通过这几行代码,我们的客户表就有了第一行数据!

数据表和行添加:从头开始构建 C# 数据表

从零开始构建 DataTable 会给我们一个空白的画布。创建表,定义列,然后添加行。这就像生出一张新表,不是吗?

DataTable table = new DataTable("Orders");
table.Columns.Add("OrderID", typeof(int));
table.Columns.Add("OrderAmount", typeof(decimal));

DataRow row = table.NewRow();
row["OrderID"] = 101;
row["OrderAmount"] = 150.75m;
table.Rows.Add(row);
Enter fullscreen mode Exit fullscreen mode

我们灵巧地创建了一个包含一行数据的新订单表!C# 是不是很棒?

学习在 C# 中操作 DataTable:从简单到复杂的操作

现在我们的 DataTable 已经充满了数据,让我们来学习如何使用它。技艺高超的魔术师从不泄露他的秘密,但在这里,我们打破常规!

从数据表获取列值

从 DataRow 访问列值与从数组或字典访问值类似。请看这个巧妙的技巧:

DataRow row = table.Rows[0];
int orderId = row.Field<int>("OrderID");
decimal amount = row.Field<decimal>("OrderAmount");
Enter fullscreen mode Exit fullscreen mode

你知道破解密码的感觉吗?就是这个!

迭代 DataTable

围绕 DataTable 运行一圈,或者用编程术语来说,对 DataTable 进行迭代,就像一项有趣的运动!

foreach (DataRow row in table.Rows){
  int orderId = row.Field<int>("OrderID");
  decimal amount = row.Field<decimal>("OrderAmount");
}
Enter fullscreen mode Exit fullscreen mode

还有什么比庆祝胜利更棒的呢?绕着你的 DataTable 跑一圈!

比较 DataTable 的列值

通常,你需要比较 DataTable 中的列值。这就像一个小小的侦探游戏,变量就是我们的线索。

在 C# 中比较两个 DataTable 列值:实用指南

让我们了解如何比较两个不同数据表中的列值。

bool areEquals = dataTable1.AsEnumerable()
                    .SequenceEqual(dataTable2.AsEnumerable(), DataRowComparer.Default);
Enter fullscreen mode Exit fullscreen mode

啊,找到拼图中缺失的那一块是多么令人高兴啊!

选择和排序操作

选择或排序数据的能力就像一个强大的魔法咒语,每个 C# 程序员都必须学习!

C# 从数据表中选择

选择操作类似于 SQL SELECT 查询。

DataRow[] selectedRows = table.Select("OrderAmount > 100");
Enter fullscreen mode Exit fullscreen mode

哇哦!我们找到了订单金额大于 100 的行。

排序数据表

处理大量数据时,排序非常重要。就像把你的东西按顺序排列一样。

table.DefaultView.Sort = "OrderAmount DESC";
table = table.DefaultView.ToTable();
Enter fullscreen mode Exit fullscreen mode

就像魔术一样,我们所有的数据都按订单金额的降序排列!

过滤和列表转换

闲聊够了,让我们深入讨论正事——过滤数据并将 DataTable 转换为列表!

过滤数据表

处理海量数据集时,过滤至关重要。这就像用一张好网捕鱼一样。

DataRow[] result = table.Select("OrderAmount > 100 AND OrderAmount < 200");
Enter fullscreen mode Exit fullscreen mode

我们刚刚捕获了订单金额在 100 到 200 之间的所有行!

列表数据表

列出 DataTable 使我们能够有效地处理和操作数据。

List<DataRow> list = table.AsEnumerable().ToList();
Enter fullscreen mode Exit fullscreen mode

这就像将您的记录整齐地堆放在不同的抽屉里一样。

将数据表转换为列表

将 DataTable 转换为 List 为我们提供了更多操作数据的方法和功能。

var list = table.AsEnumerable().Select(row => new Customer {
  CustomerId = row.Field<int>("CustomerID"),
  CustomerName = row.Field<string>("CustomerName")
}).ToList();
Enter fullscreen mode Exit fullscreen mode

我们的数据表现在是客户列表。

从 C# 列表创建数据表

从列表创建数据表就像逆向工程!

DataTable newDt = new DataTable();
newDt.Columns.AddRange(new DataColumn[2] {
                   new DataColumn("CustomerId", typeof(int)),
                   new DataColumn("Name", typeof(string))});

foreach (var item in list)
{
    var row = newDt.NewRow();
    row["CustomerId"] = item.CustomerId;
    row["Name"] = item.Name;
    newDt.Rows.Add(row);
}
Enter fullscreen mode Exit fullscreen mode

惊喜!我们把客户列表重新转换成了 DataTable!

将 DataTable 导出为不同格式

让我们了解如何将 DataTable 导出为各种格式。想象一下你是一位魔术师,而你的 DataTable 就是你的魔术帽!

数据表到 CSV 的转换

将 DataTable 转换为 CSV 文件就像将您的想法翻译成另一种语言。

StringBuilder sb = new StringBuilder();
string[] columnNames = dt.Columns.Cast<DataColumn>().Select(column => column.ColumnName).ToArray();
sb.AppendLine(string.Join(",", columnNames));

foreach (DataRow row in dt.Rows)
{
    string[] fields = row.ItemArray.Select(field => field.ToString()).ToArray();
    sb.AppendLine(string.Join(",", fields));
}

File.WriteAllText("path_to_your_csv_file.csv", sb.ToString());
Enter fullscreen mode Exit fullscreen mode

您的数据现在可以用 CSV 格式表示!

如何将 C# 数据表导出到 Excel

使用 EPPlus 或 NPOI 等库可以轻松地将 DataTable 导出到 Excel。

using (var excelFile = new ExcelPackage())
{
  var worksheet = excelFile.Workbook.Worksheets.Add("Sheet1");
  worksheet.Cells["A1"].LoadFromDataTable(table, true);
  excelFile.SaveAs(new FileInfo("path_to_excel_file.xlsx"));
}
Enter fullscreen mode Exit fullscreen mode

太神奇了,我们的 DataTable 现在在 Excel 中了!

C# 数据表转 PDF

DataTable 到 PDF 的转换需要第三方库,如 iTextSharp 或 SelectPdf。

Document document = new Document();
PdfWriter writer = PdfWriter.GetInstance(document, new FileStream("data.pdf", FileMode.Create));
document.Open();
PdfPTable pdfTable = new PdfPTable(dt.Columns.Count);
for (int i = 0; i < dt.Columns.Count; i++) {
  pdfTable.AddCell(new Phrase(dt.Columns[i].ColumnName));
}
for (int i = 0; i < dt.Rows.Count; i++) {
  for (int j = 0; j < dt.Columns.Count; j++) {
    pdfTable.AddCell(new Phrase(dt.Rows[i][j].ToString()));
  }
}
document.Add(pdfTable);
document.Close();
Enter fullscreen mode Exit fullscreen mode

阿布拉卡达布拉!我们的 DataTable 现在是 PDF 格式了!

DataReader 到 DataTable 的转换

当我们需要使用 DataTables 操作对象数据时,将数据读取器转换为 DataTable 非常方便。

C#:以最少的努力从 DataReader 到 DataTable

DataReader 提供了一个只进游标,用于从 SQL Server 数据库读取行,DataTable 使数据操作更容易。

SqlDataReader reader = command.ExecuteReader();
DataTable dt = new DataTable();
dt.Load(reader);
Enter fullscreen mode Exit fullscreen mode

轰!我们刚刚把 DataReader 变成了 DataTable!

使用 AsEnumerable 和 Select 与 DataTable

DataTable 的 AsEnumerable 扩展方法提供了一种使用 LINQ 查询数据的强大方法,类似于查询实体集合。

数据表可枚举选择

让我们了解一下 AsEnumerable 和 Select 是如何结合在一起的。

var result = from row in table.AsEnumerable()
  where row.Field<int>("CustomerID") == 1
  select row;
Enter fullscreen mode Exit fullscreen mode

别再胡闹了,对吧?我们刚刚选中了 CustomerID 等于 1 的所有行!

简而言之,DataTable 允许您以表格形式组织和操作数据,包括创建 DataTable、添加行、获取列值、排序、选择,甚至导出为 CSV、Excel 或 PDF 等各种格式。希望这篇 C# DataTable 详尽指南能够提升您的 C# 技能。别忘了,熟能生巧。祝您编程愉快!

鏂囩珷鏉ユ簮锛�https://dev.to/bytehide/datatable-in-c-usage-and-examples-40f2
PREV
C# 分页:完整指南及简单代码示例 📚
NEXT
C# 11 即将到来!5 个让你惊叹的功能