С# 2008 Строка подключения SQL Server Express

У меня есть SQL Server Express 2008 года, установленный на одной из моих машин, и я пытаюсь установить удаленное соединение... когда я использую MS SQL Server Management Studio, я могу войти в базу данных без каких-либо проблем (с тем же учетные данные), но когда я пытаюсь создать строку подключения в своем приложении C#, я получаю исключение:

При установлении соединения с SQL Server произошла ошибка, связанная с сетью или конкретным экземпляром. Сервер не найден или не был доступен. Убедитесь, что имя экземпляра указано правильно и что SQL Server настроен на разрешение удаленных подключений.

Вот как выглядит моя строка подключения (личная информация изменена):

"Data Source="MACHINENAME\\SQLEXPRESS";User ID="Admin";Password="the_password";Initial Catalog="MyDatabase";Integrated Security=True;Connect Timeout=120");

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

Примечание:

  1. Я включил удаленное подключение к серверу, отключил брандмауэр, включил соединение TCP/IP с сервером, включил браузер SQL.

  2. Строка подключения работает нормально, когда я нахожусь на той же машине.

  3. Я посмотрел параметр «Интегрированная безопасность» и установил для него значение «ложь», чтобы убедиться, что он не пытается использовать вход в Windows, но все равно не удается.

  4. База данных настроена так, чтобы разрешить вход в Windows и базу данных.

  5. Я изменил параметр Integrated Security на SSPI, True и, наконец, False, все 3 дали мне ту же ошибку, что и выше.

Может ли кто-нибудь сказать мне, если я делаю что-то не так?

ОБНОВЛЕНИЕ, вот мой точный код (на этот раз удален только пароль, и я добавил изображение студии управления, работающей на той же машине):

string _connectionString =
            //string.Format("Server=%s;User ID=%s;Password=%s;Database=%s;Connect Timeout=120", // Same problem
            //string.Format("Server=%s;User ID=%s;Password=%s;Database=%s;Integrated Security=False;Connect Timeout=120", // Same problem
            string.Format("Data Source=%s;User ID=%s;Password=%s;Initial Catalog=%s;Integrated Security=False;Connect Timeout=120", // Same problem
            "GANTCHEVI\\SQLEXPRESS",
            "FinchAdmin",
            "the_password",
            "Finch");

http://s113.photobucket.com/albums/n202/ozpowermo/?action=view¤t=ManagementStudio.jpg

http://s113.photobucket.com/albums/n202/ozpowermo/?action=view¤t=ManagementStudio.jpg

Я ПОНЯЛ ЭТО:

При использовании метки «Источник данных =» следует использовать «Идентификатор пользователя», если вы используете идентификатор пользователя, похоже, он не работает!

string _connectionString = "Data Source=GANTCHEVI\\SQLEXPRESS;Initial Catalog=Finch;Integrated Security=False;User Id=FinchAdmin;Password=the_password;Connect Timeout=0";"

person Kiril    schedule 15.06.2009    source источник


Ответы (5)


Удалите Integrated Security=True из строки подключения и (необязательно) добавьте Persist Security Info=True;

Из MSDN:

Интегрированная безопасность — при значении false в соединении указываются идентификатор пользователя и пароль. Если задано значение true, для проверки подлинности используются учетные данные текущей учетной записи Windows.

person eu-ge-ne    schedule 15.06.2009

попробуй это

string sqlcon=("Data Source="your pc name\\SQLEXPRESS"; 
UserID=sa;
Password=****;
Initial Catalog="+MyDatabase+"; 
IntegratedSecurity=True;");
person LZara    schedule 19.08.2012

Хорошо. Я предполагаю, что вы пробовали все эти http://blogs.msdn.com/sqlexpress/archive/2005/05/05/415084.aspx

Вы пробовали sqlping на MACHINENAME\SQLEXPRESS

Можете ли вы пропинговать MACHINENAME

Наконец, я почти уверен, что вам нужна только 1 косая черта, то есть MACHINENAME\SQLEXPRESS.

person David E    schedule 15.06.2009
comment
Спасибо за ответ :) Да, я уже включил все эти настройки и могу подключиться к БД с помощью Management Studio, на самом деле я сейчас подключен к Management Studio. Я могу пропинговать MACHINENAME, и он возвращает 192.168.0.9 (адрес машины, подключенной к моему маршрутизатору). Это две косые черты, когда они находятся внутри строки, поскольку косая черта считается специальным символом. - person Kiril; 15.06.2009
comment
Да совсем правильно на двух слешах, думал дело в конфиге. Дох! - person David E; 16.06.2009

Возможно, ваш экземпляр SQL не настроен для приема входящих TCP-соединений, вы можете проверить это в меню «Пуск» -> «SQL Server 2008» -> «Инструменты настройки» -> «Диспетчер конфигурации SQL Server». В левой части этого инструмента вы увидите конфигурацию сети, разверните ее, чтобы увидеть, какие протоколы включены.

person Colin    schedule 15.06.2009
comment
Он настроен на прием TCP-соединений. У меня есть Management Studio на том же компьютере, что и мое приложение C#, и я подключен к БД с теми же настройками. - person Kiril; 15.06.2009
comment
Я хотел иметь встроенную безопасность на моем локальном сервере БД, чтобы можно было использовать мои текущие учетные данные Windows. Этот ответ заставил меня открыть инструменты конфигурации. Когда я запустил агент SQL Server, я смог подключиться из своего приложения C# к базе данных. Спасибо, Колин. - person DavidHyogo; 14.08.2012

Что делать, если вы используете Integrated Security=SSPI?

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

person Chrisb    schedule 15.06.2009