access数据库

article/2025/10/7 17:13:38

                经过连续几天的学习,初步了解access数据库。以下是知识点的总结,对应刚刚学习的人会很有帮助。

                               ADO.NET是数据的访问架构

它主要包括   connection,command,datareader,dataadapter,dataset,datatable等六个对象

一、connection 作用:连接数据库

        string str ="连接字符串" 

        什么是连接字符串呢?

 

二、dataGridView控件

       在介绍其他对象之前说说dataGridView控件,数据库在程序里面是抽象的东西,dataGridView控件的作用就像是把数据库实列化一样,让眼睛可以看得见。先解释这么多,后面的内容要看完其他对象的介绍,回过头来看吧。

       如果你是先看过三到七的内容你才会理解下面的内容

adapter.Fill(dt);                   // 通过适配器把表的数据库表内容填充到内存dt

数据已经在内存中,我们可以通过dataGridView控件把数据展示出来

 dataGridView1.DataSource = dt;           // 把数据显示到界面

值得说明的是这个等式的两边不是相同类型,右边赋值给左边会很安全,但是当左边赋值给右边往往会报错(提示类型不同)

如何解决这个报错呢?

1、提供方法

public DataTable GetDgvToTable(DataGridView dgv)       //实现类型转换
        {
            DataTable dt = new DataTable();
            for (int count = 0; count < dgv.Columns.Count; count++)    //在数据库表的列中添加控件表格的字段
            {
                DataColumn dc = new DataColumn(dgv.Columns[count].Name.ToString());
                dt.Columns.Add(dc);
            }
            for (int count = 0; count < dgv.Rows.Count; count++)      //先行  再列  一行一行将控件表格内容添加到数据库表中
            {
                DataRow dr = dt.NewRow();
                for (int countsub = 0; countsub < dgv.Columns.Count; countsub++)
                {
                    dr[countsub] = Convert.ToString(dgv.Rows[count].Cells[countsub].Value);
                }
                dt.Rows.Add(dr);
            }
            return dt;
        }

2、控制代码书写方式

           var dt = (DataTable)dataGridView1.DataSource;    //声明一个表格变量dt

           dataGridView1.DataSource = dt                             //把这个变量赋值给控件

            重点是这个变量类型不要是DataTable类型,var 的提示信息其实也是DataTable类型,但是结果就是这样神奇,这样写就不会报错了。
            

三、dataadapter对象 

       它的作用是在连接DataSet/DataTable对象和数据库

四、command对象1、

        它是用来对数据库的内容进行增删改查。

        这里要接触SQL语句

        1、增

例:string sql = "insert into [book2]([ID],[Name],[Age]) values (" + Convert.ToDecimal(textBox1.Text.Trim()) + ",'" + textBox2.Text.Trim() + "'," + Convert.ToDecimal(textBox6.Text.Trim()) + ")";

关键词insert into [表名](字段1,字段2,字段3,……)values (数据1,数据2,数据3,……);

         2、删

例:string sql = "delete from [book2] where [ID]=" + Convert.ToDecimal(textBox1.Text.Trim()) + "";

关键字delete from [表明] where [字段n]="  "";

         3、改

例: string sql = "update [book2] set[Name] ='" + textBox2.Text.Trim() + "', [Age] =" + Convert.ToDecimal(textBox6.Text.Trim()) + "  where [ID]=" + Convert.ToDecimal(textBox1.Text.Trim()) + "";

修改之后怎么更新到数据库呢?

            dt = new DataTable();        //实例化一个表格

            OleDbCommand comm = new OleDbCommand(sql, conn);//创建OleDbCommand对象

            comm.ExecuteNonQuery();      //执行命令(insert,delete,update等)

             //返回结果是int类型,3个命令所影响的数据行数

             adp.Update(dt);         // 通过适配器把表的数据库表内容填充到内存dt

更新到数据库怎么更新dataGridView控件呢?

         
            dt.Clear();                   //清楚内存中存放的表数据
           
            adp.Fill(dt);                 //再次读取已经改变过的表数据
           

