之前在sql server configuration manager中的native client 11.0 configuration中设置client protocol的keep alive的时间的时候,发现并不起作用,我即使将keep alive的时间从默认的30000ms改成了25000ms,但是我用netmon测试的时候发现每一次客户端的keepalive还是没30秒发送一次。
当时以为我改了sql server configuration manager中的keepalive,但是没有修改相应的注册表,所以我去注册表下查看相应的内容,keepalive所对应的注册表键值如下:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SNI11.0\tcp\Property2
发现Property2中的value已经是25000ms了。那么证明我前面的假设是错误的。
后来经过我SNI10.0上面的value是30000ms,因此怀疑是不是我在cmd中输入的sqlcmd用的是native client10.0的程序。使用sqlcmd连接一个错误的数据源会提示错误信息, 确实用的是10.0的版本。之所以有10.0的版本是因为之前安装visual stuido 2010的时候附带安装了sql server 2008 express,那个时候给我默认安装了sql native client 10.0。现在要使用11.0的解决方法是修改环境变量中的path,将11.0的路径放在10.0的前面就可以了。
还有就是native client有32位跟64位的区别,我这里直接在path中将32位的,跟10.0版本的全部删除了。