从Web.config中获取连接字符串在asp.net中

30

我想知道在ASP.NET中从web.config文件获取连接字符串的方法。

我只知道以下方式。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;

    namespace Sherserve.DataAccessLayer
    {
        public class DBGateway
        {
            public static string conString;

            public DBGateway()
            {
                conString = ConfigurationManager.ConnectionStrings["test"].ToString();
            }
        }
    }

2
应该是 ConfigurationManager.ConnectionStrings["test"].ConnectionString; 但这大概是你唯一正确的方式。 - Shadow The Spring Wizard
那么这里有什么问题呢?conString = ConfigurationManager.ConnectionStrings["test"].ToString(); - Ammar Asjad
2
@Mitch 请查看 这个链接 - 您的评论对任何人都没有建设性。 - Shadow The Spring Wizard
@ Ammar 关于你的问题 - 没有什么绝对的错误,看看我的回答,我现在添加了更多关于这个问题的信息。 - Shadow The Spring Wizard
@ShadowWizard,我看到了你的回答... :) 你的回答增加了我的编程知识。 - Ammar Asjad
5个回答

47

使用ConfigurationManager.ConnectionStrings是唯一正确的方式,为了更加安全可靠地使用它,您可以使用以下代码:

public DBGateway()
{
    ConnectionStringSettings mySetting = ConfigurationManager.ConnectionStrings["test"];
    if (mySetting == null || string.IsNullOrEmpty(mySetting.ConnectionString))
        throw new Exception("Fatal error: missing connecting string in web.config file");
    conString = mySetting.ConnectionString;
}

如果连接字符串丢失,这将抛出有用的错误,而不是晦涩难懂的“null对象”错误。

值得一提的是,ConnectionStringSettings类重写了ToString()方法:

public override string ToString()
{
    return this.ConnectionString;
}

这意味着使用ConfigurationManager.ConnectionStrings["test"].ToString()ConfigurationManager.ConnectionStrings["test"].ConnectionString相同,但你最好执行一些健全性检查,个人认为使用实际属性看起来更加清晰,而不是依赖于类来提供它。


在这行代码 conString = mySetting.ConnectionString; 中,conString 是从哪里来的? - sam
@sam 类的静态字段:public static string conString;,请参见问题中的代码。 - Shadow The Spring Wizard
在我的情况下,代码总是返回 null,并且我在 web.config 中也有连接字符串。@ShadowWizard - Akash Preet
@AkashPreet,你可能使用了错误的连接字符串名称,或者你看到的web.config文件并不是实际加载的web.config文件,例如存在多个不同的web.config文件。否则就没有办法得到null值。 - Shadow The Spring Wizard

9

以下是整体解决方案:

string constring = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionStringName"].ConnectionString;
SqlConnection con = new SqlConnection(constring);
DataSet ds = new DataSet();
try
 {
   SqlDataAdapter dataAdapter = new SqlDataAdapter(query, con);
   SqlCommandBuilder commandBuilder = new SqlCommandBuilder(dataAdapter);
   con.Open();
   dataAdapter.Fill(ds, "table");
   return ds;
 }
 catch (Exception ex)
  {
  }
    finally
    {
        if (con.State == System.Data.ConnectionState.Open)
            con.Close();
    }

这是如何将数据库记录提取到数据表中的方法。希望这正是你所寻找的。

1
我只想知道获取连接字符串的方法。 - Ammar Asjad

2
尝试一下。
 string ConString = System.Configuration.ConfigurationManager.ConnectionStrings[ConfigurationManager.ConnectionStrings.Count -1].ConnectionString;

0
以下代码适用于我。 我已添加了异常处理,以防在 web.config 中找不到 connectionString。

web.config:

 <configuration>
  <connectionStrings>
    <add name="DBConnection" connectionString="Data Source=myaddress;Initial Catalog=MyCatalog;User ID=myuser;Password=pass;Encrypt=True;TrustServerCertificate=False"
         providerName="System.Data.SqlClient" />
  </connectionStrings>
</configuration>

在我的连接类中:
static internal string GetSqlConnectionString(){

try {
    ConnectionStringSettings mySetting = ConfigurationManager.ConnectionStrings("DataBaseConnection");
    if (mySetting == null)
        throw new Exception("Database connection settings have not been set in Web.config file");

    return mySetting.ConnectionString;

} catch (Exception ex) {
    throw;
}}

这并没有提供问题的答案。如果要批评或请求作者澄清,请在他们的帖子下留言 - 您始终可以在自己的帖子上发表评论,并且一旦您拥有足够的声望,您将能够评论任何帖子 - help-info.de

0
我在我的WebAssistant类中有一个方法。 我在appSettings中有一个包含我的Web应用程序名称的键,请检查下面的行:
<add key="DOMAIN_NAME" value="mRizvandi.com"/>

我的连接名称始终采用“DomainName”+“DBConnectionString”的模板,例如:

<add name="mRizvandiDBConnectionString" connectionString=...

好的,一切准备就绪,可以在不传递任何字符串的情况下获取连接字符串。

    public static string GetDBConnectionString()
    {
        string retValue = "";
        string domainUrl = "";
        string connectionKey = "";
        string dbConnectionString = "";

        domainUrl = GetDomainUrl();
        connectionKey = domainUrl.Substring(0, domainUrl.IndexOf(".")) + "DBConnectionString";
        dbConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings[connectionKey].ToString();
        retValue = dbConnectionString;

        return retValue;
    }

希望这对你有所帮助。


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