概要

ADO.NET是.NET框架中的重要组件,主要用于完成C#应用程序访问数据库,类似于PHP中的PDO

使用

连接数据库 (Connection对象)

1. 连接字符串

基本语法:数据源(Data Source)+数据库名称(Initial Catalog)+用户名(User ID)+密码(Password)

例如

DataSource=.;Initial Catalog=myDataBase;UserId=myUsername;Password=myPassword;

或者

Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;Trusted_Connection=False;

也可以直接在VS数据库资源管理器中获取连接字符串

2. 连接到数据库 (Connection对象)

Connection对象有两个重要属性:

(1)ConnectionString:表示用于打开 SQL Server 数据库的字符串; 
(2)State:表示 Connection 的状态,有Closed和Open两种状态。

Connection对象有两个重要方法:

(1)Open()方法:指示打开数据库;

(2)Close()方法:指示关闭数据库。

            string str = "Data Source=DESKTOP-3HH8GF6;Initial Catalog=TestDB;Persist Security Info=True;User ID=sa";
//连接数据库,使用using可自动释放资源
using (SqlConnection con = new SqlConnection(str)) {
//打开数据库
con.Open();
//关闭数据库
con.Close();
}

操作数据库(Command对象)

Command对象也称为数据库命令对象,Command对象主要执行包括添加、删除、修改及查询数据的操作的命令。也可以用来执行存储过程。用于执行存储过程时需要将Command对象的CommandType 属性设置为CommandType.StoredProcedure,默认情况下CommandType 属性为CommandType.Text,表示执行的是普通SQL语句。

Command主要有三个方法:

ExecuteNonQuery():执行一个SQL语句,返回受影响的行数,这个方法主要用于执行对数据库执行增加、更新、删除操作,注意查询的时候不是调用这个方法。用于完成insert,delete,update操作,类似于PDO中exec()

            using (SqlConnection con = new SqlConnection(str)) {
//打开数据库
con.Open(); //string sql = "insert into Book values('三国演义','魏蜀吴的故事',3)"; //增加
//string sql = "delete from Book where BookId = 4"; //删除
string sql = "update Book set BookName = '郭德纲相声选' where BookId = 2"; //修改 SqlCommand cmd = new SqlCommand(sql, con);
//执行sql 返回受影响的行数
int rows = cmd.ExecuteNonQuery();
//关闭数据库
con.Close();
}

ExecuteScalar ()从数据库检索单个值。这个方法主要用于统计操作。ExecuteScalar ()这个方法是针对SQL语句执行的结果是一行一列的结果集,这个方法只返回查询结果集的第一行第一列

executeScalar主要用于查询单行单列的值,如聚合函数(count,max,min,agv,sum),返回object对象,如查询不到返回null

            using (SqlConnection con = new SqlConnection(str)) {
//打开数据库
con.Open(); string sql = "select BookName from Book where BookId = 2";
//string sql = "select count(*) as total from Book"; SqlCommand cmd = new SqlCommand(sql, con);
object res = cmd.ExecuteScalar();
Console.WriteLine(res.ToString()); //关闭数据库
con.Close();
Console.Read();
}

ExecuteReader() 

