Строка подключения SQL Express ад ASP.Net

SQL Express 2005 работает локально. У меня есть проект, написанный другим человеком, работающий на той же машине. Все, что я хочу сделать, это подключиться к нему, не может быть так сложно, правда?

Это тот, который я использую в своем старом классическом коде ASP для обращения к другой базе данных, работающей в том же экземпляре:

Provider = SQLOLEDB; Data Source = MYLAPTOP \ MSSMLBIZ; Persist Security Info = True; User ID = TestUser; Password = letmein; Initial Catalog = TestDB

Но попытка такой версии заставляет .net-код запускать воблер, поскольку он написал его с использованием драйверов SQLServer, поэтому ему не нравится материал Provider.

Вот исходная строка подключения из его кода:

Сервер = (локальный); Исходный каталог = База данных; Идентификатор пользователя = Пользователь; Пароль = Пароль;

Я был на http://www.connectionstrings.com/sql-server-2005 и попробовал несколько вариантов оттуда, все они получили «SQL Server не существует или доступ запрещен» (какое прекрасное смешанное сообщение об ошибке!):

  • Источник данных = localhost; Integrated Security = True; Initial Catalog = TheDatabase
  • Источник данных = localhost \ SQLEXPRESS; Integrated Security = True; Initial Catalog = TheDatabase
  • Источник данных = MyLaptop \ SQLEXPRESS; Встроенная безопасность = True; Начальный каталог = TheDatabase
  • Сервер = MyLaptop \ SQLEXPRESS; Исходный каталог = База данных; Идентификатор пользователя = Пользователь; Пароль = Пароль;

Я создал логины для MyLaptop / IUSR_MyLaptop, MyLaptop / ASPNET, MyLaptop / IWAM_MyLaptop в SQL Express и дал им всем разрешения на чтение / запись для моей БД и установил их БД по умолчанию как TheDatabase.

Что, черт возьми, я делаю не так и как мне еще немного отладить проблему?

ОБНОВЛЕНИЕ: Особая благодарность Крису за все его указатели, попавшие туда в конце, если у вас возникла подобная проблема, прочтите все комментарии, там есть много ссылок и советов о том, как их отследить.


person Pete Duncanson    schedule 23.07.2009    source источник
comment
Может быть, глупый вопрос, но каково фактическое имя экземпляра сервера sql express, к которому вы пытаетесь подключиться? Это localhost \ sqlexpress или что-то еще? Вырежьте приложение из уравнения и просто попробуйте подключиться к sql через sqlcmd, выполнив команду sqlcmd -S servername \ instancename -E в командной строке, и посмотрите, подключается ли оно.   -  person Chris W    schedule 23.07.2009
comment
Экземпляр на самом деле называется MSSMLBIZ, но для ясности оставил его как SQLExpress. Пытался описать выше и получил следующее: Сетевые интерфейсы SQL: ошибка при обнаружении указанного сервера / экземпляра [xFFFFFFFF]. Sqlcmd: ошибка: собственный клиент Microsoft SQL: произошла ошибка при установке соединения с сервером. При подключении к SQL Server 2005 этот сбой может быть вызван тем фактом, что в настройках по умолчанию SQL Server не разрешает удаленные подключения. Sqlcmd: Ошибка: собственный клиент Microsoft SQL: истекло время ожидания входа в систему. Проверил в Server Config и все это включилось?   -  person Pete Duncanson    schedule 23.07.2009
comment
Собираюсь попробовать переустановить, чтобы попытаться все сбросить и начать заново ...   -  person Pete Duncanson    schedule 23.07.2009
comment
Переустановить была свинья! Благодаря этой статье за ​​помощь в случае, если кто-то еще получает ошибку SQL Server не удалось запустить в Win XP SP2: support.microsoft.com/default.aspx?scid=kb%3Ben-us%3B920114   -  person Pete Duncanson    schedule 23.07.2009


Ответы (4)


С этим сообщением об ошибке в своем комментарии вы должны просмотреть элементы в http://blogs.msdn.com/sql_protocols/archive/2007/05/13/sql-network-interfaces-error-26-error-locating-server-instance-specified.aspx

Я предполагаю, что экземпляр запущен и разрешает ли соединения через tcpip?

