C#中DataAdapter对象

2023-10-18 07:45
文章标签 c# 对象 .net dataadapter

本文主要是介绍C#中DataAdapter对象,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、DataAdapter对象概述

二、Fill()方法填充数据集DataSet

1.举例

2.源码

3.生成效果 

三、Update()方法

1.Update()方法更新数据源

2.设置数据库主键

3.源码

4.生成效果 


一、DataAdapter对象概述

        DataAdapter对象是一个数据适配器对象,是DataSet与数据源之间的桥梁。DataAdapter对象提供了4个属性,用于实现与数据源之间的互通。

☑ SelectCommand属性:向数据库发送查询SQL语句。
☑ DeleteCommand属性:向数据库发送删除SQL语句。
☑ InsertCommand属性:向数据库发送插入SQL语句。
☑ UpdateCommand属性:向数据库发送更新SQL语句。

         在对数据库进行操作时,只要将这4个属性设置成相应的SQL语句即可。

         DataAdapter对象中还有2个主要的方法:Fill()方法和Update()方法。

二、Fill()方法填充数据集DataSet

        Fill()方法用数据填充DataSet。 语法如下:

public int Fill (DataSet dataSet,string srcTable)
☑ dataSet:要用记录和架构(如果必要)填充的DataSet。
☑ srcTable:用于表映射的源表的名称。
☑ 返回值:已在DataSet中成功添加或刷新的行数,这不包括受不返回行的语句影响的行。 

        通过DataAdapter对象的Fill()方法填充DataSet数据集,Fill()方法使用Select语句从数据源中检索数据。与Select命令关联的Connection对象必须有效,但不需要将其打开。

1.举例

        创建一个SqlDataAdapter对象,使用该对象的Fill()方法填充DataSet数据集,最后设置DataGridView控件的数据源,显示查询的数据。使用DataAdapter对象的Fill()方法从数据源中提取数据并填充到DataSet时,就会用到SelectCommand属性中设置的命令对象。

2.源码

