SQL Server 2008 连接字符串问题

6

我正在尝试使用ASP.NET MVC 3连接我的SQL Server 2008数据库。这是我的连接字符串:

  <connectionStrings>
    <add name="AppConnectionString"
         connectionString="Data Source=(local);Initial Catalog=DatabaseName;User Id=UserName;Password=PassWord;"
         providerName="System.Data.SqlClient" />
  </connectionStrings>

有什么问题吗?
当我尝试在我的DbContext中查询一些内容时,我会得到这个异常: $exception {"The provider did not return a ProviderManifestToken string."} System.Exception {System.Data.ProviderIncompatibleException}
InnerException {"A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified)"} System.Exception {System.Data.SqlClient.SqlException}
请问有人能帮我解决一下吗?
谢谢。

在对象资源管理器上右键单击服务器名称,选择属性->连接,检查是否选中了“允许远程连接到服务器”。 - genericuser
是的,已经检查过了,谢谢。 :) - Tommy B.
你能展示一下你尝试连接数据库的代码吗? - Sachin Shanbhag
我有同样的问题,我有大约20个ASP、ASP.NET和MVC2应用程序在同一个IIS服务器/开发机器上运行,连接同一个SQL 2008 R2服务器。对我来说,问题肯定与EF4.1有关,这是唯一改变的东西。谢谢。 - user989209
7个回答

3

首先检查你的mssqlserver服务是否正常运行。只需在命令提示符中执行net start mssqlserver

然后尝试将连接字符串Data Source=(local)更改为Data Source=.

以上所有操作都基于你已经在本地机器上安装了SQL Server。


3
那个错误的意思是你连接字符串中数据源的名称或者你的SQL服务器没有配置允许远程连接:请参见这里如何解决它。

它已配置为允许远程连接,并且我尝试了各种数据源名称... 仍然无法工作 :S 谢谢 - Tommy B.
@Semvanmeenen:我检查了我的配置,是已经启用的:S 无论如何还是谢谢。 - Tommy B.
@Tom 好的,请您检查一下您连接的用户是否拥有正确的权限?在 SQL Server Management Studio 中,您可以在 <您的服务器>\security\logins\user 下找到您的用户并双击它。在状态选项卡中,必须选择“授权”和“启用”选项。 - Sem Vanmeenen
@Semvanmeenen 是的,它们也被检查了。谢谢。 - Tommy B.
1
@Tom 嗯,我有点困惑。你能试着按照这个页面上的指示创建连接字符串并将其与你的进行比较吗?也有可能是你的SQL服务器浏览器服务没有运行。如果那行不通,很抱歉我无能为力了。你可以考虑迁移问题到http://serverfault.com. - Sem Vanmeenen
显示剩余3条评论

2
您可以ping服务器吗?
您可以创建一个新的空文本文件,将其重命名为test.udl,双击它,然后通过这种方式创建连接字符串(对话框将打开,您可以选择提供程序、服务器、数据库等)。
此外,请参阅ww.connectionstrings.com以获取示例连接字符串。
还需要考虑实例。例如,如果您使用sqlexpress,则可能是(local)\SQLEXPRESS。

我在那个网站上获得了连接字符串 :) 是的,我可以ping它,因为我可以使用SQL Server Management Studio访问它,并且我正在使用相同的主机进行连接:S - Tommy B.

2
除了使用本地地址(local)、localhost或127.0.0.1(回环地址 - 没有比这更好的地方了;-),单个句点“.”也会解析到本地机器。
您的连接字符串和上述建议假定您正在尝试连接到未命名的默认实例。如果您的服务器实例已命名,则需要将其包括在连接字符串中,例如:.\ServerName。
更多有用信息可在以下网站找到:http://connectionstrings.com

@Paul,对于安装了SQL Server 2005及以上版本的客户端来说,(local)、.和localhost是等效的,并且不与任何特定协议绑定。 - Moog

1

我曾经遇到过类似的问题,以下是帮助我的步骤:

1)你的应用程序必须有一个名为App.config的配置文件,其中包含一个连接字符串,该连接字符串的名称与从DbContext继承的类的名称相同。在我的情况下是"TestEF_CF.ProductContext"。

<add name="TestEF_CF.ProductContext" connectionString="Data Source=localhost;Initial Catalog=ef_cf_test;Integrated Security=True" providerName="System.Data.SqlClient" />

2) 在开始使用数据库之前,无法创建它。只需将初始目录设置为您希望Entity Framework在自动创建数据库时创建的名称即可。

如果需要更多信息,请参阅我的Stackoverflow问题: Entity Framework 4.1 Code First Freeze


1

如果你查看InnerException,有可能实际上出现的是登录问题。

我解决这个问题的方法是,将DefaultAppPool运行的帐户更改为NetworkService(转到高级设置并更改进程模型,身份),然后选择一个可以访问您的数据库的帐户。

当然,假设您的应用程序正在使用DefaultAppPool在IIS中运行。

我将其设置为NetworkService,并授予NT AUTHORITY \ NETWORK SERVICE用户访问我的现有数据库的权限。

这样我就能连接了。尽管我的情况可能很特殊,但我想分享一下。


0
        SqlConnection [object name];
        [object name] = new SqlConnection("Data Source=Server_address/name;Initial Catalog=myDatabase;Integrated Security=True");
        [object name].Open();

注意:不需要输入括号,只需填入对象名称即可。

Server_address:您的计算机名称。

myDatabase:您的数据库名称。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接