首页 > 解决方案 > 如何使用类似的旧连接字符串信息连接到新服务器

问题描述

在我工作的公司,我们已经将当前的数据库表结构和存储过程迁移到了一个新的数据库;工作至今。

我们面临的问题是没有任何方法可以让我们的应用程序连接到新数据库。原因?保存在 App.config (xml) 文件中的连接字符串可能存在问题。

这很奇怪,因为即使我们提供了与旧数据库类似的数据源、用户 ID、密码和服务器结构,它也只是拒绝连接并使用它的功能做任何事情。

数据库在 SQL Server 2017 上运行(与以前相同),我们的应用程序是在 Winforms C# 中开发的,使用 Entity Framework 6 和 EXECSQLSERVERPROCEDURE NuGet 插件。

这个插件特别使用了一个特殊的连接字符串(下面与其他人一起详细说明),它不使用“connectionString”,而是一个“值”,它是失败的部分之一,以及基于 TableAdapter,填充 DataGridViews。只有 EF6 连接和功能正常工作。

我试过,从更改服务器实例名称,根据: https ://sqldbpool.com/2008/09/03/how-to-change-sql-server-instance-name/

所以我不必处理 App.config 中的特殊字符;在数据源中使用命名服务器实例的 HTML 代码和实体(即使是带星号的密码,我们稍后更改但没有任何效果),以​​此作为参考: https ://www.toptal.com/designers/htmlarrows/

并且,将特殊连接字符串的引用更改为常规连接字符串,通过“名称”而不是“键”调用,因为这个在常规连接字符串定义中不存在(是的,尝试添加它,但没有工作)。

只是为了得到大量的一无所获和沮丧(从星期五开始就在这个,只是为了让大家了解一下)。

连接字符串(在 App.config 中):

<connectionStrings>
    <add name="MYAPP.Properties.Settings.MYAPP" connectionString="Data Source=MYAPPSERVER;Initial Catalog=MYAPP;User ID=sa;Password=MYAPP2019;Server=192.168.*.*"
      providerName="System.Data.SqlClient" />
    <add name="MYAPPBD" connectionString="metadata=res://*/MYAPP.csdl|res://*/MYAPP.ssdl|res://*/MYAPP.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=192.168.*.*\MYAPP;initial catalog=MYAPP;user id=sa;password=MYAPP2019;multipleactiveresultsets=True;application name=EntityFramework&quot;"
      providerName="System.Data.EntityClient" />
</connectionStrings>
<appSettings>
    <add key="DBSQL" value="workstation id=server;packet size=4096;data source=MYAPPSERVER;initial catalog=MYAPP;user id=sa;password=MYAPP2019;server=192.168.*.*" />
    <add key="ClientSettingsProvider.ServiceUri" value="" />
</appSettings>

使用此“DBSQL”特殊连接字符串的函数定义(用于获取用户权限):

Dictionary<string, object> param = new Dictionary<string, object>();
DataTable dt = new DataTable();
param.Add(new SqlParameter("@profile", profile));

dt = SQLSERVERPROCEDURE.SQLSERVER.Exec("DBSQL", "spRec_Privileges", param, dt);

您可以在此处查看此插件源代码,以供参考: https ://www.nuget.org/packages/EXECSQLSERVERPROCEDURE/

期望使用所有函数连接到 DB,而不仅仅是 EF6 函数,因为我们无法解析 DataTable / DataSet 返回函数来执行与 EF List 相同的操作。至于自动填充 TableAdapters 的 DataGridViews,我们可以制作 SP 来加载和保存更改,但这会耗费我们无法节省的时间。

这是错误,即使用户 ID 和密码输入正确:

System.Data.SqlClient.SqlException
   HResult = 0x80131904
   Message = Network-related or instance-specific error while establishing a connection to the 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 support remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection with SQL Server)
   Source = .Net SqlClient Data Provider
   Battery Tracking:
    in SQLSERVERPROCEDURE.SQLSERVER.Exec (String ConnectionName, String Procedure, Dictionary`2 Variable and Values, DataTable dt)
    in MYAPP.Class.User.GET_Usu_Privileges (Int32 profile) in C: \ Users \ User \ source \ repos \ MYAPP - EF Integration  \ MYAPP \ Class \ Users.cs: line 107

Internal Exception 1:
Win32Exception: Username or password are not correct

编辑:数据库中的查询运行良好。即使使用原始的完整 Server-Name\Instance 格式也不起作用。我们没有使用 Windows 身份验证(这仅在服务器中使用);只是 SQL Server 身份验证。

标签: c#sql-serverxmlwinformsentity-framework

解决方案


推荐阅读