向DataTable添加一行,随笔

本文介绍如何使用ADO.NET连接数据库并进行数据操作。通过创建SqlConnection连接数据库,利用SqlDataAdapter填充DataSet,并通过SqlCommandBuilder辅助更新数据。文章展示了如何检查数据存在性及在不存在的情况下向表中添加新数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;

namespace FindDataRow
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建数据库连接字符串
            SqlConnection thisConnection = new SqlConnection(@"Data Source=WENGJIXI;" +
            @"Initial Catalog=NorthWind;" +
            @"Integrated Security=true;");

            //创建DataAdapter对象,表示一组 SQL 命令和一个数据库连接,它们用于填充 DataSet 和更新数据源
            SqlDataAdapter thisAdapter = new SqlDataAdapter("select CustomerID,CompanyName from Customers", thisConnection);
            //创建一个SQL命名,关联DataAdapter对象。
            SqlCommandBuilder thisBuilder = new SqlCommandBuilder(thisAdapter);
           
            //创建DataSet对象
            DataSet thisDataSet=new DataSet();
            thisAdapter.Fill(thisDataSet, "Customers");
            Console.WriteLine("#在向Customers表添加一行前,表里面行的个数:{0}", thisDataSet.Tables["Customers"].Rows.Count);

            //下面的方法也可以用thisAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;替换
            DataColumn[] keys = new DataColumn[1];//因为主键可以有多列,所以用DataColumn数组。
            keys[0] = thisDataSet.Tables["Customers"].Columns["CustomerID"];
            thisDataSet.Tables["Customers"].PrimaryKey = keys;
            @writes:
            Console.WriteLine("请输入你的公司ID");
            string writeData = Console.ReadLine();
            //使用DataRow对象的Find()方法查询XICO是否存在行中。
            DataRow findRow = thisDataSet.Tables["Customers"].Rows.Find(writeData);
            if (findRow == null)
            {
                Console.WriteLine("数据没有在Customers表中,可以向其中添加数据");
                DataRow newRow = thisDataSet.Tables["Customers"].NewRow();
                newRow["CustomerID"] = writeData;
                Console.WriteLine("请输入你的公司名字");
                string companyName = Console.ReadLine();
                newRow["CompanyName"] = companyName;
                thisDataSet.Tables["Customers"].Rows.Add(newRow);
                if ((findRow = thisDataSet.Tables["Customers"].Rows.Find(writeData)) != null)
                    Console.WriteLine("成功向表添加一行数据");

            }
            else
            {
                Console.WriteLine("数据已经在Customers表中");
                goto writes;
            }

            //更新数据库
            thisAdapter.Update(thisDataSet, "Customers");
            Console.WriteLine("#在向Customers表添加一行后,表里面行的个数:{0}", thisDataSet.Tables["Customers"].Rows.Count);

            //关闭数据库连接
            thisConnection.Close();
            Console.ReadLine();
        }
    }
}

转载于:https://www.cnblogs.com/wengxiaoxi/archive/2012/03/10/2389656.html

<think>我们正在使用WinForms中的DataTable。用户询问如何向DataTable添加一行数据。根据DataTable的使用方法,添加新行通常有两种方式:1.使用DataTable.NewRow()方法创建新行对象,然后设置各列的值,最后用DataTable.Rows.Add()方法添加。2.使用DataTable.Rows.Add()方法,直接传入各列的值(按顺序)。我们将给出两种方式的示例代码。注意:在添加行之前,确保DataTable已经定义了列结构。示例步骤:1.创建一个DataTable并定义列。2.添加数据行。参考引用[1]中提到了DataTable,但没有直接关于添加行的内容。引用[2][3]是关于DataGridView的,引用[4]是关于导入Excel的,所以我们可以忽略这些引用,直接回答问题。我们将提供两种方法的代码示例。</think>### 如何在 WinForms DataTable添加一行数据 在 WinForms 中向 DataTable 添加数据行主要有两种常用方法,以下是详细说明和示例代码: #### 方法 1:使用 `NewRow()` 和 `Rows.Add()`(推荐) 这是最标准的方式,先创建行对象再设置值: ```csharp // 创建 DataTable 并定义列结构 DataTable dataTable = new DataTable("Employees"); dataTable.Columns.Add("ID", typeof(int)); dataTable.Columns.Add("Name", typeof(string)); dataTable.Columns.Add("Salary", typeof(decimal)); // 添加新行 - 分步操作 DataRow newRow = dataTable.NewRow(); // 创建空行 newRow["ID"] = 101; // 设置列值 newRow["Name"] = "张三"; newRow["Salary"] = 8500.00; dataTable.Rows.Add(newRow); // 添加到表 // 添加新行 - 单行写法 dataTable.Rows.Add(new object[] { 102, "李四", 9200.00 }); ``` #### 方法 2:使用 `LoadDataRow()`(批量操作) 适合批量添加数据: ```csharp // 添加单行 dataTable.LoadDataRow(new object[] { 103, "王五", 7800.00 }, true); // 批量添加示例 object[][] multiRows = { new object[] { 104, "赵六", 6500.00 }, new object[] { 105, "钱七", 8800.00 } }; foreach (var rowData in multiRows) { dataTable.LoadDataRow(rowData, true); } ``` #### 关键说明: 1. **列顺序匹配**:直接使用 `Rows.Add()` 时,传入值的顺序必须与列定义顺序一致 2. **数据类型验证**:值必须与列定义的数据类型匹配(如 `Salary` 列需传入数值) 3. **数据绑定**:添加后会自动更新绑定控件(如 DataGridView)[^1] ```csharp // 绑定到 DataGridView dataGridView1.DataSource = dataTable; ``` #### 完整工作流程示例: ```csharp // 创建 DataTable DataTable employeeTable = new DataTable(); employeeTable.Columns.Add("EmpID", typeof(int)); employeeTable.Columns.Add("FullName", typeof(string)); employeeTable.Columns.Add("HireDate", typeof(DateTime)); // 添加行数据 employeeTable.Rows.Add(1, "刘明", new DateTime(2020, 3, 15)); employeeTable.Rows.Add(2, "陈华", new DateTime(2021, 7, 22)); // 从界面控件添加(如文本框) employeeTable.Rows.Add( int.Parse(txtID.Text), txtName.Text, dtpDate.Value ); // 显示数据 dataGridView1.DataSource = employeeTable; ``` > **注意事项**: > - 使用前确保 DataTable 已正确定义列结构 > - 批量操作时考虑使用 `BeginLoadData()`/`EndLoadData()` 提升性能 > - 可通过 `DataTable.AcceptChanges()` 提交更改[^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值