关键字   update [表名] set[字段x] ='" 字符串型 "', [字段y] ="非字符串型 "  where [字段n]="

这应该就是SQL语句了,用的符号特别多,查了很多文章都没有人具体说过。这里我就具体说下

book2是表名,中括号不是必须的,但是有更标准,可以减少出错。我在学习时一直提示语法错误,直到使用了中括号才没有再出现

字段也可以使用中括号

数据使用的是双引号和双引号+单引号,这要看数据的类型,暂时发现字符型数据使用双引号+单引号,其他使用双引号即可。

五、dataset对象

         它是一个数据库容器,还可以看做是datatable的集合

六、datatable对象

         它是内存数据中的一个表

七、对象之间的关系

   conn = new OleDbConnection(str);     //建立连接对象

   adp = new OleDbDataAdapter("Select * from book2", conn) ;//导入具体的数据库表 

   dt = new DataTable();                  // 在内存中创建一个DataTable

    adp.Fill(dt);                   // 通过适配器把表的数据库表内容填充到内存dt

 

 

 

       八、深入

     1、  实际使用时我们使用SQL语句来修改数据库内容显然是不靠谱的,因为我们看到的是dataGridView控件中的数据表格 。我们当然希望能在dataGridView控件中修改数据并能更新到数据库中。这样该怎么做呢?

       

 try
            {
                if (adp== null) return;               //无语句可以不用{}

                var dt = (DataTable)dataGridView1.DataSource;       //var有大用*******
                OleDbCommandBuilder cmdb = new OleDbCommandBuilder(adp);

                //可以关联dt与数据库的对象并使之与adp 对象关联
                //控件中的表格赋值给了dt,意思就是dt 获取了控件中的表格的改变

                //cmdb对象就好像在说内存表格数据是什么样,我的数据库表数据也要什么样

                 //参数adp的修改就是我们对dataGridView1控件中数据的修改

                adp.Update(dt);   //把dt里面数据更新到数据库中   //报错时看是不是没有设置主键

                //Update作用是把dt里面数据更新到数据库中,Fill作用是把数据库中的数据填充到dt中
                MessageBox.Show("修改成功");
            }
            catch
            {
                MessageBox.Show("修改失败");
                return;
            }

2、数据修改是改完所有要修改的数据才修改,还是改完一个单元格就修改呢?

