SQL Server -- 回忆笔记(三):ADO.NET之C#操作数据库
SQL Server知识点回忆篇(三):ADO.NET之C#操作数据库
1.连接数据库
(1)创建连接字符串:
使用windows身份验证时的连接字符串:
private string conStr="Data Source=MyTestDB;Initial Catalog=tbUsers;Integrated Security=True";
使用用户名和密码时的连接字符串:
private string conStr="Data Source=MyTestDB;Initial Catalog=tbUsers;uid=sa;pwd=test";
(2)创建连接对象:
SqlConnection con=new SqlConnection(Constr);
(3)打开连接:
con.Open();
(4)关闭连接,释放资源:
强烈建议在使用完连接时一定要关闭连接,以便连接可以返回到ADO.NET连接池中。
con.Close();
con.Dispose();
2. 连接数据库执行sql语句 -- ExecuteNonQuery()的使用
.NET Framework 提供的 SqlCommand 对象,用于执行SQL语句。
调用ExecuteNonQuery()方法执行sql语句,返回一个 int 类型的数据,值是影响的行数,在使用insert,update, delete语句时可调用该方法执行sq语句。
public static int ExeNoQuery(string sql)
{
using (SqlConnection con=new SqlConnection(Constr))
{
using (SqlCommand cmd=new SqlCommand(sql,con))
{
con.Open();
return cmd.ExecuteNonQuery();
}
}
}
3. 连接数据库执行sql语句 -- ExecuteScalar()的使用
调用 ExecuteScalar() 方法执行sql语句,返回一个 object 类型的数据,值是执行sql语句的结果,在使用聚合函数时可调用该方法执行sq语句。
public static object ExeScalar(string sql)
{
using (SqlConnection con = new SqlConnection(Constr))
{
using (SqlCommand cmd = new SqlCommand(sql, con))
{
con.Open();
return cmd.ExecuteScalar();
}
}
}
4. 连接数据库执行sql语句 -- ExecuteReader()的使用
使用ExecuteReader()方法执行sql语句,返回值为SqlDataReader类型,可以从返回的SqlDataReader中一条一条取数据,该方法用于查询多行多列结果时。
SqlDataReader只读取数据,只能前进不能后退。使用SqlDataReader时必须保证连接是打开状态。
SqlDataReader使用完毕后,要把SqlDataReader关闭,释放。
public static SqlDataReader ExeReader(string sql)
{
SqlConnection con = new SqlConnection(Constr);
SqlCommand cmd = new SqlCommand(sql, con); con.Open();
SqlDataReader reder = cmd.ExecuteReader(CommandBehavior.CloseConnection);
return reder;
}
5. 连接数据库执行sql语句 -- SqlDataAdapter的使用
使用SqlDataAdapter,可以将查询的结果填充在datatable中返回。
public static DataTable ExeAdapter(string sql)
{
using (SqlConnection con =new SqlConnection(Constr))
{
using (SqlCommand cmd = new SqlCommand(sql,con))
{using (SqlDataAdapter da = new SqlDataAdapter(cmd))
{
DataTable dt = new DataTable();
con.Open();
da.Fill(dt);
return dt;
}
}
}
}
6. 使用带参数的 sql 语句
为了安全的使用sql语句,防止sql注入,请不要直接使用用户输入的值来拼接sql语句,应使用参数的方式将值传入sql语句执行。
带参数的sql语句:
string strsql = "insert into tbUsers(UserName,Age,Email,DepartmentID) values(@uName,@uAge,@uEmail,@uDeptID)";
SqlParameter[] ps = new SqlParameter[] {
new SqlParameter("@uName",SqlDbType.VarChar) {Value="小明"},
new SqlParameter("@uAge",SqlDbType.Int) {Value= },
new SqlParameter("@uEmail",SqlDbType.VarChar) {Value="xiaoming@qq.com" },
new SqlParameter("@uDeptID",SqlDbType.VarChar) {Value="" } }; int iRow = ExeNoQuery(strsql, ps); if (iRow>)
{
Console.WriteLine("影响的行数:{0}",iRow);
} Console.ReadKey();
执行带参数的sql语句:
public static int ExeNoQuery(string sql, SqlParameter[] para)
{
using (SqlConnection con = new SqlConnection(Constr))
{
using (SqlCommand cmd = new SqlCommand(sql, con))
{
if (para != null)
{
cmd.Parameters.AddRange(para);
}
con.Open();
return cmd.ExecuteNonQuery();
}
}
}
7. ADO.NET连接池
(1) 连接池使新连接必须打开的次数得以减少。
(2) 启用ADO.NET连接池后,创建一个连接对象,不会立刻关闭。后面的其他连接对象可以直接使用。
(3) 连接池中的对象过一段时间没有被访问会自动销毁。(如果空闲时间达到大约 4-8 分钟,或池进程检测到与服务器的连接已断开,连接池进程会将该连接从池中移除。)
(4) 默认情况下,在 ADO.NET 中连接池是启用的。
SQL Server -- 回忆笔记(三):ADO.NET之C#操作数据库的更多相关文章
- SQL Server -- 回忆笔记(五):T-SQL编程,系统变量,事务,游标,触发器
SQL Server -- 回忆笔记(五):T-SQL编程,系统变量,事务,游标,触发器 1. T-SQL编程 (1)声明变量 declare @age int (2)为变量赋值 (3)while循环 ...
- SQL Server -- 回忆笔记(四):case函数,索引,子查询,分页查询,视图,存储过程
SQL Server知识点回忆篇(四):case函数,索引,子查询,分页查询,视图,存储过程 1. CASE函数(相当于C#中的Switch) then '未成年人' else '成年人' end f ...
- SQL Server -- 回忆笔记(二):增删改查,修改表结构,约束,关键字使用,函数,多表联合查询
SQL Server知识点回忆篇(二):增删改查,修改表结构,约束,关键字使用,函数,多表联合查询 1. insert 如果sql server设置的排序规则不是简体中文,必须在简体中文字符串前加N, ...
- SQL Server -- 回忆笔记(一):初见数据库
SQL Server知识点回忆篇(一):初见数据库 1. 主键 primary key 唯一标识, 不会重复的值才会用来当做主键使用. 表可以没有主键,但建议每张表都有主键. 2. 数据冗余 ...
- Microsoft SQL Server Compact 4.0&&ADO.NET Entity Framework 4.1&&MVC3
最近重新查看微软MvcMusicStore-v3.0的源代码,发现忽略了很多重要的东西,特别是数据访问那一部分. 首先Microsoft SQL Server Compact 4.0 详细的介绍和下载 ...
- 从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn)
从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://w ...
- SQL Server中的三种Join方式
1.测试数据准备 参考:Sql Server中的表访问方式Table Scan, Index Scan, Index Seek 这篇博客中的实验数据准备.这两篇博客使用了相同的实验数据. 2.SQ ...
- 【SQL Server学习笔记】Delete 语句、Output 子句、Merge语句
原文:[SQL Server学习笔记]Delete 语句.Output 子句.Merge语句 DELETE语句 --建表 select * into distribution from sys.obj ...
- Sql Server之使用T_SQL创建,修改,查看数据库信息
一.使用Transact_SQL创建数据库 Transact_SQL语法如下: create database database_name [ on [primary] [<fi ...
随机推荐
- the python challenge闯关记录(0-8)
0 第零关 2**38 = 274877906944 下一关的url:http://www.pythonchallenge.com/pc/def/274877906944.html 1 第一关 移位计 ...
- 【Impala篇】---Hue从初始到安装应用
一.前述 Cloudera公司推出,提供对HDFS.Hbase数据的高性能.低延迟的交互式SQL查询功能.基于Hive使用内存计算,兼顾数据仓库.具有实时.批处理.多并发等优点 是CDH平台首选的PB ...
- 【netty】(1)---BIO NIO AIO演变
BIO NIO AIO演变 Netty是一个提供异步事件驱动的网络应用框架,用以快速开发高性能.高可靠的网络服务器和客户端程序.Netty简化了网络程序的开发,是很多框架和公司都在使用的技术. Net ...
- phpStrom映射代码
- 《你必须知道的.NET》读书实践:一个基于OO的万能加载器的实现
此篇已收录至<你必须知道的.Net>读书笔记目录贴,点击访问该目录可以获取更多内容. 一.关于万能加载器 简而言之,就是孝顺的小王想开发一个万能程序,可以一键式打开常见的计算机资料,例如: ...
- 把路由器改装成git服务器(OpenWRT环境的GIT服务器搭建)
在单位中,通常都标配了git服务器用来管理代码. 对于家庭或者小办公室,这种方式有点不经济.当然如果是开源项目就简单了,刚刚被微软收购的github是理想选择.但如果没有打算开源,我今天的话题可能对你 ...
- WebAssembly完全入门——了解wasm的前世今身
前言 接触WebAssembly之后,在google上看了很多资料.感觉对WebAssembly的使用.介绍.意义都说的比较模糊和笼统.感觉看了之后收获没有达到预期,要么是文章中的例子自己去实操不能成 ...
- Spring Boot分布式系统实践【扩展1】shiro+redis实现session共享、simplesession反序列化失败的问题定位及反思改进
前言 调试之前请先关闭Favicon配置 spring: favicon: enabled: false 不然会发现有2个请求(如果用nginx+ 浏览器调试的话) 序列化工具类[ ...
- Java 8的用法(泛型接口,谓词链)
1.泛型接口 我们举个例子,以前来看一下JPA定义的写法: Specification接口为: public interface Specification<T> { Predicate ...
- LeetCode专题-Python实现之第28题: Implement strStr()
导航页-LeetCode专题-Python实现 相关代码已经上传到github:https://github.com/exploitht/leetcode-python 文中代码为了不动官网提供的初始 ...