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 ...
随机推荐
- Alpha冲刺5
前言 队名:拖鞋旅游队 组长博客:https://www.cnblogs.com/Sulumer/p/9989898.html 作业博客:https://edu.cnblogs.com/campus/ ...
- 北大poj- 1006
生理周期 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 133189 Accepted: 42577 Descripti ...
- openFileDialog的使用
这两天应用了一下openFileDialog,做的是上传的功能,在打开页面的时候进行的一系列操作虽说远远没有asp.net的上传控件好使,但是学习起来也是蛮还用的,下面是一个简单的应用 //点击浏览按 ...
- DAY 13 开放封闭原则
装饰器: 即是用一个函数去拓展另一个函数,同时遵循开放封闭原则 开放封闭原则 对修改关闭,对拓展开放 不允许修改源代码以及调用方式 以下是无参函数的基本格式 def outer(func): def ...
- 剑指Offer 42. 和为S的两个数字 (其他)
题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 输出描述: 对应每个测试案例,输出两个数,小的先输出. 题目 ...
- Linux 驱动——Led驱动1
led_drv.c驱动文件: #include <linux/module.h>#include <linux/kernel.h>#include <linux/init ...
- 实验楼 MySQL 基础课程 挑战:搭建一个简易的成绩管理系统的数据库
传送门:https://www.shiyanlou.com/courses/running 介绍 现需要构建一个简易的成绩管理系统的数据库,来记录几门课程的学生成绩.数据库中有三张表分别用于记录学生信 ...
- Python学习笔记第二十六周(Django补充)
一.基于jQuery的ajax实现(最底层方法:$.jax()) $.ajax( url: type:''POST“ ) $.get(url,[data],[callback],[type]) #c ...
- Java并发--Java线程面试题 Top 50
原文链接:http://www.importnew.com/12773.html 不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题.Java语言一个重要的特点就是内置了对并发的支持,让Ja ...
- jmeter压测、操作数据库、分布式linux下运行、webservice接口测试、charles抓包
一.jmeter压测 在线程组中设置好,然后添加http请求,t添加聚合报告查看压力测试结果,如图: 一般压测时间10-15分钟,如果是稳定性测试,一般n*12小时,这些并发用户一直在请求. tps: ...