Ошибка UWP при попытке подключения к SQL Server Express через EFCore - PullRequest
0 голосов
/ 19 марта 2020

Команда, это сводит меня с ума. Я всегда получаю эту ошибку, когда запускаю приложение UWP:

Microsoft.Data.SqlClient.SqlException: 'При установлении соединения с * 1043 возникла ошибка, связанная с сетью или конкретным экземпляром c * Сервер. Сервер не найден или не был доступен. Убедитесь, что имя экземпляра указано правильно и что SQL Сервер настроен для разрешения удаленных подключений. (поставщик: поставщик общей памяти, ошибка: 40 - не удалось открыть соединение с SQL сервером) '

Внутреннее исключение:

Microsoft.Data.SqlClient. SqlException HResult = 0x80131904 Сообщение = Ошибка, связанная с сетью или конкретным экземпляром c, произошла при установлении соединения с SQL Сервером. Сервер не найден или не был доступен. Убедитесь, что имя экземпляра правильное и что SQL Сервер настроен для разрешения удаленных подключений. (поставщик: поставщик общей памяти, ошибка: 40 - не удалось открыть подключение к SQL серверу) Источник = основной поставщик данных Microsoft SqlClient StackTrace: в Microsoft.Data.SqlClient.SqlInternalConnectionTds..ctor (идентификатор DbConnectionPoolIdentity, SqlConnectionString connectionOrections, Sql учетных данных, объект providerInfo, String новый_пароль, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, Boolean applyTransientFaultHandling, String маркер доступа, DbConnectionPool бассейн, SqlAuthenticationProviderManager sqlAuthProviderManager) в Microsoft.Data.SqlClient.SqlConnectionFactory.CreateConnection (варианты DbConnectionOptions, DbConnectionPoolKey poolKey, объект poolGroupProviderInfo, пул DbConnectionPool, DbConnection owningConnection, DbConnectionOptions userOptions) в Microsoft.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection (пул DbConnectionPool, DbConnection, владеющий объектом, DbConn ectionOptions варианты, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions) в Microsoft.Data.ProviderBase.DbConnectionPool.CreateObject (DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection) в Microsoft.Data.ProviderBase.DbConnectionPool.UserCreateRequest (DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection) в Microsoft.Data.ProviderBase.DbConnectionPool.TryGetConnection (DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, булева allowCreate, булева onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal & соединение) Microsoft.Data.ProviderBase.DbConnectionPool.TryGetConnection (DbConnection owningObject, TaskCompletionSource 1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) at Microsoft.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource 1 повторных попыток, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal & connection) в Microsoft.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal (DbConnection outerConnection, DbConnec ionFactory connectionFactory, TaskCompletionSource 1 retry, DbConnectionOptions userOptions) at Microsoft.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource 1, повторная попытка, DbConnectionOptions userOptions) в Microsoft.Data.SqlClient.SqlConnection.TryOpen (TaskCompletionSource 1 retry) at Microsoft.Data.SqlClient.SqlConnection.Open() at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenDbConnection(Boolean errorsExpected) at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.Open(Boolean errorsExpected) at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReader(RelationalCommandParameterObject parameterObject) at Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable 1.Enumerator.InitializeReader (DbContext. Microsoft. .SqlServerExecutionStrategy.Execute [TState, TResult] (состояние TState, Fun c3 operation, Func 3 verifySucceeded) в Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable 1.Enumerator.MoveNext() at System.Collections.Generic.List 1.AddEnumerable (IEnumerable 1 enumerable) at System.Collections.Generic.List 1.ctor 1 collection) at System.Linq.Enumerable.ToList[TSource](IEnumerable 1 источник) в UWP_EF_i9.MainPage.Page_Loaded (отправитель объекта, RoutedEventArgs e) в E: \ Users \ Massimo \ OneDrive \ Development \ Source \ UWP EF i9 \ UWP EF i9 \ MainPage.xaml.cs: строка 35

Внутреннее исключение 1: Win32Exception: доступ запрещен

Так как EFCore в UWP не может dbscaffold базу данных, следуя рекомендациям, найденным здесь, я сделал приложение EF.Core WPF, на котором были созданы леса база данных, создающая классы ... Импортировал сгенерированные классы в приложение UWP (переименованное пространство имен, где это применимо).

В приложении UWP я добавил Microsoft.EntityFrameworkCore и Microsoft.EntityFrameworkCore.SQLServer и добавил Enterprise Capability: Enterprise Authentication

Так что все должно быть хорошо ... но .. это не работает. Точно такой же запрос LINQ, который отлично работает в WPF, дает мне ошибку в UWP

Есть идеи? Чего мне не хватает?

--- Редактировать 1

Я даже добавил код с этой страницы:

Использовать серверную базу данных SQL в приложение UWP connectionString = "Источник данных = YourServerName \ SQLEXPRESS; Начальный каталог = NORTHWIND; Интегрированная безопасность = SSPI";

, поэтому в моем случае:

            try
        {
            using (SqlConnection conn = new SqlConnection((App.Current as App).ConnectionString))
            {
                conn.Open();
                if (conn.State == System.Data.ConnectionState.Open)
                {
                    using (SqlCommand cmd = conn.CreateCommand())
                    {
                        cmd.CommandText = "Select * from tAPP";
                        using (SqlDataReader reader = cmd.ExecuteReader())
                        {
                            while (reader.Read())
                            {
                            }
                        }
                    }
                }
            }
        }

, но соединение .Open () завершается с тем же сообщением

Ответы [ 2 ]

1 голос
/ 19 марта 2020

Я нашел проблему :( здесь объяснено: Использовать SQL Серверную базу данных в приложении UWP

в разделе: Не удалось подключиться к вашей базе данных?

Протокол TCP / IP по умолчанию отключен и должен быть включен . Теперь, как это возможно, что то же приложение в WPF работает, что VS2019 может подключиться (не к упомяните SSMS ...) и только UWP не подключается, для меня загадка ... но теперь это работает!

0 голосов
/ 19 марта 2020

Приложения UWP по умолчанию не имеют доступа к сети. См .:

Возможности

Чтобы использовать сеть, вы должны добавить соответствующие элементы возможностей в манифест приложения. Если в манифесте вашего приложения не указаны сетевые возможности, ваше приложение не будет иметь сетевых возможностей, и любая попытка подключения к сети будет неудачной.

Основы работы с сетью - приложения UWP

...