2011-12-06 127 views
1

我将本地C#-SQL Windows Forms应用程序克隆到新的笔记本电脑上。我成功地克隆了C#项目,并将SQL数据库备份并恢复到新计算机上,但是新项目无法读取/查询新克隆的SQL数据库中的任何数据。LINQ-to-SQL中的SQL连接失败

由于SQL DB是本地的,由于计算机具有不同的名称,因此LINQ-to-SQL寻址略有不同。因此,我从现有的LINQ .dbml的图形界面中删除了SQL表格表示,从服务器资源管理器中删除了旧的服务器连接,添加了新的服务器连接,并从服务器资源管理器的新数据连接对象中单击并拖动表格对象到现在为空的.dbml文件。

在调试模式下重建并运行应用程序时,我发现从SQL DB拉出的下拉菜单是空的。当试图从数据库中拉一个按钮的功能,我得到以下错误:

SQLEXCEPTION了未处理 而与SQL Server建立连接时出现与网络相关的或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确,并将SQL Server配置为允许远程连接。 (提供程序:SQL网络接口,错误:26-错误定位服务器/实例指定)

(克隆的SQL服务器配置为允许远程连接,TCP/IP在SQL中启用,并且原始的C#工作顺利)

回答

2

检查您的Web.Config并确保您的连接字符串设置正确。同时检查以确保在初始化DataContext时,您使用的是Web.Config中正确的连接字符串。

有时,当您从dbml中删除dbs时,它不会完全清除旧条目的web.config。寻找这样一行在designer.cs文件:

public SomeDbDataContext() : 
      base(global::System.Configuration.ConfigurationManager.ConnectionStrings["SomeDbConnectionString"].ConnectionString, mappingSource) 
    { 
     OnCreated(); 
    } 

在你的web.config

<connectionStrings> 
<add name="ApplicationServices" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient" /> 
<add name="someDBConnectionString" connectionString="Data Source=SomeServer;Initial Catalog=SomeDB;Integrated Security=True" providerName="System.Data.SqlClient" /> 
<add name="theOLDDBConnectionString" connectionString="Data Source=SomeServer;Initial Catalog=OldDB;Integrated Security=True" providerName="System.Data.SqlClient" /> 
</connectionStrings> 
+0

当我找到那种线时,我应该删除它吗? –

+0

不要删除它。确保OnCreated()使用来自Web.Config的正确连接字符串。我更新了我的答案,以显示它的样子。如果它使用旧的连接字符串,只需更新该行。 – Rondel

+0

我找不到我的C#项目(我发现两个我的SQL服务器,但他们没有ConnectionString说明符)Web.config。然而,我发现一个名为这样的designer.cs行:public DataClasses1DataContext(): base(global :: TradingSystem2.Properties.Settings.Default.PJMConnectionString1,mappingSource) { OnCreated(); } –

1

我会检查的几件事情:

1)SQL Server的新计算机上启动?

2)防火墙是否配置为允许SQL连接?

3)客户端连接机制(命名管道,tcp/ip)也在SQL Server中配置。

4)新机器中是否存在有效的网络连接(我们曾经在笔记本没有连接到网络时遇到很多问题)。

如果您将SQL Server计算机名称更改为.(local),如果您始终要将数据库安装在与该应用程序相同的计算机上,那么您可能会有更好的运气。

+0

1.是用的ConnectionStrings比较它; 2.是; 3. TCP/IP已启用,命名管道不是,但是当我启用命名管道时,我的SQL Server实例无法启动; 4。数据库完全位于笔记本电脑的硬盘上; 当您说“更改SQL Server计算机名称”时,是指笔记本电脑的网络名称,还是SQL Server配置中指定的内容? –

+0

@JackHuang:对不起,我的意思是在应用程序中的连接字符串中指定的服务器的名称。 –