ASP.NET 与数据库知识点(二)连接池
1:为什么要使用连接池?
非常耗时耗力的一件事经历了几个阶段:建立了物理通过与服务器初次握手,分析连接
字符串,身份验证,相当的痛苦,重复利用已有的连接?----连接池
2:连接池是什么?
优化,容器。存放了一定数量的与数据库服务器的物理连接。需要—容器里取出来一条空闲的连接,而不是创建一条新的连接
3:作用:减少了连接数据库的开销,从而提高了应用程序的性能。
4:分类:类别分区,同一时刻同一应用程序域可以有多个不同类型的连接池。
什么来标识区分–进程,应用程序域,连接字符串Windows 标识 共同组成的签名来标识区分。对
同一程序域来说,由连接字符串来区分。打开一条连接,如果这条链接的类型签名与现有的不匹配的连接池,反之则不会创建,它们会共用同一个连接池。
如何分配
根据连接请求的类型,找到与它相匹配的连接池,尽力的分配一条空闲的连接。
有空闲连接,返回这条连接,已用完,创建一个新的连接添加到连接池中,以达到了最大连接数,等待直到有空闲的连接可用。
移除无效连接
不能正确的连接到数据库服务器的连接 连接池存储的与数据库服务器的连接数量是有限的。
无效连接,我们应当移除,浪费连接池空间 连接池管理器会处理无效链接的移除问题。
回收连接
释放使用完的连接?应当即时关闭或释放,conn对象的close Dispose连接回到连接池
Ado.Net默认是 启用连接池的;连接字符串是可以控制连接池的行为的
1:测试连接池的存在
2:三个属性:
Max Pool Size:最大连接数 100
Min Pool Size:最小连接数 0
Pooling是否启用连接池
3:连接池类别区分测试 连接字符串来区分
Sqlcommand 介绍 对SQLServer数据库执行的一个T-Sql语句或存储过程
Sqlcommand对象:Ado.Net中执行数据库命令的对象。
重要属性
Connection:Sqlcommand对象使用的Sqlconnection
CommandText:获取或设置要执行的T-SQL语句或存储过程
CommandType:CommandType.Text–执行的是一个Sql语句
CommandType.StoredProcedure–执行的是一个存储过程
Parameters:SqlCommand对象的命令参数集合 空集合
Transaction:获取或设置要在其中执行的事务;
3:创建
//Sqlcommandd创建
{
string sql = “select *n from UserInfos”;
//1:
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = sql;
cmd.CommandType = CommandType.StoredProcedure;//如果是存储过程必须设置;
//2:
SqlCommand cmd1 = new SqlCommand(sql);
cmd1.Connection = conn;
// 3:sql 语句 连接对象
SqlCommand cmd2 = new SqlCommand(sql, conn);
//4:Connection对象
SqlCommand cmd3 = conn.CreateCommand();
cmd3.CommandText = sql;
//5:
string delSql = "delete from UserInfos where UserId>3";
SqlCommand cmd4 = new SqlCommand(delSql, conn, null);
}
Command执行方法
cmd.ExecuteNonQuery();
cmd.ExecuteScalar();
cmd.ExecuteReader();
ExecuteNonQuery介绍//1.执行T-SQl语句或存储过程,并返回受影响的行数
//命令类型:插入,更新,删除 ----DML
ExecuteNonQuery使用
static void Main(string[] args)
{
int count = 0;
string connStr = "server=.;database=TestBase;uid=sa;pwd=localhost";
using (SqlConnection conn = new SqlConnection(connStr))
{
string uName = "json";
string uPwd = "123";
int age = 24;
int deptId = 3;
//创建命令 T—SQL存储过程
//拼接式SQL 致命的弱点:很容易被SQL注入;
string sql = "insert into UserInfos(UserName,UserPwd,Age,DeptId) values('" + uName + "','" + uPwd + "'," + age + "," + deptId + ")";
//创建执行命令的对象 SqlCommand
SqlCommand cmd = new SqlCommand(sql, conn);
//执行命令
//1.执行T-SQl语句或存储过程,并返回受影响的行数
//命令类型:插入,更新,删除 ----DML
//共有的条件:conn 状态 必须是Open
//连接使用原则,最晚打开,最早关闭;
conn.Open();
count = cmd.ExecuteNonQuery();
conn.Close();
}
if(count > 0)
{
Console.WriteLine("用户信息添加成功!!!");
}
}
}
ExecuteScalar方法
1:介绍 执行查询语句或存储过程,返回查询结果集中的第一行第一列的值,忽略其他行或列
返回的是一个值 null
2:适用于: //适用:作查询,返回一个值 记录数 数据运算而出的结果
有时候插入数据后 想返回自动生成的标识列的值,我们也可以用这个方法;
Conn必须打开下才能执行;