//Form1.cs
//DataAdapter对象的Fill()方法填充DataSet数据集
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace _7
{public partial class Form1 : Form{public Form1(){InitializeComponent();}/// <summary>/// 初始化Form1/// </summary>private void Form1_Load(object sender, EventArgs e){button1.Text = "加载数据";button1.Size = new System.Drawing.Size(75, 23);}/// <summary>/// 实例化SqlConnection变量conn/// 创建一个SqlCommand对象并通过select方法查询数据库tb_command/// 创建一个SqlDataAdapter对象/// 设置SqlDataAdapter对象的SelectCommand属性为cmd,与数据库SQL建立关联/// 创建一个DataSet对象/// 使用SqlDataAdapter对象的Fill()方法填充DataSet数据集/// 设置dataGridView1控件的数据源/// </summary>private void Button1_Click(object sender, EventArgs e){SqlConnection conn = new SqlConnection("Server=DESKTOP-QFENBNJ\\SQL_WEN;integrated security=SSPI;Initial Catalog=db_CSharp");//SqlConnection conn = new SqlConnection("Server=DESKTOP-GFMO83R;integrated security=SSPI;Initial Catalog=db_CSharp");SqlCommand cmd = new SqlCommand("select * from tb_command", conn);SqlDataAdapter sda = new SqlDataAdapter{SelectCommand = cmd};DataSet ds = new DataSet();sda.Fill(ds, "wen");                     //""中的字符任意,不得为空dataGridView1.DataSource = ds.Tables[0]; //[]中的序号代表数据表tb_command中表的索引号,表0、表1等}}
}

3.生成效果 

Form1.cs[设计]

生成效果

SQL数据表tb_command

三、Update()方法

1.Update()方法更新数据源

        使用DataAdapter对象的Update()方法,可以将DataSet中修改过的数据及时地更新到数据库中。

        Update()方法更新数据库时,DataAdapter将调用DeleteCommand、InsertCommand以及UpdateCommand属性。

语法如下:
☑ dataTable:用于更新数据源的DataTable。
☑ 返回值:DataSet中成功更新的行数。

        在调用Update()方法之前,要实例化一个CommandBuilder类,这里为SqlCommandBuilder类,该类可以自动生成单表命令,用于将对DataSet所做的更改与关联的SQL Server数据库的更改相协调,具体使用时,它能自动根据DataAdapter的SelectCommand的SQL语句判断其他的InsertCommand、UpdateCommand和DeleteCommand,这样,就不用设置DataAdapter的InsertCommand、UpdateCommand和DeleteCommand属性,而是直接使用DataAdapter的Update()方法来更新DataSet、DataTable或DataRow即可。

2.设置数据库主键

        使用Update()方法更新数据时,要求更新的数据表必须要主键,否则将会产生异常信息,无法执行更新操作。设置主键指的是设置数据库的主键。可以在Form1.cs通过编程方法设置主键,也可以如本例在SSMS数据库管理软件里设置主键。

        打开SSMS→展开要访问的SQL数据表tb_command→文件夹“列”,右键→新建列→在右侧列表中选择编号→右键→设置主键→存储→鼠标选中tb_command→右键→刷新→展开列,展开键→观察设置主键后的变化(编号左侧出现钥匙标志,代表主键设置成功)。 

 

3.源码

//Form1.cs
//DataAdapter对象的Update()方法,可以将DataSet中修改过的数据及时地更新到数据库中
using System;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Windows.Forms;namespace _8
{public partial class Form1 : Form{//定义全局变量public SqlConnection conn;public DataSet ds;public SqlDataAdapter sda;public SqlCommandBuilder cmdbuider;public Form1(){InitializeComponent();}/// <summary>/// 初始化Form1/// 实例化SqlConnection变量conn/// 创建一个SqlCommand对象/// 创建一个SqlDataAdapter对象/// 设置SqlDataAdapter对象的SelectCommand属性为cmd/// 创建一个DataSet对象/// 使用SqlDataAdapter对象的Fill()方法填充DataSet数据集/// 设置dataGridView1控件的数据源/// 不得增减行,不得改变行列大小,只读开,不包含行标题列,编辑标志不可见/// </summary>private void Form1_Load(object sender, EventArgs e){button1.Text = "修改";label1.Text = "编号:";label2.Text = "姓名:";label3.Text = "性别:";label4.Text = "年龄:";label5.Text = "奖金:";textBox1.Size = new System.Drawing.Size(40, 21);textBox2.Size = new System.Drawing.Size(50, 21);textBox3.Size = new System.Drawing.Size(40, 21);textBox4.Size = new System.Drawing.Size(40, 21);textBox5.Size = new System.Drawing.Size(40, 21);button1.Size = new Size(60,23);textBox2.Focus();                           //可设置可不设置鼠标焦点textBox1.Enabled = false;dataGridView1.AllowUserToAddRows = false;dataGridView1.AllowUserToDeleteRows = false;dataGridView1.AllowUserToResizeColumns = false;dataGridView1.AllowUserToResizeRows = false;dataGridView1.ReadOnly = true;dataGridView1.RowHeadersVisible = false;dataGridView1.ShowEditingIcon = false;dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;  //选择其他模式,比如cell,则不能激活CellClick事件//conn = new SqlConnection("Server=DESKTOP-QFENBNJ\\SQL_WEN;integrated security=SSPI;Initial Catalog=db_CSharp");conn = new SqlConnection("Server=DESKTOP-GFMO83R;integrated security=SSPI;Initial Catalog=db_CSharp");SqlCommand cmd = new SqlCommand("select * from tb_command", conn);sda = new SqlDataAdapter                    //设置SqlDataAdapter对象的SelectCommand属性为cmd{SelectCommand = cmd};ds = new DataSet();                         //实例化DataSet sda.Fill(ds, "cs");                         //使用SqlDataAdapter对象的Fill()方法填充DataSet,""中的字符任意,不得为空dataGridView1.DataSource = ds.Tables[0];    //设置dataGridView1控件的数据源,[]中的序号代表数据表tb_command中列表[0]}private void Button1_Click(object sender, EventArgs e){DataTable dt = ds.Tables["cs"];             //创建一个DataTablesda.FillSchema(dt, SchemaType.Mapped);      //把表结构加载到tb_command表中DataRow dr = dt.Rows.Find(textBox1.Text);   //创建一个DataRow,设置DataRow中的值if (dr != null)                             //必须非null判断否则"System.NullReferenceException: 未将对象引用设置到对象的实例"{dr[1] = textBox2.Text.Trim();           //[]中数字为表的列号,可以用列名称比如"姓名"dr[2] = textBox3.Text.Trim();           //"性别"dr[3] = textBox4.Text.Trim();           //"年龄"dr[4] = textBox5.Text.Trim();           //"奖金"//dr["姓名"] = textBox2.Text.Trim();    //等效语句//dr["性别"] = textBox3.Text.Trim();//dr["年龄"] = textBox4.Text.Trim();//dr["奖金"] = textBox5.Text.Trim();}cmdbuider = new SqlCommandBuilder(sda);     //虽然VS提示不需要,但不可或缺sda.Update(dt);                             //调用其Update()方法将DataTable更新到数据库中}/// <summary>/// 在dataGridView1控件的CellClick事件中实现单击某条数据显示详细信息/// </summary>     private void DataGridView1_CellClick(object sender, DataGridViewCellEventArgs e){dataGridView1.CurrentCell = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex];dataGridView1.EditMode = DataGridViewEditMode.EditProgrammatically;dataGridView1.BeginEdit(true);if (e.RowIndex >= 0 && e.RowIndex < dataGridView1.Rows.Count){textBox1.Text = dataGridView1.SelectedCells[0].Value.ToString();textBox2.Text = dataGridView1.SelectedCells[1].Value.ToString();textBox3.Text = dataGridView1.SelectedCells[2].Value.ToString();textBox4.Text = dataGridView1.SelectedCells[3].Value.ToString();textBox5.Text = dataGridView1.SelectedCells[4].Value.ToString();}           }}
}

4.生成效果 

Form1.cs[设计]

生成后默认效果

修改第6行,年龄=18,奖金=555

SSMS更新数据库tb_command

这篇关于C#中DataAdapter对象的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/231198

相关文章

C#中读取XML文件的四种常用方法

《C#中读取XML文件的四种常用方法》Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具,下面我们就来看看C#中读取XML文件的方法都有哪些吧... 目录XML简介格式C#读取XML文件方法使用XmlDocument使用XmlTextReader/XmlTextWr

C#比较两个List集合内容是否相同的几种方法

《C#比较两个List集合内容是否相同的几种方法》本文详细介绍了在C#中比较两个List集合内容是否相同的方法,包括非自定义类和自定义类的元素比较,对于非自定义类,可以使用SequenceEqual、... 目录 一、非自定义类的元素比较1. 使用 SequenceEqual 方法(顺序和内容都相等)2.

C#使用DeepSeek API实现自然语言处理,文本分类和情感分析

《C#使用DeepSeekAPI实现自然语言处理,文本分类和情感分析》在C#中使用DeepSeekAPI可以实现多种功能,例如自然语言处理、文本分类、情感分析等,本文主要为大家介绍了具体实现步骤,... 目录准备工作文本生成文本分类问答系统代码生成翻译功能文本摘要文本校对图像描述生成总结在C#中使用Deep

C#从XmlDocument提取完整字符串的方法

《C#从XmlDocument提取完整字符串的方法》文章介绍了两种生成格式化XML字符串的方法,方法一使用`XmlDocument`的`OuterXml`属性,但输出的XML字符串不带格式,可读性差,... 方法1:通过XMLDocument的OuterXml属性,见XmlDocument类该方法获得的xm

C#多线程编程中导致死锁的常见陷阱和避免方法

《C#多线程编程中导致死锁的常见陷阱和避免方法》在C#多线程编程中,死锁(Deadlock)是一种常见的、令人头疼的错误,死锁通常发生在多个线程试图获取多个资源的锁时,导致相互等待对方释放资源,最终形... 目录引言1. 什么是死锁?死锁的典型条件:2. 导致死锁的常见原因2.1 锁的顺序问题错误示例:不同

JSON字符串转成java的Map对象详细步骤

《JSON字符串转成java的Map对象详细步骤》:本文主要介绍如何将JSON字符串转换为Java对象的步骤,包括定义Element类、使用Jackson库解析JSON和添加依赖,文中通过代码介绍... 目录步骤 1: 定义 Element 类步骤 2: 使用 Jackson 库解析 jsON步骤 3: 添

C#提取PDF表单数据的实现流程

《C#提取PDF表单数据的实现流程》PDF表单是一种常见的数据收集工具,广泛应用于调查问卷、业务合同等场景,凭借出色的跨平台兼容性和标准化特点,PDF表单在各行各业中得到了广泛应用,本文将探讨如何使用... 目录引言使用工具C# 提取多个PDF表单域的数据C# 提取特定PDF表单域的数据引言PDF表单是一

C#实现添加/替换/提取或删除Excel中的图片

《C#实现添加/替换/提取或删除Excel中的图片》在Excel中插入与数据相关的图片,能将关键数据或信息以更直观的方式呈现出来,使文档更加美观,下面我们来看看如何在C#中实现添加/替换/提取或删除E... 在Excandroidel中插入与数据相关的图片,能将关键数据或信息以更直观的方式呈现出来,使文档更

C#实现系统信息监控与获取功能

《C#实现系统信息监控与获取功能》在C#开发的众多应用场景中,获取系统信息以及监控用户操作有着广泛的用途,比如在系统性能优化工具中,需要实时读取CPU、GPU资源信息,本文将详细介绍如何使用C#来实现... 目录前言一、C# 监控键盘1. 原理与实现思路2. 代码实现二、读取 CPU、GPU 资源信息1.

在C#中获取端口号与系统信息的高效实践

《在C#中获取端口号与系统信息的高效实践》在现代软件开发中,尤其是系统管理、运维、监控和性能优化等场景中,了解计算机硬件和网络的状态至关重要,C#作为一种广泛应用的编程语言,提供了丰富的API来帮助开... 目录引言1. 获取端口号信息1.1 获取活动的 TCP 和 UDP 连接说明:应用场景:2. 获取硬