2014-05-14 6 views
0

내 응용 프로그램에 ASP.Net WebserviceApplication을 사용하고 있으며 SQL Server와 통신 중입니다. 모든 사용자의 SQL 트랜잭션 후에 SQLConnection을 닫아야합니까, 매번 열어야합니까?Webservice의 모든 트랜잭션에 대해 SQLConnection을 닫아야합니까?

예 :

public void Connection() 
    { 
     if (connection == null) 
      connection = new SqlConnection(ConfigurationManager.ConnectionStrings["Conn"].ToString()); 

     if (connection.State == ConnectionState.Closed) 
      connection.Open(); 
     else if (connection.State == ConnectionState.Broken) 
     { 
      connection.Close(); 
      connection.Open(); 
     } 
    } 

    [WebMethod] 
    public long GetUsersRankMonthly(string userName) 
    { 
     Connection(); 
     SqlCommand command = new SqlCommand("Select scores.Rank From (SELECT ROW_NUMBER() OVER(ORDER BY Score DESC) AS Rank,Score,NickName,ID FROM teatalay.TopScoresGeneral) scores Where UserName = @userName", connection); 
     command.Parameters.Add(new SqlParameter("@userName", userName)); 

     var result = (long?)command.ExecuteScalar(); 

     return result.HasValue ? result.Value : -1; 
    } 

감사합니다.

답변

3

sql 명령을 사용할 때 using 문으로 트랜잭션을 래핑하십시오. ASP.NET에서 SQL 연결 풀링을 처리하도록합니다. 그것은 당신의 코드보다 더 세련됩니다. 가능한 모든 것을 압축하고 서버에 대한 연결 수가 성능 문제의 원인인지 확인하는 경우에만 수정하십시오.

편집

일반적으로
using (var cnn = new SqlConnection("connection string here")){ 
    using (var cmd = new SqlCommand("SProc or parametized text", cnn)){ 
     cnn.Open(); 
     // do stuff 
     cnn.Close(); 
    } 
} 
+0

답변 해 주실 수 있습니까? –

+0

@ TuğrulEmreAtalay 가장 좋은 방법은 필요에 따라 연결을 연 다음 나중에'using' 블록 안에서 닫는 것입니다. 연결을 닫으면 실제로 닫히지 않지만 "[연결 풀] (http://msdn.microsoft.com/en-us/library/8xx3tyca%28v=vs.110%29.aspx)로 돌아갑니다. "그래서 연결이 다시 열리면 다시 사용할 수 있습니다. –

+0

감사합니다. @Josh –

1

연결을 처리하는 블록

if (connection.State == ConnectionState.Closed) 
에게 또한 using를 사용하는 것이 좋습니다

당신이 ConnectionState.Connecting

에있을 수 있기 때문에 그것은 당신에게 연결을 열 것 guarranty하지 않습니다

using 문을 사용하면 작업이 완료되면 연결이 끊어지지 않습니다.

public long GetUsersRankMonthly(string userName) 
    { 
    connection = new SqlConnection(ConfigurationManager.ConnectionStrings["Conn"].ToString()); 
    using (connenction) 
     { 
     connenction.Open(); 
     SqlCommand command = new SqlCommand("Select scores.Rank From (SELECT ROW_NUMBER() OVER(ORDER BY Score DESC) AS Rank,Score,NickName,ID FROM teatalay.TopScoresGeneral) scores Where UserName = @userName", connection); 
     using (command) 
     { 
     .......... 
     ...... 
     } 
     }      

    }