摘要:接下来的几篇博客将要讲到如何使用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登录方式:

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

这种方式就这么写

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 引入),怎么写?看下面

 using (SqlConnection con = new SqlConnection(constr))
{ }

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("关闭连接");
}
}
}

第二部分、数据库操作

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

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

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

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

再看一个:

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

查询结果是:

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

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

上面就是数据库操作的三个方法啦。接下来,我想讲一下,这个比较复杂的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 = ; i < reader.FieldCount; i++)
{
Console.Write(reader[i] + " ");
}
Console.WriteLine();//换行
}
Console.ReadKey(); }
else
{
Console.WriteLine("未查到任何数据");
} } } }
} }
}

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

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

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

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

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

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

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

  while (reader.Read())
{ Console.Write(reader.GetInt32() + " ");
Console.Write(reader.GetString() + " ");
Console.Write(reader.GetString() + " "); Console.WriteLine();//换行
}
Console.ReadKey();

运行结果如图:

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

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

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

数据库中的表:

A、添加了null校验的结果

B.不添加校验的结果:

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

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

QQ:3074596466

ado.net的简单数据库操作(一)的更多相关文章

  1. ado.net的简单数据库操作(二)之封装SqlHelperl类

    今天我书接上回,接着昨天的ado.net的数据库操作的相关知识来讲哈! 从上篇文章给出的实例来看,你一定会发现,操作数据库其实还挺麻烦的,就连一个最简单的数据库操作语句都要包括 定义数据库连接字符串. ...

  2. ado.net的简单数据库操作(三)——简单增删改查的实际应用

    果然,在犯困的时候就该写写博客,写博客就不困了,哈哈! 上篇我记录了自己的SqlHelper的开发过程,今天记录一下如何使用这个sqlhelper书写一个具有简单增删改查的小实例啦. 实例描述:在数据 ...

  3. ADO.NET 使用通用数据库操作类Database (SQL Server)

    一.Web.config配置 <connectionStrings> <add name="constr_name" connectionString=" ...

  4. 数据库操作(ADO)

    QTP工具本身自带有数据查询和验证功能,但是使用的人会感觉这个功能使用起来比较麻烦,灵活性和复用性较低,于是我们选择了用脚本调用ADO组件实现数据库的操作,现总结下工作中用到的数据库操作,代码如下: ...

  5. ADO.Net对Oracle数据库的操作【转载】

    一 ADO.Net简介 访问数据库的技术有许多,常见的有一下几种:开放数据库互联(ODBC).数据访问对象(DAO).远程数据对象 (RDO). ActiveX数据对象(ADO).我们今天主要要学习A ...

  6. VC与ADO数据库操作

    VC与ADO数据库操作 学研部的同志们,大家好! 想开一次学习会,实习时间冲突了,只好把文档发给大家看了.重点推荐李振龙的BMP读图教程! 尤其是大三GIS班的同志,注意了,可能实习用得上的! 一.A ...

  7. 【转】ADO.Net对Oracle数据库的操作

    一 ADO.Net简介 [转自网络,收藏学习] 访问数据库的技术有许多,常见的有一下几种:开放数据库互联(ODBC). 数据访问对象(DAO).远程数据对象(RDO). ActiveX数据对象(ADO ...

  8. ADO.NET之断开数据连接的数据库操作

    在ADO.NET对数据库操作时有两种方式一种时与数据库实时连接,第二种时断开连接的操作. 断开连接的操作使用SqlDataAdapter来实现,我们要把数据库中的表数据加载到winform中的data ...

  9. 【知识必备】ezSQL,最好用的数据库操作类,让php操作sql更简单~

    最近用php做了点小东东,用上了ezSQL,感觉真的很ez,所以拿来跟大家分享一下~ ezSQL是一个非常好用的PHP数据库操作类.著名的开源博客WordPress的数据库操作就使用了ezSQL的My ...

随机推荐

  1. Python练手例子(9)

    49.使用lambda来创建匿名函数. #python3.7 MAXIMUM = lambda x,y : (x > y) * x + (x < y) * y MINIMUM = lamb ...

  2. 初学spring boot 一

    建立maven项目,在prom.xml中导入依赖 <parent> <groupId>org.springframework.boot</groupId> < ...

  3. 微软75亿收购Github,微软以开发者为中心的初心不变

    前天关于微软要收购 GitHub 的消息传出后,很多人都纷纷讨论,希望 GitHub 能够独立存在,不被任何大厂收购,可是 GitHub 也要生存啊.那又有人说:希望是 Google 来收购 GitH ...

  4. 琐事集 vol 2

    vol 2-0 宝宝,你是不是该看书咯? 她正瘫在沙发上看剧 我刚提起看书,她惊恐地看了看我 然后眼白一翻,彻底地瘫平了 宝宝? “宝宝睡着了.” 你下周就要考护师了!很难得,她认真地睁开眼,信誓旦旦 ...

  5. php.ini中文翻译版--转载

    ;;;;;;;; ; 警告 ; ;;;;;;;;;;; ; 此配置文件是对于新安装的PHP的默认设置. ; 默认情况下,PHP使用此配置文件安装 ; 此配置针对开发目的,并且*不是*针对生产环境 ; ...

  6. URL跳转与webview安全浅谈

    URL跳转与webview安全浅谈 我博客的两篇文章拼接在一起所以可能看起来有些乱 起因 在一次测试中我用burpsuite搜索了关键词url找到了某处url我测试了一下发现waf拦截了指向外域的请求 ...

  7. [Swift]LeetCode53. 最大子序和 | Maximum Subarray

    Given an integer array nums, find the contiguous subarray (containing at least one number) which has ...

  8. [Swift]LeetCode112. 路径总和 | Path Sum

    Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all ...

  9. [Swift]LeetCode622. 设计循环队列 | Design Circular Queue

    Design your implementation of the circular queue. The circular queue is a linear data structure in w ...

  10. [Swift]LeetCode769. 最多能完成排序的块 | Max Chunks To Make Sorted

    Given an array arr that is a permutation of [0, 1, ..., arr.length - 1], we split the array into som ...