2010-08-05 2 views
1

는 어떻게 staceys_cakesConnectionString 필요 일반적 아닌 코드어떻게 한 곳만 변경하면 연결 문자열을 설정할 수 있습니까?

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

일을 할 수 있습니까? 아니면 다른 곳으로 설정할 수 있도록 어떻게 변경할 수 있습니까?

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;  

    } 

답변

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 필요하지 않습니다, 당신이있어 사용하지 않는 곳).

그러나 SqlDataAdapterIDisposable을 구현하고이 코드를 실행 한 후에 완료 했으므로 using 블록으로 묶어야합니다.

나는 이런 식으로 함수를 다시 작성합니다 :

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

매번 사용하지 않아도되도록 웹 설정에 클래스를 추가하는 방법이 있습니까? –

+0

@Nathan : 사용법은 매우 다른 목적으로 사용됩니다. –

+0

정적이므로 코드를 참조하기 위해 1 줄만 사용하기 때문에 위의 예를 그대로 사용하는 것이 좋습니다. – Jeroen

0

응용 프로그램 유형에 따라 app.config 또는 web.config 파일에 저장하십시오. 그런 다음 ConfigurationManager 클래스를 사용하여 액세스 할 수 있습니다.

는 여기 일반적으로 귀하의 데이터 영역에 사용되는 클래스의 CONST을 사용하는 것이 좋습니다 link

+2

Err, that 's * doing *. 그는 어디서나 동일한 열쇠를 전달한다는 요구 사항을 제거하는 방법을 알고 싶어합니다. –

1

도움 :

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

    // the rest 
} 

및 클래스에 사방 식별자 connStringName를 사용합니다.

나는 외부에서 공개되었으므로 클래스 외부에서 CategoryDAL.connStringName으로 사용할 수는 있지만 거의 필요하지 않습니다.

문제가 조금 옮겨가는 것처럼 보일 수도 있지만 인텔리 센스와 리팩터링 지원이 좋습니다.

+0

나는 Dot Net을 처음 접했고 어디에서 web.config에 넣어야합니까? –

+0

Web.config에서 이미 정의한 내용이 있습니다. 그러면 해당 정의에 문자열 키가 남습니다. const 내 대답은 DAL 클래스 어딘가에 간다. 내가 편집 할게. –

0

당신은 당신의 응용 프로그램 구성 파일에 ConnectionString을 저장 할 수있다. 다음 링크에서 자세히 설명합니다.

Connection String

+1

OP가 이미 그 일을하고 있습니다. –

+0

죄송 합니다만, 정적 속성이나 메서드가 가장 좋은 답변 인 것 같습니다. – Mario

관련 문제