Строка подключения к MS SQL server

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

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

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

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

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

Примечание:

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

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

  • Я просмотрел параметр Integrated Security, и я установил его в false, чтобы убедиться, что он не пытается использовать вход в Windows, но он все равно не работает.

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

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

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

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

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»);

Я ИЗОБРАЖАЛ:

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

Что такое ADO и с чем его едят уже достаточно подробно описано. Я хочу привести примеры доступа к SQL-таблицам базы данных 1С-Предприятие с помощью методов ADO
Методы ADO и SQL-DMO позволяют выполнять команды доступа и модификации данных с помощью языка Т-SQL. И в том, и в другом случае работа состоит из следующих этапов:
1. Соединение с базой данных.
2. Отправка серверу команды.
3. Получение и обработка результатов выполнения команды.

Как это сделать (ADO)
1. Создать объект ADODB.Connection
Соединение = СоздатьОбъект(«ADODB.Connection»);
ConnectionString = «driver={SQL Server}; server=myserver; uid=mylogin;
pwd= myPasword; Database = myDatabase”;
Соединение.ConnectionTimeOut =600;
Соединение.CursorLocation = 3;
try
Соединение.Open(ConnectionString);
except
Предупреждение(«Невозможно установить соединение”);
endtry;
У меня это реализовано в глобальном модуле (при начале работы системы автоматически устанавливается соединение и существует, пока открыт сеанс 1С). Уничтожение объекта после окончания работы не требуется.
2. Формирование и отправка команды дла SQL-сервера.
Для формирования и отправки команды серверу необходимо создать объект ADODB.Command и связать его с текущим соединением.
Cmd = СоздатьОбъект(«ADODB.Command»);
Cmd.ActiveConnection = Соединеиие;
Для задания команды используется свойство CommandText:
Cmd.CommandText = текст_команды;
Текстом команды может быть оператор Т-SQL (SELECT, INSERT, UPDATE, DELETE и т.д), или имя хранимой процедуры из той базы данных, с которой установлено соединение.
Пример:
Cmd.CommandText = ”SELECT * FROM _1SACCS”; //Оператор Т-SQL
Cmd.CommandText = ”my_stored_proc”; //Хранимая процедура
Для ускорения работы можно указать экземпляру объекта ADODB.Command тип команды, которая будет выполняться. Для этого я использую функцию ТипКомандыАдо():
Функция ТипКомандыАДО( АдоКонст ) Экспорт
АдоКонст = Нрег(АдоКонст);
Если АдоКонст = «adcmdtext» тогда возврат 1; //для оператора T-SQL
ИначеЕсли АдоКонст = «adcmdtable» тогда возврат 2;
ИначеЕсли АдоКонст = «adcmdstoredproc» тогда возврат 4; //для хранимой процедуры

