2016-11-29 68 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

相关问题