none
Visual studio 2008, подключения к данным RRS feed

  • Вопрос

  • У меня проект в Visual Studio 2008 (книга Excel, язык - visual basic). В нем есть подключение к SQL Server. В данный момент все находится на локальной машине и, естественно, подключается. Но в дальнейшем понадобится, чтобы имя источника данных было возможно изменить во время выполнения программы. Это возможно? Ранее мне было посоветовано использовать класс Configuration Manager, но у меня не получается самостоятельно разобраться с его использованием. Мог бы кто-нибудь понятно объяснить на простом уровне, что и как мне нужно сделать в данной ситуации? Или посоветовать какой-нибудь пример?

Ответы

  • Совсем забыл...примерно так это будет на C#:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <appSettings />
      <configProtectedData />
      <system.diagnostics />
      <system.windows.forms />
      <uri />
      <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
      </startup>
      <connectionStrings>
        <add name="MyCnnString" connectionString="Новое значение" />
      </connectionStrings>

    using System.Configuration;
    
    namespace WriteConfig
    {
      class Program
      {
        static void Main(string[] args)
        {
          Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
          config.ConnectionStrings.ConnectionStrings["MyCnnString"].ConnectionString = "Новое значение";
          config.Save(ConfigurationSaveMode.Modified, true);
        }
      }
    }

    Модератор

Все ответы

  • "Но в дальнейшем понадобится, чтобы имя источника данных было возможно изменить во время выполнения программы. Это возможно?" - да, возможно. Примерно так:

    ConnectionStringSettings connection = 
        System.Configuration.ConfigurationManager.ConnectionStrings["Имя строки подключения"];

    Модератор
  • Извините, а разве это visual basic? Класс ConfiguratioManager недоступен, System.Configuration импортировано. Как мне быть? Как мне на visual basic добраться до этой строки-то?
  • И класс ConnectionStringSettings тоже недоступен
  • Да, я и забыл что у вас VB. Чтобы этот класс был доступен надо подключить сборку System.Configuration.dll. А вот пример и для VB.
    Модератор
  • В этом примере, насколько я вижу,  происходит чтение параметров подключения. А мне нужно их изменять (в частности connectionString).При попытке изменения появляется ошибка "Конфигурация только для чтения". Можно ли как-нибудь сделать возможным изменение?
  • Если ещё и записывать надо, то используйте класс Configuration.
    Модератор
  • В проекте изначально есть строка подключения с именем ndoConnectionString. До запуска программы я намеренно записываю другое значение DataSource в эту строку. А из кода пытаюсь поменять (в соответствии с подсказанным Вами примером):

            Dim config As System.Configuration.Configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)
            Dim connStringSettings As New ConnectionStringSettings()
            Dim connectionString As String
    
            connectionString = "Data Source=ВАСИЛИНА-ПК;Initial Catalog=ndo;Integrated Security=True"
            connStringSettings.Name = "ndoConnectionString"
            connStringSettings.ConnectionString = connectionString
            connStringSettings.ProviderName = "System.Data.SqlClient"
            config.ConnectionStrings.ConnectionStrings.Clear()
            config.ConnectionStrings.ConnectionStrings.Add(connStringSettings)
    
            Me.НоминалыTableAdapter.Fill(Me.NdoDataSet.Номиналы)

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

    Самой кажется, что что-то делаю не так. Можно как-нибудь добраться до конкретной строки и непосредственно ее параметры и менять? В примере я не нашла ничего подобного...

     
  • Да, еще не написала в фрагменте кода сохранение конфигурации config.Save(ConfigurationSaveMode.Full) после изменения. Но с этой строкой тоже не работает. Что я делаю не так?
  • На VB пример привести не могу, если хотите могу на C#. Одно только не могу понять, зачем вам программно записывать строку в конфиг, если она и так у вас доступна из кода. Вам нужно её просто использовать.
    Модератор
  • Ну вот использовать могу, а поменять в ней что-то не могу.
  • Если можете, то хотя бы на C# приведите пример, как получить доступ к этой строке и поменять в ней некоторые значения.
  • Совсем забыл...примерно так это будет на C#:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <appSettings />
      <configProtectedData />
      <system.diagnostics />
      <system.windows.forms />
      <uri />
      <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
      </startup>
      <connectionStrings>
        <add name="MyCnnString" connectionString="Новое значение" />
      </connectionStrings>

    using System.Configuration;
    
    namespace WriteConfig
    {
      class Program
      {
        static void Main(string[] args)
        {
          Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
          config.ConnectionStrings.ConnectionStrings["MyCnnString"].ConnectionString = "Новое значение";
          config.Save(ConfigurationSaveMode.Modified, true);
        }
      }
    }

    Модератор