C# 从C代码连接到SQL Server Express时遇到令人沮丧的问题

C# 从C代码连接到SQL Server Express时遇到令人沮丧的问题,c#,sql-server,entity-framework,connection-string,entity-framework-migrations,C#,Sql Server,Entity Framework,Connection String,Entity Framework Migrations,我有一个连接到SQLServer数据库默认实例的程序。我使用实体框架连接到数据库,该软件现在被用作生产软件——它很好地支持了我的业务。它是在Windows Server 2012上运行的SQL Server的付费版本 我在家里从git签出了相同的代码,希望在家里使用相同的软件。我已经在我的电脑上安装了SQL Server Express(实际上,为了测试目的,在网络上的第二台电脑上安装了SQL Server Express)。我正在使用直接从SQL Server对象资源管理器复制的连接字符串:

我有一个连接到SQLServer数据库默认实例的程序。我使用实体框架连接到数据库,该软件现在被用作生产软件——它很好地支持了我的业务。它是在Windows Server 2012上运行的SQL Server的付费版本

我在家里从git签出了相同的代码,希望在家里使用相同的软件。我已经在我的电脑上安装了SQL Server Express(实际上,为了测试目的,在网络上的第二台电脑上安装了SQL Server Express)。我正在使用直接从SQL Server对象资源管理器复制的连接字符串:

@"Data Source=TSORT\SQLEXPRESS;Initial Catalog=CN2;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False";
在我的生产软件上,连接字符串是从一个设置文件构建的,但出于测试目的,我已经求助于硬编码

我的安装例程在我的SQL Server Express命名实例上成功地在家中创建了数据库。我可以看到数据库和表,包括
\uu MigrationHistory
表,其中包含正确的修订

但是,在运行此代码时:

CN2.Data.Model.CN2Context context = new Data.Model.CN2Context(builder.ConnectionString);

context.Database.Delete();
context.Database.Create();
var dbMigrator = new System.Data.Entity.Migrations.DbMigrator(new AJSoft.CN2.Model.Migrations.Configuration());
dbMigrator.Update();
context.SaveChanges();
当我随后尝试使用相同的连接字符串连接到数据库时,我得到了一个众所周知的通用错误:

建立与SQL Server的连接时发生与网络相关或特定于实例的错误。找不到服务器或无法访问服务器。验证实例名称是否正确,以及SQL Server是否配置为允许远程连接。(提供程序:命名管道提供程序,错误:40-无法打开到SQL Server的连接)

我已经检查了命名管道和TCP连接是否在本地和网络上启用。当我尝试在远程机器上使用数据库时,我甚至会关闭防火墙,但没有任何改进。显然存在某种连接,因为我的空数据库结构首先是正确创建的

工作(SQL Server)和家庭(SQL Server Express)的主要区别在于,工作时我使用默认实例,家庭使用命名实例(
COMPUTERNAME\SQLEXPRESS
)。所有客户端PC均为Windows 10,并保持完全更新

这显然是令人难以置信的沮丧,因为这意味着我无法在家用电脑上使用该软件。任何提示都非常感谢

编辑:作为参考,我在调试构建工作中使用的连接字符串(无问题):

作为参考,我正在工作的域环境中用于调试生成的连接字符串:

"Data Source=ROHAN;Initial Catalog=\"CN2 Test\";Integrated Security=True;Connect Timeout=10;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False"
其中ROHAN显然是我的服务器名,您可以看到,它使用了一个默认实例


编辑:看来我的代码中有一个更基本的问题。我在指定LocalDb时遇到了完全相同的问题-数据库已经创建,但一旦创建,我就无法再次连接到它。我会继续调查。在那之前,我一直在使用TeamViewer从家里开发。

你是说你已经检查了TCP/IP在本地和网络上的启用情况。。。那么您100%确定您试图访问的IP地址(非127.0.0.1地址)已启用?SQL Express实例的TCP/IP绑定到哪个端口?如果未绑定到标准端口(1433),或者启用了动态端口,则需要确保SQL Browser服务正在服务器计算机上运行,以便客户端知道要连接到哪个端口才能到达该命名实例。。。因此,请检查该服务是否正在运行

有两件事需要尝试: 1.指定服务器的协议和端口,如中所示: 数据源=tcp:TSORT,1433; 2.指定IP地址而不是服务器名称,如中所示: 数据源=tcp:xxx.xxx.xxx.xxx,1433


直接连接到端口可以减少在DB服务器上运行SQL Browser服务的需要。

好的-这感觉更像是一种忏悔而不是回答,但我希望社区不要对我太苛刻

我接受了BreukAJ的答案,因为出于任何其他原因,它都是正确的

在项目的早期测试阶段,我在CN2Context类上创建了一个构造函数,该类标记为#ifdef DEBUG。然后,这个无参数构造函数使用硬编码的连接字符串调用另一个构造函数。这使我能够从WPF设计器连接到数据库,这在项目的早期阶段非常有用。这是7年前的事了,只有当我使用新的SQL server转移到另一台开发机器上时,这才变得明显


我向任何花时间和精力解决问题的人道歉,现在问题已经解决了。

我不清楚问题是什么?第三个代码片段包含了准确的错误文本。初始创建后,我无法连接到数据库。您是否可以从SQL management studio连接到SQL express?因此,您的计算机可以连接到数据库以创建数据库,但在运行程序时无法连接?是吗?是的-我可以从SQL management studio连接。当我在本地和远程尝试时。我甚至可以“刷新”数据库列表,并“监视”从SSM创建的空数据库。我还检查了Windows用户对数据库拥有完全的管理权限。使用内部身份验证时也会出现同样的错误。谢谢-我已经在所有tcp侦听器上指定了标准端口(1433)。没有快乐。我已经用更新编辑了这个问题…非常感谢你的建议,我从来没有见过一个连接字符串指定这样添加到我有用的SQL Server知识中,即使这次不起作用!我有疑问(请参阅我的编辑,关于偶数(localdb)失败),但今晚我将试一试。AJ,谢谢。我使用相同的构造,@RedFilter也提到了它