2016-11-01 8 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を使用する必要がありますか?私はC#/ WPFで

おかげ

+2

ORDER BYの前には、LIMITはMySQLでSqlServerではありません(TOPを使用します)。最後にパラメータは文字列連結ではない – Steve

答えて

2

に探してお勧めしますが、これをやっています。最初にWHEREはORDER BYの前にあり、LIMITはSQL Serverクラスを使用している間はMySqlキーワードです。したがって、代わりにのTOP値を使用する必要があります。私は、構文解析の問題とSQLインジェクションハッキングを回避するために、パラメータの適切な使用を使用して文字列連結を交換したか

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"); 
} 

注意。最後に、すべての使い捨てオブジェクト(特に接続)は、使用ブロック内に入る必要があります。

+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(); 
    } 
} 

これは、SQLからデータを読んでいました方法ですが、私はあなたには、いくつかのエラーがクエリでありParameters.AddWithValue

関連する問題