使用 UWP 连接到 SQL 服务器时遇到问题
Trouble connecting to a SQL server using UWP
我创建了一个 UWP 应用程序来尝试连接到另一台计算机上托管的 SQL 服务器数据库。我正在尝试使用以下代码连接到该服务器。但是,在尝试打开与服务器的连接时,我得到了我所理解的 "time out" 错误。我可以在单独的 WPF 应用程序上使用相同的连接字符串完美地连接到服务器。
关于我的应用程序的一些其他详细信息:
最低和最高版本设置为 "Windows 10 Fall Creators Update"
应用程序是最小的,只有一个按钮和标签。
如果需要,可以提供更多详细信息。
编辑:我的问题是 "Any ideas for why this works fine in WPF but not in UWP using the 'Windows 10 Fall Creators Update' which apparently fully supports SQL server connectivity?"
我的 UWP 应用:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
using System.Data.SqlClient;
namespace App2
{
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
{
string connetionString = null;
SqlConnection cnn;
connetionString = @"Data Source=DIMENSIONVRSERV\DIMENSIONVRDB;Database=mydatabase;Persist Security Info=True;User ID=DVRLaptop;Password=password";
cnn = new SqlConnection(connetionString);
cnn.Open();
Lbl_ConState.Text = "Connection Open ! ";
cnn.Close();
}
}
}
}
错误消息:
System.Data.SqlClient.SqlException
HResult=0x80131904
Message=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: TCP Provider, error: 25 - Connection string is not valid)
Source=Core .Net SqlClient Data Provider
StackTrace:
at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, Boolean applyTransientFaultHandling)
at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnection owningObject, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
at System.Data.SqlClient.SqlConnection.Open()
at App2.MainPage.Button_Click(Object sender, RoutedEventArgs e) in C:\Users\DVR-Laptop-02\source\repos\App2\App2\MainPage.xaml.cs:line 50
Inner Exception 1:
SocketException: The operation completed successfully
您需要声明其中一项或两项功能(取决于您的网络设置):
enterpriseAuthentication
privateNetworkClientServer
启用企业身份验证和 privateNetworkClientServer 功能后,如果不起作用,请使用 CheckNetIsolation.exe 验证应用是否启用了适当的功能。
我更改了连接字符串以工作 TCP/IP ,现在工作正常!
不要忘记在“计算机管理”下,您可能需要启用 TCP/IP 服务并重新启动 SQL 服务器,以便服务开始为外部连接工作以远程连接到您的数据库.
我创建了一个 UWP 应用程序来尝试连接到另一台计算机上托管的 SQL 服务器数据库。我正在尝试使用以下代码连接到该服务器。但是,在尝试打开与服务器的连接时,我得到了我所理解的 "time out" 错误。我可以在单独的 WPF 应用程序上使用相同的连接字符串完美地连接到服务器。
关于我的应用程序的一些其他详细信息:
最低和最高版本设置为 "Windows 10 Fall Creators Update"
应用程序是最小的,只有一个按钮和标签。
如果需要,可以提供更多详细信息。
编辑:我的问题是 "Any ideas for why this works fine in WPF but not in UWP using the 'Windows 10 Fall Creators Update' which apparently fully supports SQL server connectivity?"
我的 UWP 应用:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
using System.Data.SqlClient;
namespace App2
{
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
{
string connetionString = null;
SqlConnection cnn;
connetionString = @"Data Source=DIMENSIONVRSERV\DIMENSIONVRDB;Database=mydatabase;Persist Security Info=True;User ID=DVRLaptop;Password=password";
cnn = new SqlConnection(connetionString);
cnn.Open();
Lbl_ConState.Text = "Connection Open ! ";
cnn.Close();
}
}
}
}
错误消息:
System.Data.SqlClient.SqlException
HResult=0x80131904
Message=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: TCP Provider, error: 25 - Connection string is not valid)
Source=Core .Net SqlClient Data Provider
StackTrace:
at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, Boolean applyTransientFaultHandling)
at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnection owningObject, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
at System.Data.SqlClient.SqlConnection.Open()
at App2.MainPage.Button_Click(Object sender, RoutedEventArgs e) in C:\Users\DVR-Laptop-02\source\repos\App2\App2\MainPage.xaml.cs:line 50
Inner Exception 1:
SocketException: The operation completed successfully
您需要声明其中一项或两项功能(取决于您的网络设置):
enterpriseAuthentication
privateNetworkClientServer
启用企业身份验证和 privateNetworkClientServer 功能后,如果不起作用,请使用 CheckNetIsolation.exe 验证应用是否启用了适当的功能。
不要忘记在“计算机管理”下,您可能需要启用 TCP/IP 服务并重新启动 SQL 服务器,以便服务开始为外部连接工作以远程连接到您的数据库.