ADO.NET 基本操作
概要
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 基本操作的更多相关文章
- ADO.NET基本操作(CRUD、Procedure、Transaction)
模型沿用上篇博客所提到的学生.教师.课程,以详细的代码进行演示. 增删改查 添加学生.教师.课程 using System.Data.SqlClient; namespace Test { class ...
- 基于Quartz.net的远程任务管理系统 二
紧接着上一篇.上一篇讲了表设计与ADO.Net基本操作.接下来,就来说说怎么动态来添加Job任务及清理过期任务吧. 首先,先理一下思路,做事情要先把思绪理清了,然后下手就快准狠了.下面是我的思路:做一 ...
- c# 常用数据库封装
我不为大家贴代码了,没有意思,有点多,我主要给大家介绍一下,源码会上传CSDN和GIT:我定义了一个ADO.NET操作接口,所有按照接口封装 1.sqlite数据库(需要SQLite.Interop. ...
- ADO.NET基础巩固-----连接类和非连接类
最近的一段时间自己的状态还是不错的,早上,跑步,上自习看书,下午宿舍里面编程实战,晚上要么练习代码,要么去打球(在不打就没机会了),生活还是挺丰富的. 关于C#的基础回顾就先到前面哪里,这 ...
- C# ADO.NET编写简单的图书馆管理软件
使用软件: Microsoft SQL Server 2012 Microsoft Visual Studio 2012 本文地址: http://www.cnblogs.com/go2bed/ 参考 ...
- ado.net的简单数据库操作(三)——简单增删改查的实际应用
果然,在犯困的时候就该写写博客,写博客就不困了,哈哈! 上篇我记录了自己的SqlHelper的开发过程,今天记录一下如何使用这个sqlhelper书写一个具有简单增删改查的小实例啦. 实例描述:在数据 ...
- ADO.NET 【类库】【与数据库的连接】
ADO.NET是什么,有什么用 数据库访问技术 ado.net可让开发人员以一致的方式存取资料来源, 资料共用的消费者应用程序可使用ado.net 来连接至这些资料来源,并且撷取.处理及更新其中所含的 ...
- [asp.net入门]利用ADO.NET处理数据的简单之处
由于项目需要,要往数据库中导入一些历史数据,而这些历史数据都是线下人工记录的,所以有很多不规范的地方,比如:同一个公司的名称在不同的记录中可能相差那么几个字,而且每条数据不是每个字段都是完整的,等等诸 ...
- VC++ MFC SQL ADO数据库访问技术使用的基本步骤及方法
1.首先,要用#import语句来引用支持ADO的组件类型库(*.tlb),其中类型库可以作为可执行程序 (DLL.EXE等)的一部分被定位在其自身程序中的附属资源里,如:被定位在msado15.dl ...
随机推荐
- CSS设置全局字体
在样式表或者页面head加上这个就可以了.分别是字体,字号,颜色,行高,总之要什么就写什么. body,td,th {font-family: Verdana, Arial, Helvetica, s ...
- 将文件夹中的图像路径自动生成txt文件(便于opencv遍历处理图像)
代码: #include<iostream> #include<vector> #include<io.h> #include<fstream> usi ...
- es6学习日记2
1.字符串扩展 字符串的遍历器接口 for (let codePoint of 'foo') { console.log(codePoint) } // "f" // " ...
- SQLI DUMB SERIES-11
(1)检测构造方式 由此看出输入的用户名以及密码都被一对单引号所包含. 方法一: (2) 模拟真实环境,以用户的身份登录. (3)用burp抓包.开启抓包,输入用户名和密码,会自动跳到这个页面,右键, ...
- Okhttp、Volley和Gson的简单介绍和配合使用
转载自:http://www.apkbus.com/home.php?mod=space&uid=784586&do=blog&id=61255 1.okhttp是一个高效的. ...
- POI导出Execl文件,使JAVA虚拟机OOM
由于在项目中使用POI导出execl,导致JAVA虚拟机OOM,采用以下方式解决问题: 原先方式: g_wb = new XSSFWorkbook(sourceFile.getInputStream( ...
- ab压力测试nginx
centos7系统: yum install httpd-tools -y #安装ab压力测试工具
- MVC 模式
1.MVC 模式简介 MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式.这种模式用于应用程序的分层开发.Model(模型):模型代表一个存取数据的对象或 JAV ...
- Docker安装(一)
环境:CentOS release 6.9 (Final) 1.检查环境是否支持安装docker 1)系统内核是否是3.8或更高版本 uname -a (这个安装不了,内核版本不够) Linux ...
- Docker修改本地镜像与容器的存储位置
这个方法里将通过软连接来实现. 首先停掉Docker服务: systemctl restart docker或者service docker stop 然后移动整个/var/lib/docker目录到 ...