ExecuteReader:返回一个SqlDataReader对象,可以通过这个对象来检查查询结果,它提供了只进只读的执行方式,即从结果中读取一行之后,移动到另一行,则前一行就无法再用。有一点要注意的是执行之后,要等到手动去调用Read()方法之后,DataReader对象才会移动到结果集的第一行,同时此方法也返回一个Bool值,表明下一行是否可用,返回True则可用,返回False则到达结果集末尾

    class Program
{
static void Main(string[] args)
{
List<Book> Books = new List<Book>();
string str = "Data Source=DESKTOP-3HH8GF6;Initial Catalog=TestDB;Persist Security Info=True;User ID=sa;Password=123";
//连接数据库,使用using可自动释放资源
using (SqlConnection con = new SqlConnection(str)) {
//打开数据库
con.Open(); string sql = "select BookName,BookContent from Book";
using (SqlCommand cmd = new SqlCommand(sql, con)) {
SqlDataReader rows = cmd.ExecuteReader();
if (rows.HasRows) {
//读取一行,同时指针向前移动
while (rows.Read())
{
//rows中返回的是object类型,需要手动转换成需要的类型
Book book = new Book(rows["BookName"].ToString(), rows["BookContent"].ToString());
Books.Add(book);
}
}
} //关闭数据库
con.Close();
Console.Read();
}
}
} class Book {
private string _bookName;
private string _bookContent; public string BookName
{
get
{
return _bookName;
} set
{
_bookName = value;
}
} public string BookContent
{
get
{
return _bookContent;
} set
{
_bookContent = value;
}
} public Book(string name,string content) {
this._bookName = name;
this._bookContent = content;
}
}

 SqlDataAdapter 使用 SqlDataAdapter 可以快速的查询数据库并返回表格,无需new sqlCommend ,然后通过遍历表格拿到数据,SqlDataAdapter 内部也是通过SqlCommend实现的

            string str = "Data Source=DESKTOP-3HH8GF6;Initial Catalog=TestDB;Persist Security Info=True;User ID=sa;Password=123";

            DataTable dt = new DataTable();

            //连接数据库,使用using可自动释放资源
using (SqlConnection con = new SqlConnection(str)) {
con.Open();
string sql = "select * from Book";
using (SqlDataAdapter sda = new SqlDataAdapter(sql, str)) {
//将数据填充到dt中
sda.Fill(dt);
}
//关闭数据库
con.Close();
}
//遍历dt 获取数据
for (int i = ; i < dt.Rows.Count; i++)
{
Console.WriteLine(dt.Rows[i]["BookName"]);
} Console.Read();
}

防SQL注入

与PDO一样,ADO提供sql预处理功能

PDO中使用占位符的方式,ADO也一样

PDO

$sql = "DELETE FROM `books` WHERE id = :id";    //使用占位符代替用户输入的id
$sth = $mysql->prepare($sql); //绑定参数
$sth->execute(array('id'=>$id));

ADO

            string str = "Data Source=DESKTOP-3HH8GF6;Initial Catalog=TestDB;Persist Security Info=True;User ID=sa;Password=123";
//连接数据库,使用using可自动释放资源
using (SqlConnection con = new SqlConnection(str)) {
//使用占位符
string sql = "insert into Book values(@name,@content,@type)";
using (SqlCommand cmd = new SqlCommand(sql, con)) {
//绑定参数
cmd.Parameters.Add(new SqlParameter("@name", "西厢记"));
cmd.Parameters.Add(new SqlParameter("@content", "经典名著"));
cmd.Parameters.Add(new SqlParameter("@type", )); con.Open();
cmd.ExecuteNonQuery();
}
//关闭数据库
con.Close();
}

