Прочитать XML-файл с подробностями строки подключения в - PullRequest
1 голос
/ 02 марта 2011

Я создал XML-файл в «Моем проекте», используя форму, которая содержит сведения о строке подключения, необходимые для запуска моей программы. XML форматируется так:

<xml encoding="UTF8">
<configuration>
   <appsettings>
     <servername>localhost</servername>
     <serverport>1433</serverport>
     <username>sa</username>
     <password>thepassword</password>
     <database>NorthWind</database>
   </appsettings>
</configuration>
</xml>

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

Ответы [ 2 ]

2 голосов
/ 02 марта 2011

Лично я бы предложил использовать встроенный (и предпочтительный способ) сделать это в .NET. Есть два аспекта этого: 1. Используйте файлы application.config (или web.config для ASP.NET) 2. Используйте раздел ConnectionStrings в этих файлах конфигурации.

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

Так, например, ваш файл application.config (в Visual Studio щелкните правой кнопкой мыши узел вашего проекта в обозревателе решений и выберите «Добавить | Новый элемент ...», когда откроется это диалоговое окно, выберите «Файл конфигурации приложения»)

<?xml version="1.0"?>
<configuration>
  <connectionStrings>
    <add name="Orion" providerName="System.Data.SqlClient" connectionString="server=.\SQLEXPRESS;database=Orion;Integrated Security=True"/>
  </connectionStrings>
</configuration>

Обратите внимание на раздел connectionStrings. Существует одна запись (дочерний узел узла ConnectionStrings). Вы можете указать там любое имя, которое вам нужно, и атрибут connectionString этого узла будет содержать нужную вам строку подключения. Я предполагаю, что вы знаете, какой должна быть строка подключения.

Теперь в вашем приложении вы бы сделали что-то вроде этого:

  internal partial class DataModule
  {
    private DbProviderFactory DbProviderFactory { get; set; }
    private DbConnection DbConnection { get; set; }

    public DataModule()
    {
      var connectionStringSettings = ConfigurationManager.ConnectionStrings["Orion"];
      DbProviderFactory = DbProviderFactories.GetFactory(connectionStringSettings.ProviderName);
      DbConnection = DbProviderFactory.CreateConnection();
      DbConnection.ConnectionString = connectionStringSettings.ConnectionString;
    }
  }

Обратите внимание, в этом коде я ссылаюсь на «имя» соединения «Орион» в данном случае. Обязательно измените его на любое имя, которое вы дали своему подключению.

Этот дизайн также позволяет вам иметь несколько «соединений», определенных в вашем конфигурационном файле, и в вашем приложении вы можете выбрать любое из них (или более). Так, например:

  <connectionStrings>
    <add name="Orion" providerName="System.Data.SqlClient" connectionString="server=.\SQLEXPRESS;database=Orion;Integrated Security=True"/>
    <add name="MyOtherOrion" providerName="System.Data.SqlClient" connectionString="server=myserver\myinstancename;database=Orion;uid=myusername;password=mypassword"/>
  </connectionStrings>

Тогда в вашем приложении вы можете просто переключиться на использование соединения «MyOtherOrion».

1 голос
/ 02 марта 2011

Правильный способ - использовать App.Config так: http://msdn.microsoft.com/en-us/library/ms254494(v=VS.100).aspx

Если это не вариант, вы можете использовать Linq To Xml, если хотите (нулевые проверки и т. Д., Кроме): Да, и замените «MyConnectionStringFormatString» на правильный формат строки подключения:).

XDocument doc = XDocument.Parse(xml);

String conStr = 
    doc.Root
    .Elements("configuration")
    .Elements("appsettings")
    .Select(
        s => 
            String.Format("MyConnectionStringFormatString {0}-{1}-{2}-{3}-{4}",
            s.Elements("servername").Single().Value,
            s.Elements("serverport").Single().Value,
            s.Elements("username").Single().Value,
            s.Elements("password").Single().Value,
            s.Elements("database").Single().Value));    
...