sql连接语句详解

关于sql连接语句中的Integrated Security


integrated security 即:Security Support Provider Interface
设置Integrated Security为 True 的时候,

Integrated Security 可以设置为: True, false, yes, no ,sspi ,其中sspi相当于 True,建议用sspi。

当Integrated Security=SSPI 时,表示以当前WINDOWS系统用户身份去登录SQL SERVER服务器,如果SQL SERVER服务器不支持WINDOWS系统用户方式登录时,就会出错。
当Integrated Security=SSPI 时,连接语句前面的 UserID, PW 是不起作用的,只有设置为 False 或省略该项的时候,才按照 UserID, PW 来连接。

initial catalog与database的区别是什么
        Initial Catalog, DataBase 两者没有任何区别只是名称不一样

 

Integrated   Security     -   或   -    Trusted_Connection  

 

ADO.net   中数据库连接方式
System.Data.SqlClient.SqlConnection
常用的一些连接字符串:

"Server=(local);              Integrated Security=SSPI; database=Pubs"

"server=(local)/NetSDK; Integrated Security=SSPI; database=pubs“

"Data Source=localhost; Integrated Security=SSPI; Initial Catalog=Northwind;“

"data source=(local); initial catalog=xr; integrated security=SSPI; persist security info=False; workstation id=XURUI; packet size=4096; "

"Persist Security  Info=False; Integrated Security=SSPI; database=northwind; server=mySQLServer“

"uid=sa;pwd=passwords;initial   catalog=pubs;data   source=127.0.0.1;Connect   Timeout=900“

"Data Source=(local);Integrated security=SSPI;Initial Catalog=Taxi;"

 "Data Source=(local);User Id=sa;Password=123;Initial Catalog=Taxi;";

"server=localhost; database=testing; user=sa; password=123"

 

 

连接字符串中的一些属性
Connection lifetime 连接生存时间,默认为0,表示无限长,单位为秒.在SQL集群环境中我们才设置为具体的数值.
Connection timeout 连接生成时间,默认为15秒,通俗的讲当你conn.Open等15秒后还没连接成功,那么就会抛出一个连接超时的错误,这也是为什么其他错误来的那么突然,而数据库连接超时错误,非要你等15秒的原因了.
Pooling 是否使用连接池, 默认是起用的,使用Pooling=false来禁止.
Min Pool Size,Max Pool Size 默认情况下最小是0,最大是100.
关于pooling属性在上面所有的连接字符串中多是默认开启的,连接池能有效的提高数据库访问性能,因为创建一个连接需要消耗很多资源,尤其是进行异地访问时(一般指局域网,最好不要进行跨internet的数据库访问)更加如此,因此你在多数情况下不需要显式的禁止(也许你没在意微软一直帮你开通着), 事实上在你使用 conn.open() ,conn.close() 多少数情况下不是真的打开一个连接,而是向连接池中取一条可用连接,跟归还一条连接,conn.open操作只有在池中没有可用连接时才会创建一条连接,当然如果池中可用接数目达到Max Pool Size时,他将不再创建新的连接,而是等待一条可用连接的到来,这个时间是Connection timeout. 当然你的conn.Open操作涉及的连接池,取决于你的连接字符串,比如:
"Data Source=127.0.0.1/SQL2K;Initial Catalog=MyDBA;Integrated
Security=SSPI"


"Data Source=127.0.0.1/SQL2K;Initial Catalog=MyDBA;Integrated
Security=SSPI
;" ,注意后面多了";"
会开启两个独立的连接池,ADO.NET 判断字符串是否相同的依据是对字符串进行2进制的比较,所以任何变动(空格,大小写)都会被判断为不同的连接字符串.
有如下代码
-----------------------------------
string strConn="Data Source=127.0.0.1/SQL2K;Initial Catalog=MyDBA;Integrated
Security=SSPI
;";
for(int i=0;i<10;i++){
SqlConnection conn=new SqlConnection(strConn);
conn.Open();
conn.Close()
}

string strConn="Data Source=127.0.0.1/SQL2K;Initial Catalog=MyDBA;Integrated
Security=SSPI
;";
for(int i=0;i<10;i++){
strConn +=" "; //空格
SqlConnection conn=new SqlConnection(strConn);
conn.Open();
conn.Close()
}
两段代码分别运行,看企业管理器->管理->进程信息(请刷新先) ,可以看到前面的只启用了一个进程,而后面的则启用了10个进程,每个进程对应一条连接.前一段代码10个open +close()操作使用的是同一个连接池中的同一个连接,而后一个则开启了10个连接池,每个连接池中有一个连接.

再看下面的代码
            for (int i = 0; i <= 10; i++)
            {
                Thread t = new Thread(new ThreadStart(Command));
                t.Start();
            }
---------------------
//Command定义
private void Command(){
string strConn="Data Source=127.0.0.1/SQL2K;Initial Catalog=MyDBA;Integrated
Security=SSPI
;";
Sqlconnection conn=new SqlConnection(strConn);
SqlCommand cmd=new SqlCommand("一个运行比较长的查询",conn);
conn.Open();
cmd.ExecuteNonQuery();
  
conn.Close()
}
运行后可以看,企业管理器->管理->进程信息里会开启10个到MyDBA数据库的连接进程,但是需要注意的是,这10个进程是属于同个连接池的,为了证明这一点你可以将上面的连接字符串改为
private void command(){
string strConn="Data Source=127.0.0.1/SQL2K;Initial Catalog=MyDBA;Integrated
Security=SSPI
;Max pool Size=5;"; //加了Max Pool Size=5;
SqlConnection conn=new SqlConnection(strConn);
SqlCommand cmd=new SqlCommand("一个运行比较长的查询",conn);
conn.Open();
cmd.ExecuteNonQuery();
  
conn.Close()
}
结果可以看到他只开启了5个到MyDBA数据库的连接,这证明他们是同个连接池的.当然这里能成功演示的前提是,cmd执行的任务时间要在15秒内,不然会出现后5个线程连接超时,另外使用SQL2000 的跟踪工具(SQL2005中是,SQL Server Profiler)是你观察以上实验的一个绝好的工具!

 

英文详细说明:

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectionstring.aspx

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值