如何在应用程序配置文件(app.config)中读取连接字符串? .NET 3.5

10

如何使用 .net API 从 app.config 文件中读取连接字符串信息?

平台为 .net 3.5

     <?xml version="1.0" encoding="utf-8" ?>
        <configuration>
            <connectionStrings>
                 <add connectionString="" providerName="" name=""/>
            </connectionStrings>
        </configuration> 
4个回答

13

我已经四处搜寻,但找不到你所提到的教程的更新链接。你是否有它的最新链接? - ecoe
@ecoe 我在Wayback Machine上找到了它。 - Justin

4
在配置文件中:
<add name="ConnectionName" connectionString="Data Source=xxxx\yyyy;Initial Catalog=MyDB;User ID=userName;Password=pwd" />

在C#代码中:
    using System.Configuration;

...

    string connectionString = ConfigurationManager.ConnectionStrings["ConnectionName"].ToString();

更好的方法是定义一个函数,并在代码中随处使用它:
public string getConnectionStringMyDB()
        {
            return ConfigurationManager.ConnectionStrings["ConnectionName"].ToString();
        }

2

如果name是一个字符串值,表示连接字符串的名称:

var connectionString = 
    ConfigurationManager.ConnectionStrings[name].ConnectionString;

在你的示例中,你没有为name提供值,所以在它能工作之前,你需要这样做。


0

这是我所做的。

我需要一个服务在启动时自动连接到 SQL Server 数据库。这意味着需要将数据库连接字符串的名称存储在注册表中,并且存储在注册表中的字符串必须对应于已定义的连接字符串。答案是一个小型 Winforms 应用程序,它管理了服务启动参数的注册表存储,其中存储的参数之一是 DB 连接字符串的名称。

我向由 Linq 创建的数据库上下文类添加了两个静态函数。一个方法枚举在 DB 项目的设置部分中定义的 DB 连接名称。第二个方法从提供的 DB 连接名称返回一个 DB 上下文。注册表管理应用程序调用枚举器方法以填充列表框,而 Windows 服务调用 GetDBContextFromConnectionName() 方法将从注册表检索到的 DB 连接名称转换为 DB 上下文。然后使用 DB 上下文进行 DB 访问。

这两种方法被放入了一个类文件中,该文件与由 Linq 创建的数据上下文类具有相同的名称。

结果是:

using System;
using System.Configuration;
using System.Collections.Generic;
using System.Collections;

namespace RepositoryProject
{
    public partial class RepositoryDataContext
    {
        /// <summary>
        /// Return a MS SQL-LINQ DB Context given the name of the DB Connection name defined in 
        /// Properties.Settings.Default area of the SQL-Linq project.
        /// </summary>
        /// <param name="dbConnectionName">The name of the prediefined DB Connection string</param>
        /// <returns>A SQL-Linq database context </returns>
        public static RepositoryDataContext GetDBContextFromConnectionName(string dbConnectionName)
        {
            string fullConnectionString = null;

            dbConnectionName = dbConnectionName.Trim();
            if (!String.IsNullOrEmpty(dbConnectionName))
            {
                SettingsPropertyCollection allConnectionStrings = global::Cognex.TA.Framework.Properties.Settings.Default.Properties;
                SettingsProperty connectionProperty = allConnectionStrings[dbConnectionName];
                if (null != connectionProperty)
                {
                    fullConnectionString = (string) connectionProperty.DefaultValue;
                    if (String.IsNullOrEmpty(dbConnectionName))
                    {
                        string msg = "";
                        msg += String.Format( "The connection string name, {0}, exists within the settings of the RepositoryDataContext class but creates an empty DB connection string.", dbConnectionName);
                        throw new ArgumentException(msg);
                    }
                }
                else
                {
                    string msg = "";
                    msg += String.Format( "The connection string name, {0}, does not exist within the settings of the RepositoryDataContext class.", dbConnectionName);
                    throw new ArgumentException(msg);
                }
            }
            else
            {
                string msg = "";
                msg += "The connection string name to the test repository cannot be null or empty.";
                throw new ArgumentException(msg);
            }

            return new RepositoryDataContext(fullConnectionString);

        }

        /// <summary>
        /// Return a list of all the DB Connection names defined in 
        /// Properties.Settings.Default area of the SQL linq project.
        /// </summary>
        /// <returns>A list of DB Connection name</returns>
        public static List<string> GetAllDBConnectionNames()
        {
            List<string> listONames = new List<string>();

            /*
             * within the the Linq-generated code (TestRepository.designer.cs) there is an empty constructor for
             * the data context which looks similar to this:
             *
             * public TestRepositoryDataContext() :
             * base(global::Framework.Properties.Settings.Default.DefaultConnectionString, mappingSource)
             * {
                  OnCreated();
             * }
             *
             * Duplicate that assembly name here
             */
            SettingsPropertyCollection allConnectionStrings = global::Framework.Properties.Settings.Default.Properties;
            foreach(SettingsProperty entry in allConnectionStrings)
            {
                if (entry.PropertyType.ToString().Equals("System.String"))
                {
                    listONames.Add(entry.Name);
                }
            }

            return listONames;
        }
    }
}

希望这能有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接