欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

ado.net的简单数据库操作(一)

程序员文章站 2022-04-28 09:48:55
摘要:接下来的几篇博客将要讲到如何使用ado.net实现简单的数据库操作,包括增删改等内容。首先会介绍基础的数据库操作,然后以一个实例来进行讲解,这个实例会把一个数据表读取到winform上,然后在winform上有一些按钮和文本框,通过这些实现对数据库里的内容的增删改的操作。我个人比较菜,因此记录... ......

  摘要:接下来的几篇博客将要讲到如何使用ado.net实现简单的数据库操作,包括增删改等内容。首先会介绍基础的数据库操作,然后以一个实例来进行讲解,这个实例会把一个数据表读取到winform上,然后在winform上有一些按钮和文本框,通过这些实现对数据库里的内容的增删改的操作。我个人比较菜,因此记录计较详细,说话也啰嗦,因此可能会写几篇才能介绍完。

  本人属菜鸟一枚,刚接触.net两个星期,写的东西也是照搬自己看的视频里老师教的东西,其目的主要是为了巩固自己学习,当然,如果正好能帮助到和我一样的刚入门的菜鸟,那我也是非常高兴的。闲言少叙,那么我就开始了。

  昨天写了一篇关于最简单的三层的随笔,但是,对于里面的数据库的操作只用了一个SqlHelper就一笔带过了,至于这个SqlHelper是怎么实现的,可能很多刚接触.net一两天的同学还是蒙圈的,所以今天借这个实例,详细的说一下ado.net的简单数据库操作。啊?什么?你想问复杂的。抱歉,想问复杂的请走开,为什么?因为我也不会!

  下面我正式开始了,哈哈!

第一部分:连接数据库

  1.先说一下连接数据库的基本步骤哈:

(1)创建连接字符串:

创建连接字符串有两种方法,分别适用于登录数据库的不同方式,我这里说的是我用的sqlserver数据库哈,其他的数据库应该也差不多吧,我没试过,哈哈!

第一种:windows方式登录

这种方式应该这么写:

 string constr = "Data Source = acer-pc; Initial Catalog = 数据库名;Intergrated Security = true"; 

什么?你还不知道啥是windows的登录方式,好吧,当你用这张图登录的时候,你就是windows登录方式:

ado.net的简单数据库操作(一)

 

 第二种:sql账号登录(通常用的都是 sa 账号登录的)

ado.net的简单数据库操作(一)

 

这种方式就这么写

string constr = "Data Source = acer-pc; Initial Catalog = 数据库名; UserID = sa(账户用户名) Passqord = 168168(密码)";

 

其中,Data Source 后面写的是你数据库的地址,你连的是那个数据库,本机的话,这里写 localhost\127.0.0.1\服务器名称(上图中的第二个框里的内容)\或者直接打个点(.),这几种写法都可以;Initial Catalog 后写数据库的名字就可以了,再后面的就能看懂了吧。

(2)创建连接对象

创建连接对象需要用到这个东东 ==》 SqlConnection (这个类的空间没引进来,需要shift + alt + f10 引入),怎么写?看下面

1 using (SqlConnection con = new SqlConnection(constr))
2 {
3     
4 }    

 

con 就是连接对象了。

(3)打开连接

(4)数据库操作

(5)关闭连接,释放资源

直接看代码吧:

  using (SqlConnection con = new SqlConnection(constr))
 {
    con.Open();//打开连接
    Console.WriteLine("打开连接成功");
    con.Close();//关闭连接
 }     
             

 

 可以新建一个控制台程序,在主函数里写上这段代码试一下,这是我的代码和结果:

using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ado801am_ConnectSql
{
    class Program
    {
        static void Main(string[] args)
        {
            string conStr = "Data Source = acer-pc;Initial Catalog = FirstDB;Integrated Security = true";

            using (SqlConnection con = new SqlConnection(conStr))
            {
                con.Open();
                Console.WriteLine("连接成功");
                con.Close();
            }
            Console.ReadKey();
            Console.WriteLine("关闭连接");
        }
    }
}

