2012-11-16 2 views
0

을 채우는 나는 DropDownList로 채울 다음과 같은 코드가 있습니다 그것을하는보다 효율적인 방법이 있는지 궁금 해서요DropDownList로

string strConn = ConfigurationManager.ConnectionStrings["PhoQL"].ConnectionString; 
using (SqlConnection con = new SqlConnection(strConn)) 
{ 
    DataSet ds = new DataSet(); 
    using (SqlDataAdapter myda = new SqlDataAdapter("SELECT [Abrv], [State] FROM [States]", con)) 
    { 
    myda.Fill(ds) 
    ddlShipState.DataSource = ds; 
    } 
} 
ddlShipState.DataTextField = "State"; 
ddlShipState.DataValueField = "Abrv"; 
ddlShipState.DataBind(); 

합니다. 내가 연결을 열거 나 닫을 필요가 없다는 것에 유의하십시오. 내보기에 차이가 있는지 궁금해. 더 효율적인 측면에서 내가 위에있는 것에 대한 최상의 코드 연습을 찾고 있습니다.

+0

제목을 편집했습니다. "[제목에"태그 "가 포함되어 있어야합니까?] (http://meta.stackexchange.com/questions/19190/)"합의가 "아니오, 그렇지 않아야합니다"로 표시되어야합니다. –

+0

"보다 효율적으로"어떻게? 당신은'SqlConnection'과'SqlDataAdapter'를'using' 블록들에 두어야 만합니다. 그러나 그것보다 "더 효율적"이라는 것이 무엇입니까? –

+0

효율적인 정의? 코드 줄? 속도? 당신의 코드는 제 겸손한 견해에서 꽤 효율적입니다. 그러나 그것은 정말로 당신의 요구가 무엇인지에 달려 있습니다. 이 코드는'using' 문을 사용하여 분명히 조금 더 깨끗하게 될 수 있지만, 괜찮습니다. – pyrocumulus

답변

0

알림 연결을 열거 나 닫을 필요가 없습니다.

아니요, 그러나 DataAdapter은 암시 적으로 수행합니다.

MSDN : 채우기가 호출되기 전에 IDbConnection을 닫은 경우

,이 에 열 데이터를 검색 한 후 마감했다. 채우기 이 연결되기 전에 연결이 열려 있으면 열려 있습니다.

Connection-Pooling (기본값)을 사용하는 경우 열기와 닫기가 비효율적이지 않습니다. 왜냐하면 con.Open은 "대기, 지금이 연결이 필요합니다"이며 con.Close은 "좋아, 이제 다른 곳으로 다시 사용할 수 있습니다. 끝났습니다"라는 의미입니다.

그래서 연결이 끝나면 항상 연결을 닫아야합니다. 그렇지 않으면 연결 풀이 매번 새로운 물리적 연결을 열어야 만 예외가 발생할 수 있습니다 (최대 기본 연결 수는 100입니다). 그러나 항상 성능이 저하됩니다.

처리하는 가장 좋은 방법은/닫기 연결 (모든 IDisposable)를 사용하여 인 using statement :

using(var con = new SqlConnection(ConfigurationManager.ConnectionStrings["PhoQL"].ConnectionString)) 
using(var cmd = new SqlCommand("SELECT [Abrv], [State] FROM [States]", con)) 
using(var da = new SqlDataAdapter(cmd)) 
{ 
    DataTable tbl = new DataTable(); 
    da.Fill(tbl); 
    ddlShipState.DataSource = tbl; 
    ddlShipState.DataTextField = "State"; 
    ddlShipState.DataValueField = "Abrv"; 
    ddlShipState.DataBind(); 
} 

((!) 참고 : 나는 대체 한 사용자는 "가벼운"DataTableDataSet)

+0

안녕하세요. Tim, 다음 http://stackoverflow.com/questions/13587474/asp-net-dropdownlist-getting-selectedvalue로 도와주세요. –

0

하는 경우 이 이상을하고있는 이상, 당신은 데이터 캐싱을 고려해야합니다

http://msdn.microsoft.com/en-us/library/aa478965.aspx

이렇게하면 10,000 명의 사용자가 있더라도 데이터베이스를 한 번만 사용할 수 있습니다.

관련 문제