2016-12-08 2 views
0

У меня есть приложение C#, которое использует локальный файл базы данных .mdf для хранения некоторых данных.Не удается подключиться к экземпляру LocalDB

Я впервые протестировал его на другом компьютере (Windows 10, 64 бит), в котором была установлена ​​Visual Studio, но приложение не смогло подключиться к экземпляру localDB. После установки Microsoft SQL Server 2014 Express (который содержит установочный пакет LocalDB) он начал работать.

Я решил протестировать его и на другой машине (Windows 7, без Visual studio, 32 бит), где возникла одна и та же проблема. Установка Microsoft SQL Server 2014 Express не решила проблему. В появившемся сообщении об ошибке указано: «Сетевые интерфейсы SQL, ошибка: 26 - Ошибка определения местоположения сервера/экземпляра».

Использованная строка соединения в моем приложении является:

string path = Directory.GetCurrentDirectory(); 
string path_to_local_DB = Directory.GetCurrentDirectory() + "\\" + "Monitoring.mdf"; 
string local_connection_string = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=" + path_to_local_DB + ";Integrated Security=True"; 

Я также проверил следующие вещи на машине с Windows7:

  • Я создал экземпляр LocalDB с командой «sqllocaldb. exe create "(создает экземпляр с именем MSSQLLocalDB) и проверял, что он был создан/запущен с" SqlLocalDb info "(возвращает все запущенные экземпляры LocalDB).
  • Проверено, что статус SQL-сервера был настроен на «запуск» в SQL Server 2014 Configuration Manager
  • Проверено в services.msc, что службы «SQL Server» и «SQL Server Browser» выполнялись.
  • Также попытался вручную подключиться к экземпляру LocalDB в SQL Server 2014 Management Studio, установив поле «имя сервера» в «(LocalDb) \ MSSQLLocalDB». Это связано.

Полный StackTrace:

--------------------------- 
Failed to connect to localDB. Stacktrace: System.Data.SqlClient.SqlException: 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) 

    at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) 

    at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) 

    at System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity, SqlConnection owningObject) 

    at System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, Boolean ignoreSniOpenTimeout, Int64 timerExpire, SqlConnection owningObject) 

    at System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(String host, String newPassword, Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions, Int64 timerStart) 

    at System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject, SqlConnectionString connectionOptions, String newPassword, Boolean redirectedUserInstance) 

    at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, String newPassword, SqlConnection owningObject, Boolean redirectedUserInstance) 

    at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection) 

    at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbConnectionOptions options) 

    at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject) 

    at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject) 

    at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject) 

    at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) 

    at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) 

    at System.Data.SqlClient.SqlConnection.Open() 

    at Zensys.ZWave.Programmer.UI.MonitoringForm.checkForUnsyncedEntries() 

ли кто-нибудь знает, что может быть причиной для работы приложения на компьютере ОС Windows 10 и не работает на Windows 7 машине? На обеих машинах установлена ​​версия .NET 4.6.2.

+0

Вы уверены, что 'path_to_local_DB' верен? – stuartd

+0

Файл .mdf находится внутри папки приложения. Как вы можете видеть, я использую GetCurrentDirectory(), чтобы получить (динамический) абсолютный путь к каталогу, где он находится. – TheAptKid

+0

... и Directory.GetCurrentDirectory() возвращает правильное значение? [Текущий каталог не всегда является каталогом приложений ..] (http://stackoverflow.com/questions/15653921/get-current-folder-path) – stuartd

ответ

0

Во-первых Перейти к серверу SQL и выполните следующую команду:

SELECT @@ SERVERNAME

Теперь, измените local_connection_string [Источник данных] (Упоминается в коде выше), с Вышеуказанный результат.

Все проблемы с подключением.

+0

Привет. Спасибо за помощь. Я получаю следующую строку результата: \ LOCALDB # 10253EAD – TheAptKid

+0

yeh .. он может работать отлично. – UJS

+0

Я получаю System.ArgumentException, если я использую строку local_connection_string = @ " \ LOCALDB # 10253EAD"; – TheAptKid