【问题标题】:Read XML File with Connection String Details in读取带有连接字符串详细信息的 XML 文件
【发布时间】:2011-03-02 00:04:03
【问题描述】:

我在我的项目中创建了一个 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 文件。有人可以告诉我如何在我的主表单中将其写入连接字符串。

【问题讨论】:

  • 什么都没试过,只是不知道如何从上面的 XML 参数构建连接字符串有点眼花缭乱我是 C# 新手

标签: c# sql xml string connection


【解决方案1】:

就个人而言,我建议使用内置(和首选方式)在 .NET 中执行此操作。这有两个方面: 1. 使用 application.config 文件(或 ASP.NET 的 web.config) 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;
    }
  }

注意在这段代码中,我在这种情况下引用了连接“Orion”的“名称”。请务必将其更改为您为连接提供的任何名称。

此设计还允许您在配置文件中定义多个“连接”,并且在您的应用程序中您可以选择使用其中的任何一个(或多个)。比如:

  <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”连接。

【讨论】:

    【解决方案2】:

    正确的方法是像这样使用 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));    
    

    【讨论】:

    • 嗨,戴夫,谢谢,所以如果我没看错,我需要将 MyConnectionStringFormatString 替换为“Data Source=servername,serverport;Network Library=DBMSSOCN;Initial Catalog=dataBase;用户 ID=用户名;密码=密码;"
    • 是的,但是使用 {0} 作为第一个返回的(服务器名称),使用 {1} 作为第二个(服务器端口)等等。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    相关资源
    最近更新 更多