person Chris W    schedule 23.07.2009
comment
Читаю эту статью сейчас, скачиваю и PortQry. Да, экземпляр запущен, и из того, что я читал и видел, должен быть разрешен tcpip. Отключите динамические порты и установите для него всегда использование 1434. Нужно ли мне это, если я работаю локально? - person Pete Duncanson; 23.07.2009
comment
Нет - это не имеет значения, если вы подключаетесь локально, но у вас происходит что-то странное - как вы администрируете сервер в данный момент. SSMS? Вы подключаетесь через Windows или sql логин? - person Chris W; 23.07.2009
comment
В Configuration Manager - проверьте конфигурацию клиента, чтобы узнать, какие протоколы включены для подключения и в каком порядке они применяются. - person Chris W; 23.07.2009
comment
Да, используя Microsoft SQL Server Management Studio Express с учетной записью Windows. Идет просто отлично. Также я снова включил динамические порты, установив его на 0, и изменил порт tcpip на 1433, который я считаю правильным (1434 для браузера SQL из того, что я читал). Подробнее через минуту ... - person Pete Duncanson; 23.07.2009
comment
Общая память 1, TCPIP 2, канал 3 ... это помогает? : | - person Pete Duncanson; 23.07.2009
comment
Прямо сейчас он подключается через командную строку! Осмелюсь признать, что в имени сервера была опечатка. Извините. Что дальше? У меня совершенно нет идей. Конечно, все остальное я тоже проверил, больше нигде опечаток нет. - person Pete Duncanson; 23.07.2009
comment
Это было с переключателем -E (Windows auth)? Теперь вы можете попробовать sqlcmd -S localhost \ mssmlbiz -U имя пользователя -P пароль, чтобы убедиться, что вы можете войти в систему, используя учетные данные, которые, по вашему мнению, должны быть в состоянии использовать. - person Chris W; 23.07.2009
comment
Хорошо, переустановил, снова настроил моих пользователей, попробовал описанное выше и получил: Ошибка входа для пользователя «‹MyUserName›». Пользователь не связан с доверенным соединением с SQL Server. - person Pete Duncanson; 23.07.2009
comment
Крис сузил круг вопросов. Спасибо. Погуглив вышеупомянутое, я нашел эту страницу, которая объясняет, что у меня не была включена аутентификация SQL Server (по умолчанию используется только Windows Auth). Переключил, чем и использовал вашу подсказку cmd выше, и все отсортировано. electrictoolbox.com/ - person Pete Duncanson; 23.07.2009

Можете посоветовать, что именно в конфиге?

Вы используете блок - и в этом случае допустимая строка подключения будет:

<add name="connection" providerName="System.Data.SqlClient" connectionString="Data Source=localhost\MSSMLBIZ;Initial Catalog=TheDatabase;Integrated Security=True" />

or

<add name="connection" providerName="System.Data.SqlClient" connectionString="Data Source=localhost\MSSMLBIZ;Initial Catalog=TheDatabase;Integrated Security=False;User Id=TheUser;Password=ThePassword;Application Name=AppName;" />

Или вы получаете строку подключения из настроек приложения - и в этом случае я предполагаю, что ваш провайдер установлен в коде внутри самого приложения?

person Chris W    schedule 23.07.2009
comment
в настройках приложения, его .Net версии 1 (из-за ограничения того, где он будет размещен). Переустановка тоже не идет ... на днях ... - person Pete Duncanson; 23.07.2009
comment
И спасибо за вашу помощь Крис, очень признателен, настройка БД - не совсем моя сумка ... - person Pete Duncanson; 23.07.2009

Разве ваш источник данных не должен читать: Data Source = localhost \ sqlexpress тоже?

person Tanner    schedule 23.07.2009
comment
Пробовал, добавил выше. - person Pete Duncanson; 23.07.2009

Вы не упоминаете о предоставлении прав "TheUser" на доступ к базе данных на сервере - если вы восстанавливаетесь с другого сервера, у вас может быть несоответствие sid.

Попробуй бежать

sp_update_users_login 'report'

против рассматриваемого БД.

Если он возвращает учетную запись пользователя в отчете, попробуйте:

sp_update_users_login 'update_one', 'theuser', 'theuser'

чтобы переназначить вещи.

person Chris W    schedule 23.07.2009
comment
Кажется, у меня нет доступной хранимой процедуры? Сообщение 2812, уровень 16, состояние 62, строка 1 Не удалось найти хранимую процедуру sp_update_users_login. - person Pete Duncanson; 23.07.2009
comment
извините - это должно было быть sp_change_users_login ... но это, вероятно, не имеет значения, если вы не можете даже получить базовое соединение с сервером. - person Chris W; 23.07.2009
comment
Хорошо, это для запуска, там только одна запись, одна из тех, когда разработчик запускал БД, я думаю. Ни один из моих. Я восстановил БД, но потом снова добавил своих пользователей. Что мне говорит этот отчет, Крис? - person Pete Duncanson; 23.07.2009
comment
Это покажет вам несовпадающих пользователей - то есть, где sid пользователя на вашем сервере не совпадает с идентификатором в самой базе данных. Распространенная проблема при перемещении dbs между серверами. Если содержимое отчета не соответствует имени пользователя, с которым вы пытаетесь подключиться, просто проигнорируйте его. - person Chris W; 23.07.2009