ADO.NET 基本操作的更多相关文章

  1. ADO.NET基本操作(CRUD、Procedure、Transaction)

    模型沿用上篇博客所提到的学生.教师.课程,以详细的代码进行演示. 增删改查 添加学生.教师.课程 using System.Data.SqlClient; namespace Test { class ...

  2. 基于Quartz.net的远程任务管理系统 二

    紧接着上一篇.上一篇讲了表设计与ADO.Net基本操作.接下来,就来说说怎么动态来添加Job任务及清理过期任务吧. 首先,先理一下思路,做事情要先把思绪理清了,然后下手就快准狠了.下面是我的思路:做一 ...

  3. c# 常用数据库封装

    我不为大家贴代码了,没有意思,有点多,我主要给大家介绍一下,源码会上传CSDN和GIT:我定义了一个ADO.NET操作接口,所有按照接口封装 1.sqlite数据库(需要SQLite.Interop. ...

  4. ADO.NET基础巩固-----连接类和非连接类

          最近的一段时间自己的状态还是不错的,早上,跑步,上自习看书,下午宿舍里面编程实战,晚上要么练习代码,要么去打球(在不打就没机会了),生活还是挺丰富的. 关于C#的基础回顾就先到前面哪里,这 ...

  5. C# ADO.NET编写简单的图书馆管理软件

    使用软件: Microsoft SQL Server 2012 Microsoft Visual Studio 2012 本文地址: http://www.cnblogs.com/go2bed/ 参考 ...

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

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

  7. ADO.NET 【类库】【与数据库的连接】

    ADO.NET是什么,有什么用 数据库访问技术 ado.net可让开发人员以一致的方式存取资料来源, 资料共用的消费者应用程序可使用ado.net 来连接至这些资料来源,并且撷取.处理及更新其中所含的 ...

  8. [asp.net入门]利用ADO.NET处理数据的简单之处

    由于项目需要,要往数据库中导入一些历史数据,而这些历史数据都是线下人工记录的,所以有很多不规范的地方,比如:同一个公司的名称在不同的记录中可能相差那么几个字,而且每条数据不是每个字段都是完整的,等等诸 ...

  9. VC++ MFC SQL ADO数据库访问技术使用的基本步骤及方法

    1.首先,要用#import语句来引用支持ADO的组件类型库(*.tlb),其中类型库可以作为可执行程序 (DLL.EXE等)的一部分被定位在其自身程序中的附属资源里,如:被定位在msado15.dl ...

随机推荐

  1. 关于C++使用将整形转换为字符串进行格式化的问题

    最近使用CTime类获取时间,因为在时间的格式上要求做到统一,所以会对时间信息进行格式化 目的:将时间信息生成为年4位,月2位,日2位,时2位,分2位,秒2位 也就是:2017-02-18 10:42 ...

  2. 蓝牙协议分析(6)_BLE地址类型

    1. 前言 也许关注BLE的同学都注意到了,BLE设备有多种类型的设备地址,如Public Device Address.Random Device Address.Static Device Add ...

  3. echarts双y轴折线图柱状图混合实时更新图

    先看下效果,自己用ps做了张gif图,发现很好玩啊..不喜勿喷 自己下载个echarts.min.js 直接上代码: <!DOCTYPE html><html><head ...

  4. 3.oracle与mysql的区别

    1.自动增长的数据类型处理     MYSQL有自动增长的数据类型,插入记录时不用操作此字段,会自动获得数据值.ORACLE没有自动增长的数据类型,需要建立一个自动增长的序列号,插入记录时要把序列号的 ...

  5. Python全栈之路----三元运算

    · 三元运算又称三目运算,是对简单条件语句的简写,如: 简单条件语句: if 条件成立: val = 1 else: val = 2 改成三元运算: val = 1 if 条件成立 else 2 &g ...

  6. vim编辑Makefile如何使用Tab

    因为用vim编辑代码设置了Tab键为4个空格,但有时候我们需要编写Makefile,必须使用Tab,同时也不想设置set noexpandtab. 其实可以先Ctrl_v组合键,再按Tab键盘,这样我 ...

  7. 同一个windows server 部署多个tomcat

    只需要修改tomcat目录下conf下的server.xml文件即可,修改地方有三个,把下面这几个端口修改了为不同的端口即可,例如我把这几个端口统一减1了 <Server port=" ...

  8. 从gitlab或者github采用git clone和download zip的区别

    不要做伸手党啊大兄弟,这种问题自己稍加理解就知道答案了,实在想不到就上谷歌搜一下嘛,比如这个:git - Github: difference between Clone in desktop and ...

  9. ubuntu拒绝root用户ssh远程登录解决办法

    ubuntu拒绝root ssh远程登录通常情况是ssh设置了禁止root远程登录,解决办法就是:修改ssh配置,然后重启ssh服务即可. vi /etc/ssh/sshd_config 找到并用#注 ...

  10. 剑指offer 2.字符串 替换空格

    题目描述 请实现一个函数,将一个字符串中的每个空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. public class Re ...