如何设置连接字符串,我只在一个地方更改它?

时间:2010-08-05 13:31:58

标签: c# asp.net connection-string

如何制作代码

string connStr = ConfigurationManager.ConnectionStrings "staceys_cakesConnectionString"].ConnectionString; 

一般工作而不需要staceys_cakesConnectionString?或者我怎样才能将它设置在其他地方,所以我只需要在更改它时将其更改为一个位置?

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Data; 
using System.Data.SqlClient; 
using System.Configuration; 

namespace SC1.Models.DAL 
{ 
  public class CategoryDAL 
  { 
    public CategoryDAL() 
    { 
    } 
    string connStr = ConfigurationManager.ConnectionStrings["staceys_cakesConnectionString"].ConnectionString; 

    // select all 
    public DataSet Select() 
    { 
      SqlConnection sqlConnection1 = new SqlConnection(); 
      string SqlString = "select * from Categories"; 
      SqlDataAdapter da = new SqlDataAdapter(SqlString, connStr); 
      DataSet ds = new DataSet(); 
      da.Fill(ds, "Categories"); 
      return (ds); 
    } 
    // save 
    // insert 
    // update 
    // delete 

  } 
} 

页面功能示例我如何使用您的建议@Adam或其他任何人更好地制作这个功能?

   // List
    public List<page> Select()
    {
      List<page> _list = new List<page>();
      string  SqlStatement = "select * from Pages";
      SqlConnection thisConnection = new SqlConnection(connStr);
      // Open the Connection
      thisConnection.Open();

      var thisCommand = thisConnection.CreateCommand();
      thisCommand.CommandText = SqlStatement;
      SqlDataReader thisReader = thisCommand.ExecuteReader();

      while (thisReader.Read())
      {
        // Create a new instance of the Current Page Object
        page currentPage = new page();
        // Fill the instance of the Current Page Object
        currentPage.PageID = Convert.ToInt32(thisReader["PageID"]);
        currentPage.ParentID = Convert.ToInt32(thisReader["ParentID"]);
        currentPage.CategoryID = Convert.ToInt32(thisReader["CategoryID"]);
        currentPage.Name = thisReader["Name"].ToString();
        currentPage.PageHTMLContent = thisReader["PageHTMLContent"].ToString();
        currentPage.NavigationText = thisReader["NavigationText"].ToString();
        currentPage.TopMenu = Convert.ToBoolean(thisReader["TopMenu"]);
        currentPage.SubMenu = Convert.ToBoolean(thisReader["SubMenu"]);
        currentPage.DisplayOrder = Convert.ToInt32(thisReader["DisplayOrder"]);
        currentPage.Active = Convert.ToBoolean(thisReader["Active"]);
        // Add the instance of the Current Page Object to the List<>.
        _list.Add(currentPage);
      }
      // Close the Database
      thisConnection.Close();
      return _list;      

    }

4 个答案:

答案 0 :(得分:6)

只需使用常量。就此而言,只需使用静态属性并以此方式获取字符串。

public static class ConnectionStrings
{
    public static string StacyesCakes 
    { 
        get 
        { 
            ConfigurationManager.ConnectionStrings[
                  "staceys_cakesConnectionString"].ConnectionString; 
        }
    }
}

这将允许您执行以下操作:

using(var conn = new SqlConnection(ConnectionStrings.StaceysCakes))
{
    ...
}

或(只调整现有代码):

public DataSet Select() 
{ 
  SqlConnection sqlConnection1 = new SqlConnection(); 
  string SqlString = "select * from Categories"; 
  SqlDataAdapter da=new SqlDataAdapter(SqlString,ConnectionStrings.StaceysCakes); 
  DataSet ds = new DataSet(); 
  da.Fill(ds, "Categories"); 
  return (ds); 
} 

(您不需要sqlConnection1;您没有在任何地方使用它。)

但请注意,由于SqlDataAdapter实现了IDisposable并且在执行此代码后您已完成它,因此应将其括在using块中。

我会把你的函数改写成这样的东西:

public DataSet Select() 
{ 
  using(SqlDataAdapter da = new SqlDataAdapter(
                            "select * from Categories",
                            ConnectionStrings.StaceysCakes))
  {
      DataSet ds = new DataSet(); 
      da.Fill(ds, "Categories"); 
      return ds;
  }
}

答案 1 :(得分:1)

在DataLayer中常用的类中使用const是个好主意:

public class CategoryDAL 
{ 
   public const string connStringName =  "staceys_cakesConnectionString";

   // the rest 
}

并在您的课程中使用标识符connStringName

我已将其公开,以便在课堂外以CategoryDAL.connStringName方式提供,但很少有必要这样做。

这可能看起来有点像只是改变了问题,但你获得了良好的智能感知和重构支持。

答案 2 :(得分:0)

根据您的应用程序类型,将其放在app.config或web.config文件中。然后,您可以使用ConfigurationManager类来访问它。

这是一个有用的link

答案 3 :(得分:0)

您可以在应用程序配置文件中保存ConnectionString。下一个链接更多地解释了它。

Connection String