Как настроить строку подключения, где я могу изменить только одно место? - PullRequest
1 голос
/ 05 августа 2010

Как мне сделать код

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 

  } 
} 

Пример функции страницы У меня есть, как я могу сделать это лучше, используя ваше предложение @ Адам или кто-то еще?

   // 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 ]

6 голосов
/ 05 августа 2010

Просто используйте константу.Для этого просто используйте статическое свойство и получите строку таким образом.

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 голос
/ 05 августа 2010

Рекомендуется использовать const в классе, который обычно используется в вашем DataLayer:

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

   // the rest 
}

и используйте идентификатор connStringName везде в вашем классе.

Я сделал его общедоступным, чтобы он был доступен вне класса как CategoryDAL.connStringName, но это будет редко необходимо.

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

0 голосов
/ 05 августа 2010

Вы можете сохранить ConnectionString в файле конфигурации вашего приложения.Следующая ссылка объясняет больше об этом.

Строка соединения

0 голосов
/ 05 августа 2010

В зависимости от типа вашего приложения, поместите его в файл app.config или web.config.Затем вы можете использовать класс ConfigurationManager для доступа к нему.

Вот полезная ссылка

...