Иначе Возврат 8; //adcmdunknown
КонецФункции
По умолчанию при создании экземпляра AdoDB.Command устанавливается тип adCmdUnknown (8)
Пример:
cmd.CommandType = ТипКомандыАДО(«adCmdStoredProc»);
Существенного ускорения работы при указании типа команды я не заметил, но всегда указываю его, считая это правилом хорошего тона.
Если используется хранимая процедура с параметрами, тогда необходимо добавить их в коллекцию Parameters объекта ADODB.Command:
Параметры создаются с помощью функции CreateParameter объекта ADODB.Command
CreateParameter (Name, Value_Type, Param_type, Param_Value)
Где Name – имя параметра. Как оно указано в хранимой процедуре
Value_Type – тип значения параметра
Param_Type – тип параметра (Input или Output)
Param_Value – собственно значение
Для определения типа значения параметра и типа параметра я использую функции КонстантаАДО() и ТипПараметраАДО() соответственно, прописанные в глобальный модуль:
Функция КонстантаАДО( Конст ) Экспорт
АдоКонст = НРег(Конст);
Если АдоКонст = «adEmpty» тогда Возврат 0;
иначеесли АдоКонст = «adtinyint» тогда Возврат 16;
иначеесли АдоКонст = «adsmallint» тогда Возврат 2;
иначеесли АдоКонст = «adinteger» тогда Возврат 3;
иначеесли АдоКонст = «adbigint» тогда Возврат 20;
иначеесли АдоКонст = «adunsignedtinyint» тогда Возврат 17;
иначеесли АдоКонст = «adunsignedsmallint» тогда Возврат 18;
иначеесли АдоКонст = «adunsignedint» тогда Возврат 19;
иначеесли АдоКонст = «adunsignedbigint» тогда Возврат 21;
иначеесли АдоКонст = «adsingle» тогда Возврат 4;
иначеесли АдоКонст = «addouble» тогда Возврат 5;
иначеесли АдоКонст = «adcurrency» тогда Возврат 6;
иначеесли АдоКонст = «addecimal» тогда Возврат 14;
иначеесли АдоКонст = «adnumeric» тогда Возврат 131;
иначеесли АдоКонст = «adboolean» тогда Возврат 11;
иначеесли АдоКонст = «aderror» тогда Возврат 10;
иначеесли АдоКонст = «aduserdefined» тогда Возврат 132;
иначеесли АдоКонст = «advariant» тогда Возврат 12;
иначеесли АдоКонст = «adidispatch» тогда Возврат 9;
иначеесли АдоКонст = «adiunknown» тогда Возврат 13;
иначеесли АдоКонст = «adguid» тогда Возврат 72;
иначеесли АдоКонст = «addate» тогда Возврат 7;
иначеесли АдоКонст = «addbdate» тогда Возврат 133;
иначеесли АдоКонст = «addbtime» тогда Возврат 134;
иначеесли АдоКонст = «addbtimestamp» тогда Возврат 135;
иначеесли АдоКонст = «adbstr» тогда Возврат 8;
иначеесли АдоКонст = «adchar» тогда Возврат 129;
иначеесли АдоКонст = «advarchar» тогда Возврат 200;
иначеесли АдоКонст = «adlongvarchar» тогда Возврат 201;
иначеесли АдоКонст = «adwchar» тогда Возврат 130;
иначеесли АдоКонст = «advarwchar» тогда Возврат 202;
иначеесли АдоКонст = «adlongvarwchar» тогда Возврат 203;
иначеесли АдоКонст = «adbinary» тогда Возврат 128;
иначеесли АдоКонст = «advarbinary» тогда Возврат 204;
иначеесли АдоКонст = «adlongvarbinary» тогда Возврат 205;
иначе возврат 0;
конецесли;
КонецФункции
Функция ТипПараметраАДО( Конст ) Экспорт
АдоКонст = НРег(Конст);
Если АдоКонст = «adparamunknown» тогда Возврат 0;
иначеесли АдоКонст = «adparaminput»тогда Возврат 1;
иначеесли АдоКонст = «adparamoutput»тогда Возврат 2;

иначеесли АдоКонст = «adparaminputoutput»тогда Возврат 3;
иначеесли АдоКонст = «adparamreturnvalue»тогда Возврат 4;
КонецЕсли;
КонецФункции
Пример:
prm1 = Cmd.CreateParameter(«ID», КонстантаАДО(«adWChar»),
ТипПараметраАДО(«adParamInput»), 9, Код);
Cmd.Parameters.Append( prm1 );
Prm2 = Cmd.CreateParameter(«OUTID», КонстантаАДО(«adWChar»),
ТипПараметраАДО(«adParamOutpt»), 9, Код);
Cmd.Parameters.Append( prm2 );
Для передачи параметров в хранимую процедуру необходимо описать все параметры в том порядке и с теми типами, как они описаны в хранимой процедуре.
Реально я использовал передачу и возврат параметров типа AdChar, AdWChar (строковые), AdDate (дата), AdInteger, AdTinyInt ( целочисленные). Параметры типа Numeric приходилось передавать, конвертируя их в строки.
3. Получение и обработка результатов
Результаты можно получать следующими путями:
— набор данных возвращается функцией Execute объекта ADODB.Command
— отдельные значения можно передавать из хранимой процедуры через параметры типа OUTPUT.
Пример:
Rs = CreateObject(”ADODB.RecordSet”);
Rs = Cmd.Execute; //Выполнение и получение набора данных
ВыхПарам = Cmd.Parameters(1).Value; //чтение параметра типа OUTPUT после выполнения.
— Нумерация параметров внутри коллекции Parameters начинается с 0 !!!
— Подготовленные 1 раз параметры можно использовать повторно, присваивая им значение через свойство Value.
Результирующий набор записей может обрабатываться в цикле с начала до конца, обращаясь к полям по их именам. В наборе записей не должны присутствовать поля типа Numeric — их необходимо преобразовывать в строковые непосредственно внутри SELECT или хранимой процедуры.
Пример:
Rs.MoveFirst();
Пока Rs.EOF() = 0 do
Value1 = Rs.Fields(«FieldName1”).Value;
Value2 = Rs.Fields(«FieldName2”).Value;
Rs.MoveNext();
КонецЦикла;
После того, как набор записей уже не нужен, его нужно закрыть: