2016-11-01 2 views
1

저는 SQL에 익숙하지 않으므로 올바른 방법에 대해 확신하지 못합니다. checkedin이 1/0인지 알아 내 SQL Server 데이터베이스에서 데이터를 가져 오려고하지만 특정 사용자를 검색하고 최신 날짜 이후 정렬해야합니다. SQL에서 열 정보 가져 오기

string connectionString = "....."; 
SqlConnection cnn = new SqlConnection(connectionString); 

SqlCommand checkForInOrOut = new SqlCommand("SELECT CHECKEDIN from timereg ORDER BY TIME DESC LIMIT 1 WHERE UNILOGIN = '" + publiclasses.unilogin + "'", cnn); 

그래서 내 질문에, 나는이 권리를하고있는 중이 야 : 내가 뭘하려고 오전

이 같은 것입니다? 그리고 수집 된 데이터를 가져 오는 방법은 모든 것이 올바르게 처리되면 1 또는 0을 반환해야합니다. 어떤 종류의 SqlDataReader을 사용해야합니까? 나는 WPF

감사

이것은 당신이 SQL에서 데이터를 읽을 것이다 어떻게
+2

ORDER BY 이전에는 LIMIT가 MySql SqlServer (TOP 사용)이 아니 었습니다. 마지막으로 문자열 연결이 아닌 매개 변수를 사용했습니다. – Steve

답변

2

를 조사하는 것이 좋습니다. SQL Server 클래스를 사용하는 동안 ORDER BY와 LIMIT가 MySql 키워드가되기 전에 먼저 WHERE가 발생합니다. 따라서 대신 TOP 값을 사용해야합니다.

int checkedIn = 0; 
string cmdText = @"SELECT TOP 1 CHECKEDIN from timereg 
        WHERE UNILOGIN = @unilogin 
        ORDER BY TIME DESC"; 
string connectionString = "....."; 
using(SqlConnection cnn = new SqlConnection(connectionString)) 
using(SqlCommand checkForInOrOut = new SqlCommand(cmdText, cnn)) 
{ 
    cnn.Open(); 
    checkForInOrOut.Parameters.Add("@unilogin", SqlDbType.NVarChar).Value = publiclasses.unilogin; 

    // You return just one row and one column, 
    // so the best method to use is ExecuteScalar 

    object result = checkForInOrOut.ExecuteScalar(); 

    // ExecuteScalar returns null if there is no match for your where condition 
    if(result != null) 
    { 
     MessageBox.Show("Login OK"); 

     // Now convert the result variable to the exact datatype 
     // expected for checkedin, here I suppose you want an integer 
     checkedIN = Convert.ToInt32(result); 
     ..... 
    } 
    else 
     MessageBox.Show("Login Failed"); 
} 

구문 분석 및 SQL 삽입 해킹을 피하기 위해 문자열 연결을 매개 변수의 적절한 사용으로 대체 한 방법에 유의하십시오. 마지막으로 모든 일회용 객체 (특히 연결)는 사용 블록 안에 있어야합니다.

+0

@ jdl134679 확실하게, Order By에 대한 요점이 있습니다. . – Steve

+0

코드에 붙여 넣을 때 cmd dosnt가 현재 컨텍스트에 존재하면 무엇이 누락 되었습니까? –

+0

@ MathiasRønnowNørtoft 내 잘못, 지금 고정 – Steve

3
using (SqlDataReader myReader = checkForInOrOut.ExecuteReader()) 
{ 
    while (myReader.Read()) 
    { 
     string value = myReader["COLUMN NAME"].ToString(); 
    } 
} 

/C#으로이 일을하고 있어요,하지만 난 당신의 쿼리에 일부 오류가 당신이 Parameters.AddWithValue

관련 문제