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 ...
随机推荐
- 解决VS2010使用mscomm控件无法接收数据的问题【转】
之前有用过VC6的mscomm控件.所以这次也想继续用此控件实现此功能,结果没想到刚一上手还真的绕了不少弯子.主要是因为VC2010下对mscomm控件的添加,以及对控件成员变量的添加有点小繁琐,特此 ...
- MyEclipse 启动慢,优化
找到安装目录,修改myeclipse.ini 文件: -Xms2048m -Xmx8192m -XX:MaxPermSize=512m -XX:ReservedCodeCacheSize=256m
- 新建一个self hosted Owin+ SignalR Project(2)
ASPNET SignalR是为ASP.NET开发人员提供的一个库,可以简化开发人员将实时Web功能添加到应用程序的过程.实时Web功能是指这样一种功能:当所连接的客户端变得可用时服务器代码可以立即向 ...
- # 20175120 2018.3.10 《Java程序设计》第2周学习总结
## 教材学习内容总结第二章内容1.标识符第一个字符不能是数字字符不能是关键字和true\false\null2.8个基本数据类型boolean int byte short long float d ...
- 加载XML文件到系统中
using System;using System.Data;using System.IO;using System.Xml;using System.Collections.Generic; na ...
- c#泛型TryParse类型转换
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.R ...
- PythonStudy——Python 内置函数 Built-in function
内置方法:Python中声明每一个类系统都会加上一些默认内置方法,提供给系统调用该类的对象时使用.比如需要实例化一个对象时,需要调用该类的init方法:使用print去打印一个类时,其实调用的是str ...
- Nginx自动安装脚本
添加一个install_nginx.sh脚本 版本一:(以下脚本为在线自动化安装) #!/bin/bash mkdir /soft cd /soft wget -c http://nginx.org/ ...
- 在windows上使用ssh秘钥连接git服务器
git部署在centos7上 安装好git后,新建一个用户test(注意要加入git用户组)配置ssh秘钥登录,我的另一篇博客有写配置步骤 重点的地方是在windows系统上使用秘钥登录git服务器 ...
- visual studio2017----编码和行尾
在 Visual Studio 中,以下字符将解释为换行符: CR LF:回车符 + 换行符,Unicode 字符 000D + 000A LF:换行符,Unicode 字符 000A NEL:下一行 ...