Подтвердить что ты не робот

Ошибка при установлении соединения с SQL Server

Если у меня есть строка подключения в файле web.config(добавленные строки для лучшей читаемости):

<add 
name="conn" 
connectionString="Data Source=(localdb)\v11.0; Initial 
    Catalog=MyDB; Integrated Security=True; MultipleActiveResultSets=True; 
    AttachDbFilename=D:\Products.mdf" 
providerName="System.Data.SqlClient"/>

Соединение работает, и я могу подключиться к базе данных в проводнике базы данных.

Когда я укажу строку подключения в коде или использую ConfigurationManager для ее получения, она не работает:

    SqlCommand command = new SqlCommand();
    command.CommandText = "select ...";
    command.CommandType = CommandType.Text;
    SqlConnection cn = new SqlConnection("Data Source=(localdb)\\v11.0;"+
        "Initial Catalog=MyDB; Integrated Security=True; "+
        "MultipleActiveResultSets=True; AttachDbFilename=D:\\Products.mdf");
    command.Connection = cn;
    cn.Open();
    DataTable dataTable = new DataTable();
    SqlDataReader reader;
    reader = command.ExecuteReader();
    dataTable.Load(reader);
    cn.Close();

Получение строки подключения из web.config дает ту же ошибку:

SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings
 ["conn"].ConnectionString;

Ошибка, которую я получаю, это "System.ComponentModel.Win32Exception: сетевой путь не найден"

В трассе говорится:

Произошла ошибка, связанная с сетью или конкретным экземпляром, в то время как установление соединения с SQL Server. Сервер не найден или был недоступен. Проверьте правильность имени экземпляра и SQL Server настроен для удаленного подключения. (поставщик: Именованный Pipes Provider, ошибка: 40 - Не удалось открыть соединение с SQL Сервер)]

Мне нужна помощь в решении этого вопроса, пытались решить это в течение нескольких часов, и любое предложение на линии заключается в том, что я должен проверять сетевые настройки (не применяется при подключении к локальному экземпляру SQL Express Express). Имя сервера (такая же строка работает в VS Express, но не в запущенном коде).

Может ли это проблема аутентификации? И если да, то почему не информативная ошибка?

Спасибо, что прочитали мой пост и надеюсь, что вы можете мне помочь.

Update:

Я пробовал следующие вещи:

Учитывая, что группа получает полное разрешение на файлы mdf и ldf

В свойствах проекта в Интернете я попытался запустить проект под сервером разработки VS и локальным веб-сервером IIS (это IIS Express)

Не повезло, до сих пор не удается подключиться, где он прекрасно соединяется при копировании кода в проект, созданный с помощью "пустого веб-приложения ASP.NET"

4b9b3361

Ответ 1

Проблема связана с тем, что приложение не запущено в .net версии 4.0

Согласно следующей странице: http://www.connectionstrings.com/sql-server-2012#sqlconnection

Вам нужно .net 4.0 и использовать именованные каналы:

Синтаксис Server = (localdb) не поддерживается платформой .NET версии до 4.0.2. Однако соединение с именованными каналами будет работать подключите pre 4.0.2 приложения к экземплярам LocalDB.

SqlLocalDB.exe create MyInstance
SqlLocalDB.exe start MyInstance
SqlLocalDB.exe info MyInstance

Информация предоставляет именованный канал, который затем можно использовать в строке подключения:

<add name="conn" 
providerName="System.Data.SqlClient" 
connectionString="Server=np:\\.\pipe\LOCALDB#B1704E69\tsql\query"/>

Ответ 2

Вы правильно экранировали имя файла db, но не источник данных, поэтому он пытается подключиться к источнику данных с именем "(localdb) 11.0", который (скорее всего) не существует.

Попробуйте выполнить его правильно:

SqlConnection cn = new SqlConnection("Data Source=(localdb)\\v11.0;"+
"Initial Catalog=MyDB; Integrated Security=True; "+
"MultipleActiveResultSets=True; AttachDbFilename=D:\\Products.mdf");

Ответ 3

Вместо использования (localdb) вы пытались использовать '.\SQLExpress;' на эту страницу на MSDN? Он использует экземпляр по умолчанию, который может быть не таким, каким вам нужно.

он читал бы так:

<add 
name="conn" 
connectionString="Provider=SqlClient;Data Source=.\\SQLExpress; Initial 
    Catalog=MyDB; Integrated Security=True; MultipleActiveResultSets=True; 
    AttachDbFilename=D:\Products.mdf" 
providerName="System.Data.SqlClient"/>

Ответ 4

Просто для смеха вместо put (localdb) введите период '.'. Чтобы он выглядел как

Data Source=.\v11.0;

Я был бы удивлен, если это сработает, но вы можете сделать это в полном SQL.

Ответ 5

так как это проект веб-сайта, вам нужно указать правильную версию .net framework для сборки. SqlLocalDb требуется .net framework 4.

если вы создаете веб-проект и добавляете ему исходные файлы веб-сайта, он будет работать, если инфраструктура .net - 4+. Когда вы открываете целевую инфраструктуру целевого сайта по умолчанию или существующую инфраструктуру dll, может быть не такой, а может быть .net 3.5, поэтому вы получаете эту ошибку. надеюсь это поможет.

enter image description here

Ответ 6

Проверьте версию справочной System.Data между пустым проектом, который работает, и ваш проект, который не работает. Чтобы проверить это, вы можете использовать проводник решений. Оба проекта используют одну и ту же версию?

enter image description here

Ответ 7

Также... это может быть связано с вашей настройкой в ​​IIS.

Ваш сайт (состояние сеанса) может быть настроен для использования SQL Server для вашей сессии. Проверьте там тоже... У меня просто была эта проблема, и я понял, что наше соединение sqlbox изменилось и забыли обновить IIS.

Ответ 8

Эта ошибка появилась после того, как я сжал каталог C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA. Сжатие было исправлено с ошибкой.