2016-04-23 11 views
3

コースが満杯の場合、次の生徒は1,2,3などのようになります(0 =ライン内になく、ブール値Accepted生徒がコースに入っていることを意味します)。生徒がコースをやめると、コーステーブルにフリースポットができます。C言語でif-statementを使用してUPDATEを使用して特定の行(sql)を更新する

しかし、C#とOleDbCommandを使用して、コーステーブルに空きがあると、どのようにすべての学生行を更新できますか?私はすべての生徒にフリースポットごとに1つの値を少なくしたいと思っています。待ち行列1に入っていた学生(キュー0に近づいている)の場合は、Acceptedブール値をtrueに更新します。

私の問題:

  1. 私はすべての学生キューインデックスを更新すると、「--1」各フリースポットについて。

  2. 私は学生がキューインデックス0

をヒットしようとするとき、私は方法がわからない、Accepted = trueブールし、キューインデックス1に、特定の学生を変更する方法がわかりませんdbとC#を正しく組み合わせる方法がわからないので、これを行うには。

これは私が行くことができるどこまである:

は、以下の最初のコードは、私はC#で、私は確認することができますどのように言い換えれば

//----------------------------- 
//SELECT..... WHERE FreeSpots > 0... 
int = QueueCount = 0; 

while (reader.Read()) { 
    QueueCount = ++QueueCount; 
};  

//---------------------------- 
OleDbConnection conn = new OleDbConnection(); 
conn.ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ToString(); 
conn.Open(); 

OleDbCommand cmd = new OleDbCommand(); 

cmd.CommandText = "UPDATE [Course_Student] SET QueueIndex = @queueindex, Accepted = @accepted WHERE QueueIndex > 0 AND CID = " + CourseID + ";"; 

cmd.Connection = conn; 

while (QueueCount > 0) { 
    if (/*HELP: how do I check specific student with QueueIndex = 1?*/ == 1) 
    { 
     var pAccepted = new OleDbParameter("@accepted", SqlDbType.Bit); 
     pAccepted.Value = true; 
     cmd.Parameters.Add(pAccepted); 
    } else { 
     var pAccepted = new OleDbParameter("@accepted", SqlDbType.Bit); 
     pAccepted.Value = false; 
     cmd.Parameters.Add(pAccepted); 
    } 

    var pQueueIndex = new OleDbParameter("@queueindex", SqlDbType.Int); 
    pQueueIndex.Value = /*HELP: for every row, --x QueueIndex for every students in queue*/; 
    cmd.Parameters.Add(pQueueIndex); 

    FreeSpot = --FreeSpot; //for later, to update freespots in course-table 

    cmd.ExecuteNonQuery(); 
} 

を、SELECTを経由してのコースの金額に無料スポットを数え、リーダーOleDBCommandなどを使用して、更新する前に特定の値をチェックしますか?類似のものがありますかRead.Reader方法はありますか?私はどこで行を確認できますか?正直言って、私は完全にここで失われています。

+0

クエリに**パラメータ**を使用するようにしてください - いくつかのパラメータを使用していますが、 'CourseID'はあなたのSQLと連結されています - **これをしないでください!** 「CourseID」にも! –

+0

AAHは知っておいてよろしいですか? – Nyprez

答えて

2
あなたのSQLステートメントを変更

:これは助けることができる

UPDATE [Course_Student] 
SET QueueIndex = QueueIndex - 1, 
    Accepted = (CASE QueueIndex WHEN 1 THEN 1 ELSE 0 END) 
WHERE QueueIndex > 0 AND CID = @CourseID; 

希望を。

+0

このエラーメッセージが表示されているIm:クエリー式 '(CASE QueueIndex WHEN 1 THEN 1 ELSE 0 END)に構文エラー(演算子がありません)があります。 ブラウザがcmd.ExecuteNonQuery()をポイントしています。 私はCommandTextをあなたのものに置き換えました。私は何をしなければなりませんか? – Nyprez

+0

ああ、私はそれを理解しました、私はAccessデータベースを使用しています。それはCASEをサポートしていません。代わりにIFFを使用しなければなりませんでした。 、 Accepted = IIF(QueueIndex = 1,1,0) どこQueueIndex> 0およびCID = @CourseID; ' ありがとう、私はあなたの助けなしにそれを理解しませんでした。 編集:baahは2行、前などで試してみることができません。 – Nyprez

+0

opps ...... oversleep→_→...あなたがそれを聞いてうれしいですが、私は知らなかった前のアクセスのiifステートメント、私に言ってくれてありがとう(* ^ω^ *) – baiyangcao

関連する問題