Идентичные строки подключения Microsoft SQL Server 2008: одна работает, другая возвращает повсеместную ошибку 26 - PullRequest
0 голосов
/ 18 января 2012

Я пишу приложение в Visual C ++ с использованием .NET 3.5 Framework, подключаясь к удаленному Microsoft SQL Server 2008 R2.

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

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

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

И я понятия не имею, почему.Я изучил строку, которую читает программа во время выполнения, и они идентичны.Вот блок кода, относящийся к этой проблеме:

StreamReader^ read_db_conn_string = File::OpenText(System::IO::Directory::GetCurrentDirectory() + "\\db_conn_string.txt");

            String^ db_conn_string = read_db_conn_string->ReadLine();
            read_db_conn_string->Close();

            bindingSource_Shop->DataSource = GetData("Select * From Shop", db_conn_string);
            dataGridView_Shop->DataSource = bindingSource_Shop;

Вот метод GetData:

    DataTable^ GetData( String^ sqlCommand, String^ connectionString )
   {
      SqlConnection^ Connection = gcnew SqlConnection( connectionString );
      SqlCommand^ command = gcnew SqlCommand( sqlCommand,Connection );
      SqlDataAdapter^ adapter = gcnew SqlDataAdapter();
      adapter->SelectCommand = command;
      DataTable^ table = gcnew DataTable;
      adapter->Fill( table );
      return table;
   }

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

    DataTable^ GetData(String^ sqlCommand)
   {
      String^ connectionString = "Data Source=SERVER\\SQLEXPRESS;Initial Catalog=Schedule;Persist Security Info=True;User ID=sa;Password=xxxxx";
      SqlConnection^ Connection = gcnew SqlConnection( connectionString );
      SqlCommand^ command = gcnew SqlCommand( sqlCommand,Connection );
      SqlDataAdapter^ adapter = gcnew SqlDataAdapter();
      adapter->SelectCommand = command;
      DataTable^ table = gcnew DataTable;
      adapter->Fill( table );
      return table;
   }

Боюсь, что это что-то действительно простое, но у меня просто нет понимания, чтобы это выяснить.

1 Ответ

0 голосов
/ 18 января 2012

Я заметил, что вы экранируете обратную косую черту в имени сервера с двойной обратной косой чертой, когда строка кода находится в коде, вы также делаете это в текстовом файле?Если это так, это может быть причиной проблемы, текстовый файл должен использовать обычные одиночные обратные слеши.

Кроме того, вы проверили, есть ли в начале вашего файла невидимая метка порядка байтов (которая может бытьдобавленный некоторыми текстовыми редакторами при сохранении), который включается в строку, которую вы читаете из него?

Вы можете попытаться открыть файл в шестнадцатеричном редакторе, чтобы определить, есть ли в нем что-то неожиданное.

Возможно, стоит использовать разделы connectionStrings или appSettings файла App.config, а не читать из текстового файла, поскольку это один из встроенных способов поместить настраиваемые строки подключения вваше заявление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...