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

相关文章

2. c#从不同cs的文件调用函数

1.文件目录如下: 2. Program.cs文件的主函数如下 using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using System.Windows.Forms;namespace datasAnalysis{internal static

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

用命令行的方式启动.netcore webapi

用命令行的方式启动.netcore web项目 进入指定的项目文件夹,比如我发布后的代码放在下面文件夹中 在此地址栏中输入“cmd”,打开命令提示符,进入到发布代码目录 命令行启动.netcore项目的命令为:  dotnet 项目启动文件.dll --urls="http://*:对外端口" --ip="本机ip" --port=项目内部端口 例: dotnet Imagine.M

Java第二阶段---09类和对象---第三节 构造方法

第三节 构造方法 1.概念 构造方法是一种特殊的方法,主要用于创建对象以及完成对象的属性初始化操作。构造方法不能被对象调用。 2.语法 //[]中内容可有可无 访问修饰符 类名([参数列表]){ } 3.示例 public class Car {     //车特征(属性)     public String name;//车名   可以直接拿来用 说明它有初始值     pu

C# dateTimePicker 显示年月日,时分秒

dateTimePicker默认只显示日期,如果需要显示年月日,时分秒,只需要以下两步: 1.dateTimePicker1.Format = DateTimePickerFormat.Time 2.dateTimePicker1.CustomFormat = yyyy-MM-dd HH:mm:ss Tips:  a. dateTimePicker1.ShowUpDown = t

C#关闭指定时间段的Excel进程的方法

private DateTime beforeTime;            //Excel启动之前时间          private DateTime afterTime;               //Excel启动之后时间          //举例          beforeTime = DateTime.Now;          Excel.Applicat

C# 防止按钮botton重复“点击”的方法

在使用C#的按钮控件的时候,经常我们想如果出现了多次点击的时候只让其在执行的时候只响应一次。这个时候很多人可能会想到使用Enable=false, 但是实际情况是还是会被多次触发,因为C#采用的是消息队列机制,这个时候我们只需要在Enable = true 之前加一句 Application.DoEvents();就能达到防止重复点击的问题。 private void btnGenerateSh

C# double[] 和Matlab数组MWArray[]转换

C# double[] 转换成MWArray[], 直接赋值就行             MWNumericArray[] ma = new MWNumericArray[4];             double[] dT = new double[] { 0 };             double[] dT1 = new double[] { 0,2 };

HTML5自定义属性对象Dataset

原文转自HTML5自定义属性对象Dataset简介 一、html5 自定义属性介绍 之前翻译的“你必须知道的28个HTML5特征、窍门和技术”一文中对于HTML5中自定义合法属性data-已经做过些介绍,就是在HTML5中我们可以使用data-前缀设置我们需要的自定义属性,来进行一些数据的存放,例如我们要在一个文字按钮上存放相对应的id: <a href="javascript:" d

C# Hash算法之MD5、SHA

MD5我们用的还是比较多的,一般用来加密存储密码。但是现在很多人觉MD5可能不太安全了,所以都用上了SHA256等来做加密(虽然我觉得都差不多,MD5还是能玩)。 还是跟上一篇说的一样,当一个算法的复杂度提高的同时肯定会带来效率的降低,所以SHA和MD5比较起来的话,SHA更安全,MD5更高效。 由于HASH算法的不可逆性,所以我认为MD5和SHA主要还是应用在字符串的"加密"上。 由于