当前位置: 首页 > news >正文

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对象

目录 一、DataAdapter对象概述 二、Fill()方法填充数据集DataSet 1.举例 2.源码 3.生成效果 三、Update()方法 1.Update()方法更新数据源 2.设置数据库主键 3.源码 4.生成效果 一、DataAdapter对象概述 DataAdapter对象是一个数据适配器对象&#xff0c;是DataSet与…...

Nginx正向代理,反向代理,负载均衡

Nginx正向代理&#xff0c;反向代理&#xff0c;负载均衡 Nginx当中有两种代理方式&#xff1a; 七层代理&#xff08;http协议&#xff09; 四层代理&#xff08;tcp/udp流量转发&#xff09; 七层代理&#xff1a;七层代理&#xff0c;代理的是http的请求和响应 客户端请求…...

安防视频监控平台EasyCVR出现视频流播放卡顿情况,如何优化?

视频集中存储/云存储/视频监控管理平台EasyCVR能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;实现视频资源的鉴权管理、按需调阅、全网分发、智能分析等。AI智能/大数据视频分析EasyCVR平台已经广泛应用在工地、工厂、园区、楼…...

VRRP基础

1.VRRP概述 VRRP&#xff08; Virtual Router Redundancy Protocol&#xff0c;虚拟路由器冗余协议&#xff09;既能够实现网关的备份&#xff0c;又能解决多个网关之间互相冲突的问题&#xff0c;从而提高网络可靠性。 通过把几台路由设备联合组成一台虚拟的“路由设备”&…...

虚实融合 智兴百业 | 赵捷副市长莅临拓世科技集团筹备展台指导,本月19号!拓世科技集团与您相约世界VR产业大会

新时代科技革命中&#xff0c;虚拟现实技术、5G和“元宇宙”概念崛起&#xff0c;助力全球范围内的数字经济和产业转型。我国也正迈向高质量发展攻坚阶段&#xff0c;在中部腹地的江西&#xff0c;政府结合全球技术趋势和自身发展需求&#xff0c;选择虚拟现实为新的经济增长点…...

2000-2023年省市县人工智能企业数量数据

2000-2023年省市县人工智能企业数量数据 1、时间&#xff1a;2000-2023年7月 2、指标&#xff1a;所属年度、所属省份、所属城市、所属区县、人工智能企业数量&#xff08;省人工智能企业数量、地级市人工智能企业数量、区县人工智能企业数量&#xff09; 3、来源&#xff1…...

CSP模拟58联测20 牵着她的手

题目大意 考虑所有 n n n行 m m m列的矩阵&#xff0c;矩阵中每个元素的值都在 1 1 1到 k k k之间。对于这样的矩阵 A A A&#xff0c;按照下面规则构造序列 x 1 , x 2 , ⋯ , x n m x_1,x_2,\cdots,x_{nm} x1​,x2​,⋯,xnm​&#xff1a; 对于 1 ≤ i ≤ n 1\leq i\leq n …...

电脑版便签软件下载用哪个?

在面对每天繁忙的工作日程&#xff0c;电脑是许多上班族不可或缺的工作助手&#xff0c;而一款得心应手的电脑便签软件&#xff0c;更是可以帮助大家记录、提醒、督促各项任务按时完成的得力助手。那么&#xff0c;究竟在众多的电脑便签软。件中&#xff0c;哪一位能够真正成为…...

别再卷组件库了,Vue 拖拽库都断代了!

前言 最近在测试 Tailwind CSS 和 Uno CSS 这两种原子化 CSS 工具是否能够有效减少打包后的文件体积时&#xff0c;先开始分析这些工具的优缺点&#xff0c;然后再直接上数据&#xff0c;最后做了一款经典的 TodoList 来进行测试&#xff0c;文章都写好了就差最后的数据了。 …...

利用服务器打造创新的在线社区

在这个数字化时代&#xff0c;服务器是实现创意项目的关键工具之一。虽然有许多用途&#xff0c;但其中最引人注目的是将服务器用于构建创新的在线社区。 为什么选择在线社区&#xff1f; 在线社区是连接人们、促进互动和分享知识的强大工具。它们可以围绕共同的兴趣、目标或…...

CSS动画实现节流

