首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从不同行获取单元格值(行数取决于用户输入)

从不同行获取单元格值(行数取决于用户输入)
EN

Stack Overflow用户
提问于 2016-11-29 13:32:30
回答 1查看 87关注 0票数 1

我有这个酒店预订系统,有一个下拉列表,用户选择他们的房间数目在一个特定的房间类型被预订。这是我的Table_Room,在这里我将获得要插入到Table_MyCart上的房间ID

代码语言:javascript
复制
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)?以下是我的当前代码:

代码语言:javascript
复制
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();

FindRoom StoredProcedure的Sql代码如下:

代码语言:javascript
复制
CREATE PROCEDURE [dbo].[FindRoom]
@ROOM_TYPE VARCHAR (20)
AS
SELECT ROOM_ID FROM TBL_Room 
WHERE ROOM_TYPE = @ROOM_TYPE AND STATUS = 'AVAILABLE';

如能提供任何帮助,将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-29 13:48:46

您的存储过程已经返回状态为可用的RoomType选择的所有行。

相反,C#代码使用只能返回存储过程返回的第一行的第一列的ExecuteScalar。

如果要读取所有可用的room_id,可以使用ExecuteReader并对返回的行进行循环。

代码语言:javascript
复制
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>中,您可以使用该List<string>进行进一步的处理。

例如(基于下面的评论)

代码语言:javascript
复制
foreach(string roomid in rooms)
   cs.SaveCart(roomid, roomtype, qty, guest, arrival, departure, price1);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40867198

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档