2016-11-29 13 views
1

私はこのホテル予約システムを利用しています。予約する特定のルームタイプの客室数を選択するドロップダウンリストがあります。ここで私は私の現在のコードのみ(CI-1)である第一Room_IDを取得するルームIDがTable_MyCart異なる行からセル値を取得する(行数はユーザーの入力に依存)

Room_ID | Room_Type | Username | Arrival_Date | Departure_Date | Status 
--------|-----------|----------|--------------|----------------|------- 
CI-1 |Carneros |myuser |date   |date   |Available 
CI-2 |Carneros |myuser |date   |date   |Available 

に挿入されるようになりますどこTable_Roomはあるが、どのような場合は、ユーザーがドロップダウンリストを使用し、2つの部屋を選びました現在のタイプは? Room_ID(CI-2)はどのように取得できますか?ここに私の現在のコードされています

roomtype = "Carneros Inn"; 
SqlCommand cmd = new SqlCommand("FindRoom", conn); 
cmd.CommandType = CommandType.StoredProcedure; 
cmd.Parameters.Add("@ROOM_TYPE", SqlDbType.VarChar).Value = roomtype; 
conn.Open(); 
cmd.ExecuteNonQuery(); 
roomid = cmd.ExecuteScalar().ToString(); 
conn.Close(); 

マイSQLコードFindRoomのStoredProcedureのためにはこれです:

CREATE PROCEDURE [dbo].[FindRoom] 
@ROOM_TYPE VARCHAR (20) 
AS 
SELECT ROOM_ID FROM TBL_Room 
WHERE ROOM_TYPE = @ROOM_TYPE AND STATUS = 'AVAILABLE'; 

すべてのヘルプは、あなたのストアドプロシージャが既に持っているすべての行を返す

+0

あなたは間違ってcmd' 'からの結果を読んでいます。あなたはスカラー結果を期待していません。むしろ、行セットが必要です。見て@ [私はどのようにデータテーブルにストアドプロシージャからテーブルを取得することができます](http://stackoverflow.com/questions/1933855/how-can-i-retrieve-a-table-from-stored-procedure-to -a-datatable)。 – Serge

+0

これで、Room_IDを選択した部屋をユーザーが選択できることを理解できますか? – Steve

+0

@Steveユーザーが予約する部屋の数量を選択し、システムは自動的に予約する部屋の数を指定します。 – Newbie10

答えて

2

をいただければ幸いですステータスAvailable Room Typeにが選択されました。
代わりに、C#コードでは、ストアドプロシージャから返された最初の行の最初の列のみを返すことができるExecuteScalarを使用します。

あなたはさらに処理するために使用することができます

int room_qty = 2; // <-- this comes from user input 
List<string> rooms = new List<string>(); 
roomtype = "Carneros Inn"; 
SqlCommand cmd = new SqlCommand("FindRoom", conn); 
cmd.CommandType = CommandType.StoredProcedure; 
cmd.Parameters.Add("@ROOM_TYPE", SqlDbType.VarChar).Value = roomtype; 
conn.Open(); 
SqlDataReader reader = cmd.ExecuteReader(); 
while(reader.Read()) 
{ 
    rooms.Add(reader["room_id"].ToString()); 
    Console.WriteLine("Selected room ID = " + roomID); 

    // We have reached the requested quantity???? 
    if(rooms.Count == room_qty) 
     break; 
} 
conn.Close(); 

if(rooms.Count < room_qty) 
    Console.WriteLine("Not enough room available!"); 

今すぐ要求されたすべてのroom_idがList<string>に格納されて返されたローExecuteReaderとループを使用することができ、すべてのroom_id可能な一つのアプローチを読みたい場合は。例えば

(以下コメントに基づく)

foreach(string roomid in rooms) 
    cs.SaveCart(roomid, roomtype, qty, guest, arrival, departure, price1); 
+0

申し訳ありませんが、これは私の初めてのリスト ' rooms = new List ();'そのコードにすべての値を保存してTBL_MyCartに転送するにはどうすればいいですか? TBL_MyCartでデータを転送するための私の現在のコードは、この 'cs.SaveCart(roomid、roomtype、qty、guest、arrival、departure、price1);' – Newbie10

+0

あなたはループを必要とした客室を使用して、そのコードを呼び出す[0]、部屋[1]などの部屋に格納されている各要素について(あなたはroomid交換) – Steve

+0

それが働いた、どうもありがとうございました!私はそれをとても高く評価しました – Newbie10

関連する問題