
话说上周四,我正准备把一堆数据导进测试库里头,早上还跑得好好的系统,突然就给我撂挑子了。我一双击那个连接,哗一下,弹出来一个红叉叉的错误框,显示连接不上。 第一个念头肯...
话说上周四,我正准备把一堆数据导进测试库里头,早上还跑得好好的系统,突然就给我撂挑子了。我一双击那个连接,哗一下,弹出来一个红叉叉的错误框,显示连接不上。
第一个念头肯定是:密码是不是输错了?
我这人记性不先赶紧把密码重新输了一遍。结果,还是一样,连接失败。当时心里就有点烦躁了,想着这大清早的,别给我整幺蛾子。
我先是跑到服务器那边看了看,MSSQL服务确定是跑着的,图标亮着。那不是服务的问题,就是连接端的问题了。我马上想到,是不是那台机器的“门”被关上了?就是那个防火墙。这玩意儿最阴险了,平时不吭声,关键时候给你堵死。
我跑去把端口(默认1433)临时给放行了。结果再试,还是不行!

气得我抓耳挠腮。后来我才想起来,我用的是命名实例!不是默认的那个MSSQLSERVER。连接字符串里是不是写错了?赶紧回去检查,果然,连接名写成了默认的,没带那个斜杠后面的实例名。加上之后,走你!
这回没报“服务器找不到”的错误了,而是报了另一个经典错误:
登录失败。
这下好了,至少证明我能找到服务器了。登录失败,那肯定是账号密码的事。我当时用的是SQL Server身份验证,不是Windows验证。我琢磨着,是不是那个“sa”账号给禁用了?或者是装数据库的时候,就只允许Windows验证了?

我被迫又远程登录到服务器,打开管理工具一看:好家伙,混合模式验证是开着的,但“sa”账号不知道被哪个孙子给禁用了。我赶紧右键属性,给启用,然后重设密码。
一般来说,改完这些,重新连接就应该成了。结果,它还是不给我面子!继续报那个登录失败的错。
我当时差点想砸键盘了。后来我一个老伙计提醒我:
“你TM是不是忘了开TCP/IP协议?”
这简直是连接不上的“终极杀手”!SQL Server 配置管理器
。MSSQL网络配置
。我马上右键,把TCP/IP状态改为“已启用”。这个操作完了还没完,必须得把那个服务给
重启
一下,它才能生效。服务一重启,我心想这回要是再不行,我就直接换MySQL了。结果,回到我的开发机,点下连接按钮……刷!绿灯亮了!数据哗哗就出来了。
这回从头到尾的折腾,让我搞明白了,MSSQL连不上,基本就逃不出这几张牌:
防火墙:端口或程序访问被系统偷偷给挡了。
实例名:是不是忘了加斜杠后面的自定义实例名字了。
身份验证:是不是忘了开混合模式,或者关键的用户(比如“sa”)被禁了。
TCP/IP协议:配置管理器里这玩意儿经常是默认关闭的,必须手动开启并重启服务!
总结起来就是,遇到连接问题,别急着怀疑自己代码写错了,先去服务和配置管理器里看看,是不是哪个开关被人偷偷给关了。这几个地方搞定了,九成九的问题都能解决。今天的实践就分享到这,希望各位少走弯路。码字不易,点个赞再走!
上一篇:得意忘形是什么意思?