• C#中DataAdapter对象


    目录

    一、DataAdapter对象概述

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

    1.举例

    2.源码

    3.生成效果 

    三、Update()方法

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

    2.设置数据库主键

    3.源码

    4.生成效果 


    一、DataAdapter对象概述

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

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

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

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

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

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

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

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

    1.举例

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

    2.源码

    1. //Form1.cs
    2. //DataAdapter对象的Fill()方法填充DataSet数据集
    3. using System;
    4. using System.Collections.Generic;
    5. using System.ComponentModel;
    6. using System.Data;
    7. using System.Data.SqlClient;
    8. using System.Drawing;
    9. using System.Linq;
    10. using System.Text;
    11. using System.Threading.Tasks;
    12. using System.Windows.Forms;
    13. namespace _7
    14. {
    15. public partial class Form1 : Form
    16. {
    17. public Form1()
    18. {
    19. InitializeComponent();
    20. }
    21. ///
    22. /// 初始化Form1
    23. ///
    24. private void Form1_Load(object sender, EventArgs e)
    25. {
    26. button1.Text = "加载数据";
    27. button1.Size = new System.Drawing.Size(75, 23);
    28. }
    29. ///
    30. /// 实例化SqlConnection变量conn
    31. /// 创建一个SqlCommand对象并通过select方法查询数据库tb_command
    32. /// 创建一个SqlDataAdapter对象
    33. /// 设置SqlDataAdapter对象的SelectCommand属性为cmd,与数据库SQL建立关联
    34. /// 创建一个DataSet对象
    35. /// 使用SqlDataAdapter对象的Fill()方法填充DataSet数据集
    36. /// 设置dataGridView1控件的数据源
    37. ///
    38. private void Button1_Click(object sender, EventArgs e)
    39. {
    40. SqlConnection conn = new SqlConnection("Server=DESKTOP-QFENBNJ\\SQL_WEN;integrated security=SSPI;Initial Catalog=db_CSharp");
    41. //SqlConnection conn = new SqlConnection("Server=DESKTOP-GFMO83R;integrated security=SSPI;Initial Catalog=db_CSharp");
    42. SqlCommand cmd = new SqlCommand("select * from tb_command", conn);
    43. SqlDataAdapter sda = new SqlDataAdapter
    44. {
    45. SelectCommand = cmd
    46. };
    47. DataSet ds = new DataSet();
    48. sda.Fill(ds, "wen"); //""中的字符任意,不得为空
    49. dataGridView1.DataSource = ds.Tables[0]; //[]中的序号代表数据表tb_command中表的索引号,表0、表1等
    50. }
    51. }
    52. }

    3.生成效果 

    Form1.cs[设计]

    生成效果

    SQL数据表tb_command

    三、Update()方法

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

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

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

    1. 语法如下:
    2. ☑ dataTable:用于更新数据源的DataTable。
    3. ☑ 返回值: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.源码

    1. //Form1.cs
    2. //DataAdapter对象的Update()方法,可以将DataSet中修改过的数据及时地更新到数据库中
    3. using System;
    4. using System.Data;
    5. using System.Data.SqlClient;
    6. using System.Drawing;
    7. using System.Windows.Forms;
    8. namespace _8
    9. {
    10. public partial class Form1 : Form
    11. {
    12. //定义全局变量
    13. public SqlConnection conn;
    14. public DataSet ds;
    15. public SqlDataAdapter sda;
    16. public SqlCommandBuilder cmdbuider;
    17. public Form1()
    18. {
    19. InitializeComponent();
    20. }
    21. ///
    22. /// 初始化Form1
    23. /// 实例化SqlConnection变量conn
    24. /// 创建一个SqlCommand对象
    25. /// 创建一个SqlDataAdapter对象
    26. /// 设置SqlDataAdapter对象的SelectCommand属性为cmd
    27. /// 创建一个DataSet对象
    28. /// 使用SqlDataAdapter对象的Fill()方法填充DataSet数据集
    29. /// 设置dataGridView1控件的数据源
    30. /// 不得增减行,不得改变行列大小,只读开,不包含行标题列,编辑标志不可见
    31. ///
    32. private void Form1_Load(object sender, EventArgs e)
    33. {
    34. button1.Text = "修改";
    35. label1.Text = "编号:";
    36. label2.Text = "姓名:";
    37. label3.Text = "性别:";
    38. label4.Text = "年龄:";
    39. label5.Text = "奖金:";
    40. textBox1.Size = new System.Drawing.Size(40, 21);
    41. textBox2.Size = new System.Drawing.Size(50, 21);
    42. textBox3.Size = new System.Drawing.Size(40, 21);
    43. textBox4.Size = new System.Drawing.Size(40, 21);
    44. textBox5.Size = new System.Drawing.Size(40, 21);
    45. button1.Size = new Size(60,23);
    46. textBox2.Focus(); //可设置可不设置鼠标焦点
    47. textBox1.Enabled = false;
    48. dataGridView1.AllowUserToAddRows = false;
    49. dataGridView1.AllowUserToDeleteRows = false;
    50. dataGridView1.AllowUserToResizeColumns = false;
    51. dataGridView1.AllowUserToResizeRows = false;
    52. dataGridView1.ReadOnly = true;
    53. dataGridView1.RowHeadersVisible = false;
    54. dataGridView1.ShowEditingIcon = false;
    55. dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect; //选择其他模式,比如cell,则不能激活CellClick事件
    56. //conn = new SqlConnection("Server=DESKTOP-QFENBNJ\\SQL_WEN;integrated security=SSPI;Initial Catalog=db_CSharp");
    57. conn = new SqlConnection("Server=DESKTOP-GFMO83R;integrated security=SSPI;Initial Catalog=db_CSharp");
    58. SqlCommand cmd = new SqlCommand("select * from tb_command", conn);
    59. sda = new SqlDataAdapter //设置SqlDataAdapter对象的SelectCommand属性为cmd
    60. {
    61. SelectCommand = cmd
    62. };
    63. ds = new DataSet(); //实例化DataSet
    64. sda.Fill(ds, "cs"); //使用SqlDataAdapter对象的Fill()方法填充DataSet,""中的字符任意,不得为空
    65. dataGridView1.DataSource = ds.Tables[0]; //设置dataGridView1控件的数据源,[]中的序号代表数据表tb_command中列表[0]
    66. }
    67. private void Button1_Click(object sender, EventArgs e)
    68. {
    69. DataTable dt = ds.Tables["cs"]; //创建一个DataTable
    70. sda.FillSchema(dt, SchemaType.Mapped); //把表结构加载到tb_command表中
    71. DataRow dr = dt.Rows.Find(textBox1.Text); //创建一个DataRow,设置DataRow中的值
    72. if (dr != null) //必须非null判断否则"System.NullReferenceException: 未将对象引用设置到对象的实例"
    73. {
    74. dr[1] = textBox2.Text.Trim(); //[]中数字为表的列号,可以用列名称比如"姓名"
    75. dr[2] = textBox3.Text.Trim(); //"性别"
    76. dr[3] = textBox4.Text.Trim(); //"年龄"
    77. dr[4] = textBox5.Text.Trim(); //"奖金"
    78. //dr["姓名"] = textBox2.Text.Trim(); //等效语句
    79. //dr["性别"] = textBox3.Text.Trim();
    80. //dr["年龄"] = textBox4.Text.Trim();
    81. //dr["奖金"] = textBox5.Text.Trim();
    82. }
    83. cmdbuider = new SqlCommandBuilder(sda); //虽然VS提示不需要,但不可或缺
    84. sda.Update(dt); //调用其Update()方法将DataTable更新到数据库中
    85. }
    86. ///
    87. /// 在dataGridView1控件的CellClick事件中实现单击某条数据显示详细信息
    88. ///
    89. private void DataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
    90. {
    91. dataGridView1.CurrentCell = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex];
    92. dataGridView1.EditMode = DataGridViewEditMode.EditProgrammatically;
    93. dataGridView1.BeginEdit(true);
    94. if (e.RowIndex >= 0 && e.RowIndex < dataGridView1.Rows.Count)
    95. {
    96. textBox1.Text = dataGridView1.SelectedCells[0].Value.ToString();
    97. textBox2.Text = dataGridView1.SelectedCells[1].Value.ToString();
    98. textBox3.Text = dataGridView1.SelectedCells[2].Value.ToString();
    99. textBox4.Text = dataGridView1.SelectedCells[3].Value.ToString();
    100. textBox5.Text = dataGridView1.SelectedCells[4].Value.ToString();
    101. }
    102. }
    103. }
    104. }

    4.生成效果 

    Form1.cs[设计]

    生成后默认效果

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

    SSMS更新数据库tb_command

  • 相关阅读:
    推理框架概览
    JVM相关知识点
    easyExcel使用场景
    ON java 8 对象创建
    Go并发编程之二
    Mybatis 实现简单增删改查
    Java责任链模式
    电机控制::理论分析::延迟环节对系统的影响
    【英语:基础进阶_读写专项训练】G5.议论文写作
    React 实现文件分片上传和下载
  • 原文地址:https://blog.csdn.net/wenchm/article/details/133882021