2016-11-29 70 views
1

我有這個酒店預訂系統,有一個下拉列表,用戶可以選擇其特定房間類型的房間數量來保留。這是我的Table_Room,我會得到要對Table_MyCart插入室ID從不同行獲取單元格值(行數取決於用戶輸入)

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

我當前的代碼只是獲取第ROOM_ID這是(CI-1),但如果用戶使用的下拉列表,選擇了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-數據表)。 – Serge

+0

所以讓我明白,用戶可以選擇一個房間選擇Room_ID? – Steve

+0

@Steve用戶將選擇要預訂的房間數量,系統會自動給他們預留房間的數量 – Newbie10

回答

2

你的存儲過程已返回所有具有行狀態可用選擇RoomType。
取而代之,您的C#代碼使用ExecuteScalar,它只能返回存儲過程返回的第一行的第一列。

如果你想閱讀所有的ROOM_ID可用的一種方法可以是使用ExecuteReader和循環返回的行

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>,您可以使用作進一步處理。

例如(根據您在下面評論)

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]等爲每個元素存儲在房間(代替你房間)代碼 – Steve

+0

非常感謝,它的工作!我非常感激 – Newbie10

相關問題