ASP.NET 与数据库知识点(二)连接池

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必须打开下才能执行;

猜你喜欢

转载自blog.csdn.net/m0_46454966/article/details/127480551