2011-07-02 5 views
0
public void GetUsersDetails(Guid i) 
{ 
    StringBuilder sb = new StringBuilder(); 
    sb.Append("DECLARE @NumberOfThreadsByOneUser smallint;"); 
    sb.Append(" SET=(SELECT COUNT(t.threadID)"); 
    sb.Append(" FROM Threads AS t"); 
    sb.Append(" INNER JOIN Users AS u ON u.UsersID=t.UsersID"); 
    sb.Append(" WHERE [email protected])"); 

    string myConnectionString = AllQuestionsPresented.connectionString; 
    using (SqlConnection conn = new SqlConnection()) 
    { 
     SqlCommand cmd = new SqlCommand(sb.ToString(), conn); 
     cmd.Parameters.Add("UserID", SqlDbType.UniqueIdentifier).Value = i; 
     SqlDataReader dr = cmd.ExecuteReader(); 


dr.Read(); 
    QA = (Int32.TryParse(dr["NumberOfThreadsByOneUser"].ToString(), out result3)) ? int.Parse(dr["Replies"].ToString()) : 0; 
    } 
} 

SQL 문을 작성 했으므로 사용자가 제출 한 스레드 수를 얻고 싶습니다. 그래서 smallint 변수를 선언했습니다. 하지만 내 SQL 구문의 구문에 대해 잘 모르겠습니다. 결과에서 읽으 려합니다. 품질 보증 INT 속성이 카운트 번호를 받아야한다 ..SQL Count() 함수입니다. 및 변수 설정

답변

4

사용 select 대신 set의 쿼리를 기반으로 변수 할당 :

sb.Append(" SELECT @NumberOfThreadsByOneUser = (SELECT COUNT(t.threadID)"); 

는 출력 변수를 사용하려면, SQL에서 선언하지 않지만 를 통과 :

cmd.Parameters.Add("@NumberOfThreadsByOneUser").ParameterDirection = 
    ParameterDirection.InputOutput; 

그런 다음 명령이 실행 한 후, 당신은 그것을 검색 할 수 있습니다

var result = cmd.Parameters("@NumberOfThreadsByOneUser").Value 

독자 접근법을 사용하여 SQL에서 변수를 선언하지 말고 매개 변수로 전달하지 마십시오.

sb.Append(" SELECT COUNT(t.threadID) as ThreadCount"); 
.... 
sb.Append(" WHERE [email protected]"); // <-- no closing) 

그리고 좋아 읽어

var QA = (int) cmd.ExecuteScalar(); 

또는 :

var read = cmd.ExecuteReader(); 
read.Read(); // <-- Gotta move to the first row 
var QA = (int) read["ThreadCount"]; // <-- or whatever your column alias is