2010-12-06 5 views
0

사용자 ID가 특정 ID와 같은 경우 바구니 ID를 선택하려면이 SQL Select 문이 있어야합니다. ,이 시나리오에서 ExecuteScalar를 어떻게 사용할 수 있습니까?

BasketPage.SelectCommand="SELECT BasketID FROM tblBasket WHERE (UserID = '9f96bd94-91b9-4328-8214-4eac179c3a26')" 

var BasketID = BasketPage.ExecuteScalar().ToString(); 

을하지만, 분명히 나는 ​​그것을 사용하기 위해서는 SQL 명령의 새 인스턴스를 만들 필요가 :

나는 변수에 쿼리의 결과를 저장하려면, 그래서 내가 할 수 있었다 생각 어떻게 BasketPage Select 명령을 위해 이것을 할 수 있습니까? SQL Server를 사용하는 가정

+1

왜 SQL 명령의 새 인스턴스를 만들어야한다고 생각하십니까? –

+0

새 인스턴스를 만들지 않으면 메서드가 나타나지 않거나 사용하지 않기 때문에. –

+1

'BasketPage' 클래스의 코드는 무엇입니까? 실제로'SelectCommand' 속성이 있습니까? 나는이 접근법,'BasketPage' 클래스의 코드 샘플과 그 안에있는 ADO.NET을 사용하는 방법을 얻지는 않습니다. =) –

답변

2

같은 시도,하지만 당신은을 사용하여 기본 데이터베이스에 대해이 쿼리를 수행 할 수있는 방법은 없습니다 ExecuteScalar 방법. 가정 SQL 서버 :

using (var connection = new SqlConnection(connString)) 
    using (var command = connection.CreateCommand()) { 
     command.CommandText = "select BasketId from tblBasket where UserId = N'9f96bd94-91b9-4328-8214-4eac179c3a26'"; 
     command.CommandType = CommandType.Text; 

     try { 
      var basketId = (string)command.ExecuteScalar(); // Assuming BasketId is a string, since you called ToString() in your question. 
     } finally { 
      command.Dispose(); 
      connection.Dispose(); 
     } 
    } 
+0

왜 마침내 사용하고 있습니까? –

+0

이것은 처리되지 않은 예외를 버블 링시키는 것이 더 나은 예외 처리 때문이며, 그렇지 않으면 처리 할 수있는 것이 있습니다. try ... catch보다 try ... finally를 쓰는 것이 더 좋습니다. 다시 예외를 던지거나 새로운 스택을 던지려고합니다. 즉 스택 추적 때문입니다. 어쨌든'finally' 절을 쓰는 동안, 공백으로 두지 않고 처분하는 줄을 쓰는 반면, 나는이 객체들이 처분 될 것이라는 것을 알고 있습니다. 그래서, 나는'IDisposable'으로 일하지 않을 날이 왔을 때, 나는 자원을 어느쪽으로 든 자유롭게 할 생각을해야만합니다. –

+0

내가 올바르게 이해한다면, 결국 당신이 "... 자원을 어느쪽으로 든 자유롭게 할 수 있다고 생각하게 만들기 때문에." "... 'IDisposable의"Ok와 함께 일하지 않을 때가 오면 왜'using '문으로 귀찮게해야합니까? –

1

는 당신은 내가 당신의 BasketPage 모르는

BasketPage.SelectCommand = 
     new SqlCommand("SELECT BasketID FROM tblBasket WHERE (UserID = '9f96bd94-91b9-4328-8214-4eac179c3a26')", 
         "yourconnectionstring"); 
관련 문제