ado.net的简单数据库操作(一)

 

 第二部分、数据库操作

   数据库操作部分接在上面的第四步,这里又细分了几步,看下面:

1.编写sql语句

  这是啥意思呢,其实就是先写个sql = "XXX",比如,你要查询某个表中的全部内容,那你就要写:

string sql = "select * from TbXXX表";

 

 就这。

2.创建一个执行sql语句的对象

  这个和创建连接对象一回事,要用到一个这 ==》SqlCommand (这个类的空间没引进来,需要shift + alt + f10 引入),怎么写?还是看下面:

 using (SqlCommand cmd = new SqlCommand(sql,con))//两个参数
{

}

 

这里是两个参数哈,不要搞错了。

3.执行sql语句 

  咋执行啊?调用SqlCommand 里的方法呀!

至于这里有几个方法可以调用,那就要详细讲一下了,趁我自己还记得住,赶快记载下来,哈哈,别哪天突然忘了,毕竟看视频的时候没做笔记。

这里有三个方法可用,分别是:

(1)ExecuteNonQuery():这个方法怎么用呢,执行所有的sql语句都能用吗?显然,不能够啊。这个方法啊,他执行后会给你返回一个 int 类型的值(也就是一个整数),那这个整数代码表啥意思啊,这个整数代表的意思是:你的sql语句对这个表的内容改变的行数;比如啊,你向XXX表中插入了三条记录,那么这哥们儿就给你额返回个整数 3 ,你改变了表中的两条数据,这哥们就给你扔个 2 ,你删除了10条数据,他就给你个 10 ,但是啊,你要是执行查数据的操作,他给你个啥呢?比如:你要查一个名字叫 ChrishTheYouth 的人,那他给你啥呢,答案是: -1 ,为啥?因为,这表中的数据没变化啊,半行都没变化,指望他给你个啥呢!所以,我们在执行增、删、改的sql语句时才能使用这个方法,查的操作就只能借助下面两个方法了。

(2)ExecuteScalar();这个书上是这么写的 ==》返回的是一个 对象(object)类型,返回结果集中的 第一行第一列 的值,什么意思?我的理解是这样的,比如你查一个表里面有没有某个人,如果查到了,他就返回这个人所在这一列的第一个字段的值(通常是id之类的),所以啊,这条语句多用于你查的内容只有那么一条,比如登录的时候,你查某个人在不在表里,结果查出来这个人这一列,那他就返回这一列的这个id给你。

举个例子,看这条sql语句:

select count(*) from TbAreas

这条语句在数据库查到的内容是这样的,看图:

ado.net的简单数据库操作(一)

 

我们用ExecuteScalar()就获得了查询结果的第一行第一列,也就是这个54;

再看一个:

select * from TbAreas where TbAreas.areaName = '天津市'

 

 查询结果是:

ado.net的简单数据库操作(一)

而用ExecuteScalar()返回到的就是这个areaId.这么讲应该就懂了吧。在看看第三个:

(3)ExcuteReader():上一个讲的是,当查询单个记录时使用的方法,那么如果我要查询一个表中所有的数据,还要把他显示出来,该怎么办呢?哈哈,那就要用到这里的ExcuteReader()方法啦。这个方法返回的是个类型化的DataReader对象,你查的时候,不管查到了啥,都给你返回个DataReader,但是,别以为这个DataReader里面有数据,这里啥也没有??啊?啥也没有,那你返回这个给我干啥?别急,听我讲,其实啊,你查询的内容都在数据库的内存里存着在,但是这个里面的内容你怎么拿呢?就通过DataReader来拿,这个DataReader啊,它不是一个袋子,在里面装东西,它不是袋子,他是一个人,是一个帮手,是一个纽带,你只能通过这个东西的帮忙,才能把你查询的数据从数据库内存里拿过来。这么说,应该懂了吧。啥??还不懂,那我也没辙了,推荐看看这个博客:

 