这当然是改完一个生效一个好,如果修改地方特别多,一次修改就会造成电脑运行压力

      这里我们就可以使用控件中的单元编辑完成事件,怎么做呢?

 private void dataGridView1_CellEndEdit_1(object sender, DataGridViewCellEventArgs e){//如果做了大量修改,一次性修改耗时更多//要设置主键if (checkBox1.Checked == true)                 //可以注释掉该句{try{if (adapter == null) return;var dt = (DataTable)dataGridView1.DataSource;       OleDbCommandBuilder cmdb = new OleDbCommandBuilder(adapter);adapter.Update(dt);  //有时候会报错,不一定是代码的原因,可能是数据库表的原因哦 !               }catch{MessageBox.Show("更新失败");return;}}}

3、下面介绍一种删除当前行的方法:一般要删除某行就需要获取它的行号,而对于那些有编号的表格又怎么办呢?

  private void dataGridView1_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)   //选中时选中所在行
        {

            this.dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
            //选中模式全行选中
            row1 = e.RowIndex + 1;            //e表示所选单元格 RowIndex是它的一个属性,这个属性可以告诉我们所选单元格在那一行

             变量row1是我们要使用到的一个参数

 

 private void button1_Click(object sender, EventArgs e)       //依据ID删除,但是参数是行号{conn.Open();string sql = "delete from [book2] where [ID]=" + Convert.ToDecimal(row1) + "";//删除指定行OleDbCommand comm = new OleDbCommand(sql, conn);comm.ExecuteNonQuery();adapter.Update(dt);//清楚内存中存放的表数据dt.Clear();//再次读取已经改变过的表数据adapter.Fill(dt);conn.Close();}

 如果还用上面的代码显不能删除掉所选行,因为行数是8 对应的ID是12,这时代码该怎么写呢?

       private void button1_Click(object sender, EventArgs e)       //依据ID删除

  private void button18_Click(object sender, EventArgs e){conn.Open();//string sql = "delete from [book2] where [ID]=" + Convert.ToDecimal(row1) + "";//OleDbCommand comm = new OleDbCommand(sql, conn)//comm.ExecuteNonQuery();dataGridView1.Rows.Remove(dataGridView1.CurrentRow);  //参数不是行号DataTable dt1 = (DataTable)dataGridView1.DataSource;OleDbCommandBuilder cmdb = new OleDbCommandBuilder(adapter);//关联dt1与数据库adapter.Update(dt1);       //把dt1更新到数据库//清楚内存中存放的表数据dt1.Clear();//再次读取已经改变过的表数据adapter.Fill(dt1);conn.Close();}

 

 


http://chatgpt.dhexx.cn/article/qUNQMVYQ.shtml

相关文章

Access数据库对象包括哪六个?Access与 Excel 最重要的区别是什么?

我们知道微软有两款经典的数据处理软件&#xff1a;Excel和Access。 由于在运行大量数据时&#xff0c;Excel会卡得让你怀疑人生&#xff0c;Access却轻松运转。所以很多人说他俩的时候&#xff0c;大都总结&#xff1a; “小规模数据用Excel&#xff0c;大规模数据用Access。…

access/_access函数

Linux下 1&#xff0c;头文件&#xff1a; #include <unistd.h>2&#xff0c;函数的声明&#xff1a; int access(const char *pathname, int mode);3&#xff0c;函数的作用&#xff1a; access函数用来判断指定的文件或目录是否存在(F_OK)&#xff0c;已存在的文件或…

Linux access函数讲解

函数&#xff1a; #include<unistd.h> int access(const char* pathname, int mode); 参数介绍&#xff1a; pathname 是文件的路径名文件名 mode&#xff1a;指定access的作用&#xff0c;取值如下 F_OK 值为0&#xff0c;判断文件是否存在X_OK 值为1&#xff0c;判…

C语言中access/_access函数的使用

在Linux下&#xff0c;access函数的声明在<unistd.h>文件中&#xff0c;声明如下&#xff1a; int access(const char *pathname, int mode); access函数用来判断指定的文件或目录是否存在(F_OK)&#xff0c;已存在的文件或目录是否有可读(R_OK)、可写(W_OK)、可执行(X…

C语言:access函数的使用

C语言&#xff1a;access函数的使用 一、access()函数用来判断用户是否具有访问某个文件的权限(或判断某个文件是否存在). 二、需要包含#include<unistd.h> 三、参数和返回值 int access(const char *pathname,int mode) 参数: pathname:表示要测试的文件…

gremlin

g.V().hasLabel(Person).outE(Knows) inE()

复杂Gremlin查询的调试方法

复杂Gremlin查询的调试方法 摘要: Gremlin是图数据库查询使用最普遍的基础查询语言。Gremlin的图灵完备性&#xff0c;使其能够编写非常复杂的查询语句。对于复杂的问题&#xff0c;我们该如何编写一个复杂的查询&#xff1f;以及我们该如何理解已有的复杂查询&#xff1f;本文…

Gremlin基本使用

Gremlin简介 Gremlin是Apache TinkerPop 框架下的图遍历语言。Gremlin是一种函数式数据流语言&#xff0c;可以使得用户使用简洁的方式表述复杂的属性图&#xff08;property graph&#xff09;的遍历或查询。每个Gremlin遍历由一系列步骤&#xff08;可能存在嵌套&#xff09…

Gremlin语法学习笔记

hugegraph查询使用Gremlin语法&#xff0c;打开 hugegraph-studio http://10.0.0.50:18088&#xff0c;更详细的方法参考 http://kelvinlawrence.net/book/Gremlin-Graph-Guide.html#fuzzyregs 导入数据&#xff0c;jar包参考 https://git.gtapp.xyz/ml/graph-user&#xff0c…

从零开始Gremlin学习

从零开始Gremlin学习 创建schema和图 以下面这个ThinkerPop关系图为例 在建图之前&#xff0c;首先需要创建schema&#xff0c;创建的schema有属性、节点、和边缘&#xff0c;正常情况下是按照属性->节点->边缘&#xff0c;因为在定义及节点label的时候需要有属性&…

基于Gremlin语言图数据库查询的优化

图谱结构&#xff1a; 其中query标签的结构&#xff1a; 列名类型说明idinteger唯一主键classstring类别 a_[a|b|c|d|e|f]标签的结构 列名类型说明idinteger唯一主键classstring类别&#xff0c;关联到query的类别namestring名称 b_[a|b|c|d|e|f]标签的结构 列名类型说明id…

Gremlin学习笔记

前言 本文基于HugeGraph提供的HugeGraph-Studio编写示例代码&#xff0c;下图是示例关系图&#xff0c;示例数据在文末 基本概念 Gremlin是Apache TinkerPop框架下规范的图语言&#xff0c;相当于SQL之于关系型数据库 节点Vertex&#xff1a;一般指实体&#xff0c;如&#xf…

gremlin图查询插件

gremlin是一个通用的图查询插件&#xff0c;尽管在neo4j上可以使用Cypher语言进行查询&#xff0c;但我仍想调研一下通过gremlin查询neo4j。 1. 安装 插件下载地址&#xff1a;https://archive.apache.org/dist/tinkerpop/&#xff0c;这里下载了3.4.4版本的console和server压…

gremlin语法详解

初步认识 点&#xff1a;蓝色的圈代表顶点&#xff08;查询语句中的V()&#xff09;&#xff0c;圈中的person代表顶点的名称&#xff0c;name和age为顶点的属性。 边&#xff1a;黑色的线代表边(查询语句中的E())&#xff0c;线上的knows代表边的名称&#xff0c;weight为边…

gremlin语句详解

到了新公司用到了tinkerPop的gremlin语句&#xff0c;由于是全英文的文档。为了杜绝我鱼记忆&#xff0c;决定整理一下以后查看方便。嗯嗯~ o(*&#xffe3;▽&#xffe3;*)o 附图&#xff1a;语句来源于图片 初步认识&#xff1a; 点&#xff1a;蓝色的圈代表顶点&#xff…

图数据库入门教程-深入学习Gremlin(1):图基本概念与操作

前言&#xff1a;Gremlin语言是图数据库最主流的查询语言&#xff0c;是Apache TinkerPop框架下规范的图语言&#xff0c;相当于SQL之于关系型数据库。为了图数据库使用者更好的掌握Gremlin这门图语言&#xff0c;我们对Gremlin Steps进行了分类与总结&#xff0c;接下来将会出…

Gremlin:图遍历语言

Gremlin简介 Gremlin是Apache TinkerPop 框架下的图遍历语言。Gremlin是一种函数式数据流语言&#xff0c;可以使得用户使用简洁的方式表述复杂的属性图&#xff08;property graph&#xff09;的遍历或查询。每个Gremlin遍历由一系列步骤&#xff08;可能存在嵌套&#xff09;…

TWR双边测距

本篇承接UWB那篇&#xff0c;专门介绍下双边测距的原理。 1.单侧双边测距 如上图所示&#xff0c;设备A发起交换&#xff0c;设备B响应完成交换&#xff0c;每个设备精确地记录发送和接收时间戳信息。设备B在收到设备A的信号后&#xff0c;延迟固定的时间回发信号&#xff0…

Java 7 - TWR 和 多异常捕获 示例

为什么80%的码农都做不了架构师&#xff1f;>>> package interview.blob_clob;import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Prepared…

TWR_MPC8309调试日志

版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 TWR_MPC8309调试日志 --------By Moresung Chan , At 12:00 ,Sep 16,2012 一、软硬件&#xff1a; PC机操作系统&#xff1a;Microsoft Windows Server 2003 R2 开发板&#xff1a;TWR_MPC8309、…