Почему это работает для подключения к моей удаленной базе данных SQL Server:
var srvConn = new ServerConnection("sql01");
srvConn.LoginSecure = false;
srvConn.Login = "unittests";
srvConn.Password = "mypwd";
srvConn.DatabaseName = "MediaFilesDb";
var srv1 = new Server(srvConn);
Console.WriteLine(srv1.Information.Version);
И это не работает:
var scsb = new SqlConnectionStringBuilder();
scsb.DataSource = "sql01";
scsb.InitialCatalog = "MediaFilesDb";
scsb.IntegratedSecurity = false;
scsb.UserID = "unittests";
scsb.Password = "mypwd";
var srv1 = new Server(scsb.ConnectionString);
Console.WriteLine(srv1.Information.Version);
Я получаю печально известную ошибку 40:
Произошла ошибка, связанная с сетью или конкретным экземпляром, при установке соединения с SQL Server. Сервер не найден или не был доступен. Убедитесь, что имя экземпляра правильное и что SQL Server настроен на разрешение удаленных подключений. (поставщик: поставщик именованных каналов, ошибка: 40 - не удалось открыть соединение с SQL Server)
Если я возьму создаваемую строку подключения и вставлю ее в другой инструмент, например CodeSmith, он будет работать правильно и соединение будет установлено.
Почему второй пример терпит неудачу?
Редактировать:
Если я укажу TCP / IP для сетевой библиотеки:
scsb.NetworkLibrary = "dbmssocn";
Я получаю такую ошибку:
Длина значения для ключа «источник данных» превышает ограничение в «128».
Это моя строка подключения:
Источник данных = sql01; Начальный каталог = MediaFilesDb; Интегрированная безопасность = False; ID пользователя = unittests; Пароль = ****; Pooling = False; Сетевая библиотека = dbmssocn;
Экземпляр SQL находится на локальном компьютере или на другом? Вы пробовали изменить свойство NetworkLibrary объекта SqlConnection, чтобы он использовал TCP / IP вместо именованных каналов?