上面就是数据库操作的三个方法啦。接下来,我想讲一下,这个比较复杂的ExcuteReader()是怎么用的,主要是加深自己的理解和印象吧。

ExcuteReader()的用法:

还是写一个实例,结合一个简单实例来说怎么使用这个东西,怎么查数据,怎么把查到的数据取出来。先看代码:

 

using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ado801am_ConnectSql
{
    class Program
    {
        static void Main(string[] args)
        {
            string conStr = "Data Source = acer-pc;Initial Catalog = FirstDB;Integrated Security = true";//数据库连接字符串
            using (SqlConnection con = new SqlConnection(conStr)) //连接数据库实例
            {
                string sql = "select * from TbClass";//sql语句字符串
                using (SqlCommand cmd = new SqlCommand(sql,con)) //执行sql语句实例
                {
                    con.Open();//打开数据库连接
                    using (SqlDataReader reader = cmd.ExecuteReader())
                    {
                        //查询返回的结果是一个SqlDataReader类型对的对象,这个对象就是reader
                        //判断查询结果中是否有数据
                        if (reader.HasRows) //reader.HasRows的返回值是bool类型变量,有数据则返回true,无数据则返回false
                        {
                            while (reader.Read()) //reader.Read()把光标读取的光标放在表的第一行,然后每循环一次,向下移动一行,直到遍历完所有行,返回false
                            {
                                for (int i = 0; i < reader.FieldCount; i++)
                                {
                                    Console.Write(reader[i] + "       ");
                                }
                                Console.WriteLine();//换行
                            }
                            Console.ReadKey();
                           
                        }
                        else
                        {
                            Console.WriteLine("未查到任何数据");
                        }                   

                    }
                        
                }

            }
        }

    }
}

 

然后看一下结果和表里的内容是否一致:

ado.net的简单数据库操作(一)ado.net的简单数据库操作(一)

显然,查询结果是一致的。

  下面具体说一下这个程序里几个点:

(1)reader.HasRows:这个方法的功能就是先看看数据库中有没有查询到你需要的数据,有就返回true,没有就返回false;

(2)reader.Read():这个方法就相当与一个指针,它最开始指向第一行,然后依次向后移动,循环一次移动一次,指到那一行,你就可以读那一行的数据,指导所有行都指完了,它就返回一个false,然后退出这个循环。

(3)reader.FieldCount:这个东西的作用是 ==》获取当前行中的列数;

上面的实例中,也可以不用for循环去取某个行中的各个数据,而是直接把每个每个位置的数据取出来,这样做的话需要指导每个列的数据类型,如下所示:

  while (reader.Read())
  {
                               
        Console.Write(reader.GetInt32(0) + "   ");
        Console.Write(reader.GetString(1) + "   ");
        Console.Write(reader.GetString(2) + "    ");

        Console.WriteLine();//换行
    }
  Console.ReadKey();

 

运行结果如图:

ado.net的简单数据库操作(一)

这种reader.GetXXX()的写法有一个问题需要注意,那就是如果数据表中的数据为null,那么就会报出异常,因此在使用这个的时候需要对是否为空进行一个判断,判断方法如下:

 Console.Write( reader.IsDBNull(2)?"NULL" : reader.GetString(2));

 

 先判断是否为null,如果为null,则输出NULL,如果不为null,则输出存在的那个值,我修改了刚才的表,是其中有几个值为空,然后分别看看查询的结果:

数据库中的表:

ado.net的简单数据库操作(一)

 

A、添加了null校验的结果

ado.net的简单数据库操作(一)

 

ado.net的简单数据库操作(一)

 

 B.不添加校验的结果:

ado.net的简单数据库操作(一)

 好了,关于ado.net数据库的操作今天就说到这里啊,剩下的晚上再写啊。

写的东西比较浅,没什么含量,太菜了,有什么失误的地方,希望看到的同学可以留言告知,谢谢!

QQ:3074596466