1

我在 Visual Studio 中有两个项目:我的普通项目和我的测试项目。我选择使用 SpecFlow 进行测试,因此我的测试是基于 UI 的。因此 UI 验证不需要数据库连接。

在某些情况下,我必须为系统设置一些先决条件,例如在项目中填充一些示例数据。我试图将我的项目数据库连接到我的测试项目,但它不起作用。我尝试将连接字符串添加到我的测试项目 app.config 中,如下所示:

<connectionStrings>
<add name="MyConnectionString"
  connectionString="Data Source=C:\Users\Martijn\Documents\VS11\Projects\Gastouderuren.nl\testprojectl\App_Data\example.sdf"
  providerName="Microsoft.SqlServerCe.Client.4.0" />
</connectionStrings>  

当我在代码中使用此连接字符串时,如下所示:

        MyContext context = new MyContext(ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString);

        context.Product.Count();

当我运行我的测试时,会出现以下错误:

The provider did not return a ProviderManifestToken string. -> This operation requires a connection to the 'master' database. Unable to create a connection to the 'master' database because the original database connection has been opened and credentials have been removed from the connection string. Supply an unopened connection. -> 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)

我已经搜索过解决方案,但找不到任何东西。我怎么解决这个问题?

谢谢!

4

1 回答 1

0

无法像连接普通 SQL 数据库(连接字符串)一样 连接到外部localdb (基于文件)

这是因为 localdb 限制(一次不能超过 1 个应用程序连接)

但我有一个解决方案:(如何使用 2+ 个应用程序和 1 个 localdb)

  • 您必须创建一个 TCP 服务器侦听器(在 LOCALDB 所在的 pc 中)和其他 pc 所在的 X 客户端
  • 客户端电脑连接到服务器电脑
  • 所以每次你想执行一个 sql 命令时,你将命令从 CLIENT发送到SERVER并且服务器会执行它!(可以发回响应)

你也可以设置一些预先定义的命令(我做了同样的事情)

SERVER :
if(CLIENT DATA . equals("ReadProducts"){
sql.execute("SELECT * FROM Products");
//convert...
SendBack(result);
}


CLIENT 1 >SEND> SERVER : "ReadProducts" (Predefinded command)

SERVER >SEND> CLIENT 1 : "Apple,Melon,Orange"

CLIENT 1 :

 data = SERVER RESPONSE;

 string[] sp=data.split(',');

//add a for loop which add all products to your listview
CLIENT 2 >SEND> SERVER : "INSERT INTO Products(name) VALUES(@name)"


SERVER :
if(CLIENT DATA . contains("INSERT"){
sql.execute(CLIENT DATA);
}

使用算法 abow,您可以处理与单个 LocalDb 文件的许多连接

来自另一台计算机,但您必须处理 IP 问题

如果您开发大型项目,请获取服务器应用程序的静态 IP 地址

于 2018-03-24T12:20:03.093 回答