DataTable的常用操作

39 阅读3分钟

1.DataTable 常见用法

在 .NET 中,DataTable 是一个用于存储和操作数据的对象。它通常被用来表示内存中的一个表格,类似于数据库中的表,以下是一些使用 DataTable 的常见情况:

  1. 数据存储和处理:DataTable 可以用来存储和操作数据,比如增删改查。你可以将数据从 数据库Excel 或其他数据源中检索到 DataTable 中,然后对其进行导出等处理
  2. 数据绑定:DataTable 可以与各种界面控件(如 DataGridGridView)进行数据绑定
  3. 缓存数据:如果你需要在应用程序中频繁访问相同的数据,可以使用 DataTable 将数据缓存在内存中。这样可以避免每次都从数据库或其他数据源中重新获取数据,提高应用程序的性能
  4. 数据转换:DataTable 提供了一些方法和属性,可以方便地对数据进行转换和处理。你可以使用 DataTable 进行数据筛选、排序、分组和聚合等操作

2.DataTable 的增删改查操作示例

using System;
using System.Data;

namespace TestDataTable
{
    class Program
    {
        static void Main(string[] args)
        {
            // 获取 DataTable
            var dataTable = GetDataTable();

            // 查看表中的数据
            Console.WriteLine("\t---------获取数据如下-----------");
            ShowDataTable(dataTable);

            UpdateDataRow(dataTable);
            // 查看表中的数据
            Console.WriteLine("\t---------更新后数据如下-----------");
            ShowDataTable(dataTable);            

            // 删除数据
            RemoveDataRow(dataTable);
            // 再次查看数据
            Console.WriteLine("\t---------删除后数据如下-----------");
            ShowDataTable(dataTable);            
        }
        
        /// <summary>
        /// 获取 DataTable
        /// </summary>
        /// <returns></returns>
        public static DataTable GetDataTable()
        {
            DataTable dataTable = new DataTable();
            // 给 dataTable 对象添加列
            dataTable.Columns.Add("Id", typeof(string));
            dataTable.Columns.Add("Name", typeof(string));
            dataTable.Columns.Add("Age", typeof(int));
            // 给表中添加数据
            dataTable.Rows.Add(new object[] { "1", "zjp", 18 });
            dataTable.Rows.Add(new object[] { "2", "lyh", 18 });
            dataTable.Rows.Add(new object[] { "3", "ljh", 20 });
            dataTable.Rows.Add(new object[] { "4", "tym", 23 });
            dataTable.Rows.Add(new object[] { "5", "dxz", 24 });

            return dataTable;
        }
        /// <summary>
        /// 显示 dataTable 中的数据
        /// </summary>
        /// <param name="dataTable"></param>
        public static void ShowDataTable(DataTable dataTable)
        {
            if (dataTable == null)
            {
                return;
            }
            foreach (DataColumn column in dataTable.Columns) // 列的名称
            {
                Console.Write("\t{0}", column.ColumnName);
            }
            Console.WriteLine();
            foreach (DataRow row in dataTable.Rows)
            {
                foreach (DataColumn column in dataTable.Columns)
                {
                    Console.Write("\t{0}", row[column]); // 列数据
                }
                Console.WriteLine();
            }
            Console.WriteLine();
        }
        /// <summary>
        /// 删除数据
        /// </summary>
        /// <param name="dataTable"></param>
        public static void RemoveDataRow(DataTable dataTable)
        {
            if (dataTable != null)
            {
                dataTable.Rows.RemoveAt(0); // 通过索引删除第一条数据

                DataRow[] dataRows = dataTable.Select("Id = 2"); // 通过筛选条件删除行
                foreach (var row in dataRows)
                {
                    dataTable.Rows.Remove(row);
                }
            }
        }

        /// <summary>
        /// 更新数据
        /// </summary>
        /// <param name="dataTable"></param>
        public static void UpdateDataRow(DataTable dataTable)
        {
            if (dataTable != null)
            {
                var dataRows = dataTable.Select("Id = 5");// 获取 Id 为 5 的数据行
                foreach(var row in dataRows)
                {
                    row["Age"] = "100";
                }
            }
        }
    }

}

3.其他

虽然在 .NET 中,DataTable 仍然是一个可用的数据结构,但在实际应用中,其使用率相对较低,一般是旧有的代码和遗留系统中可能仍然使用 DataTable

  1. 引入了其他更先进的数据访问技术:随着时间的推移,.NET 平台引入了更先进的数据访问技术,例如 Entity Framework、LINQ to SQL、Dapper 等。这些技术提供了更方便、更高效的数据访问方式,比直接使用 DataTable 更加现代化。
  2. 对象关系映射(ORM)的普及:ORM 框架(例如 Entity Framework)的普及使得开发人员更倾向于使用对象模型来处理数据,而不是传统的关系型数据表格。ORM 框架能够将数据库表映射为对象,提供了更加面向对象的编程体验