LocalDB 在 ASP.NET 程序中找不到数据库:有时候错误信息是:没法找到数据库,请确认数据库名称是否正确;而有时候会变成:Cannot open database requested by the login. The login failed.sql
其实第一个错误信息有时候是身份验证的问题致使的,若是真是数据库名称没写对,而苦苦地寻找解决方案,那就真的能够去撞墙了。数据库
我出现这个问题的状况特别诡异,而这是我第一次接触 SqlServer,对其不大了解,致使了我花了不少时间才解决了这个问题。服务器
首先,我在本机跑的时候是彻底没问题的,但是当我部署到服务器上跑就出现了找不到数据库的问题了。app
数据库以及表我都是写成控制台程序,以可执行程序的形式跑的,程序跑得很顺利,但是运行 ASP.NET 程序的时候却出错了。测试
因而我又写了一个测试链接数据库的控制台程序,结果跑得也是很顺利。这时候就纳闷了,百度出了各类解决方案,再次吐槽:国内的不少文章都特么是一字不落抄过去的,而 StackOverflow 也有不少解决方案,试了不少种方法,结果都是在几个错误信息中来回变更。this
后来,我逐渐感受是身份验证的缘由,因而到微软官网查看了一下 SqlConnection.ConnectionString 的文档,想要看看如何在链接字符串中添加用户名密码,这两个参数没找到,我却先看到了“Initial Catalog- 或 -Database”参数,因而,我就把数据库参数添加到链接字符串中。进程
(本来我是先链接到 LocalDB 实例,再调用 ChangeDatabase 方法切换数据库的,因而每次在这个方法都报错:找不到数据库)文档
很使人惊喜的是,此次的错误信息再也不是过去那几个中的一个了:Cannot open database requested by the login. The login failed.字符串
很明确的,身份验证的缘由。部署
百度一下,连接到 StackOverflow,看到了不少个熟悉的解决方案,并且解决率还很高,但对于我来讲并无解决成功,并且也看到了相似的解决方案,吐槽:跟国内差很少,拿别人的解决方案,稍微换一下,又是原创解决方案了,呵呵哒。
对于个人问题,正确的解决方案是倒数第三个:
I had this problem and what solved it for me was to:
就是到服务器中的 IIS 找到应用程序所在的应用程序池,点击右边的高级设置(他上面说是右键,额。。。不知道是哪一个版本的 IIS 是酱紫操做的,个人是 IIS7),而后设置“进程模型”的“标识”属性,弹出对话框后选择自定义帐户,输入你登陆服务器的帐号密码,OK。
在这里就不截图了,不方便,233333
问题解决后,我忽然恍然大悟,为何控制台程序能跑得很顺利,而 ASP.NET 程序却报错?由于控制台程序不须要去设置程序的身份,默认使用登陆系统的帐户,而 ASP.NET 是托管在 IIS 中的,有涉及到身份验证,默认值为 ApplicationPoolIdentify,不懂这是什么,但是它致使了错误,就说明这个身份确定不行。
以上。