目录 介绍: 实现代码: 介绍: 节流指的避免过于频繁的执行一个函数&#xff0c;例如&#xff1a;一个保存按钮&#xff0c;为了避免重复提交或者服务器考虑&#xff0c;往往需要对点击行为做一定的限制&#xff0c;不然会频繁的请求接口&#xff0c;之前基本上是通过js去控制节…...

Apache Log4j Server (CVE-2017-5645) 反序列化命令执行漏洞

文章目录 Apache Log4j Server 反序列化命令执行漏洞&#xff08;CVE-2017-5645&#xff09;1.1 漏洞描述1.2 漏洞复现1.2.1 环境启动1.2.2 漏洞验证1.2.3 漏洞利用 1.3 加固建议 Apache Log4j Server 反序列化命令执行漏洞&#xff08;CVE-2017-5645&#xff09; 1.1 漏洞描述…...

视口 css

视口是浏览器上显示网页的一块区域&#xff0c;大小并不局限于浏览器可视区域范围。PC端和移动端视口差别很大。PC端中视口宽度始终与浏览器窗口宽度一致&#xff0c;移动端视口与浏览器窗口宽度完全独立。 PC端 PC端视口大小等于浏览器窗口可视区域大小&#xff0c;无论浏览…...

Puppeteer记录操作过程及优秀的开源插件(五)

Puppeteer记录操作过程及优秀的开源插件&#xff08;五&#xff09; Puppeteer记录操作过程及优秀的开源插件&#xff08;五&#xff09;一、简介二、自动生成测试代码三、优秀的开源插件四、参考案例 一、简介 本节我们将介绍通过浏览器工具记录用户的实际操作&#xff0c;并…...

联邦学习+梯度+梯度剪枝

联邦学习需要参与者在每一次的本地训练后&#xff0c;上传所更新的模型参数并与其他参与者共享&#xff0c;而参数更新中仍有可能包含所有者的敏感信息 解决方案&#xff1a; 加密方法&#xff08;安全多方计算、同态加密&#xff09;通过将明文编码为密文的方式&#xff0c;…...

提高研发效率还得看Apipost

随着数字化转型的加速&#xff0c;API&#xff08;应用程序接口&#xff09;已经成为企业间沟通和数据交换的关键。而在API开发和管理过程中&#xff0c;API文档、调试、Mock和测试的协作显得尤为重要。Apipost正是这样一款一体化协作平台&#xff0c;旨在解决这些问题&#xf…...

Elasticsearch使用——结合MybatisPlus使用ES es和MySQL数据一致性 结合RabbitMQ实现解耦

前言 本篇博客是一篇elasticsearch的使用案例&#xff0c;包括结合MybatisPlus使用ES&#xff0c;如何保证MySQL和es的数据一致性&#xff0c;另外使用了RabbitMQ进行解耦&#xff0c;自定义了发消息的方法。 其他相关的Elasticsearch的文章列表如下&#xff1a; Elasticsear…...

什么是CSGO大行动,2023年CSGO大行动时间预测

什么是CSGO大行动&#xff0c;2023年CSGO大行动时间预测 什么是CSGO大行动&#xff0c;2023年CSGO大行动时间预测 那天群里在提大行动&#xff0c;不明所以的新同学在问&#xff0c;什么是大行动&#xff0c;是不是官方红锁大行动要来了&#xff1f;当然不是&#xff0c;别自己…...

Pycharm中终端不显示虚拟环境名解决方法

文章目录 一、问题说明&#xff1a;二、解决方法&#xff1a;三、重启Pycharm 一、问题说明&#xff1a; Pycharm中打开项目配置完需要的虚拟环境后&#xff0c;在Terminal&#xff08;终端&#xff09;中无法切换及显示当前需要运行代码的虚拟环境。 比如以下一种情况&#…...

某翻译网站webpack 全扣js逆向法

持续创作文章&#xff0c;只是为了更好的思考 如下内容&#xff0c;如果有写的不清楚&#xff0c;不对的地方&#xff0c;也请大家提醒我一下&#xff0c;谢谢&#xff01; 本次的目标是某道翻译网站&#xff0c;相信各位爷应该明白&#xff0c;这次逆向的整体做法还是把webpac…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

ES6从入门到精通:前言

ES6简介 ES6&#xff08;ECMAScript 2015&#xff09;是JavaScript语言的重大更新&#xff0c;引入了许多新特性&#xff0c;包括语法糖、新数据类型、模块化支持等&#xff0c;显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...