Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 数据读取器有行,但其值的比较永远不会为真_C#_Asp.net - Fatal编程技术网

C# 数据读取器有行,但其值的比较永远不会为真

C# 数据读取器有行,但其值的比较永远不会为真,c#,asp.net,C#,Asp.net,我正在为酒店预订房间创建一个模块。选择房间后,房间号将显示在标签中。单击OK按钮时,执行以下代码。当我检查房间的可用性时,即使是“否”,标志也不会初始化为1。谁能告诉我哪里出了问题 protectedvoid ok\u房间(对象发送方,事件参数e) { 如果(Label1.Text!=“”) { int结果=0; int标志=0; 字符串[]room=Label1.Text.Split(新字符[]{''}); cmd=newsqlcommand(); cmd1=新的SqlCommand(); c

我正在为酒店预订房间创建一个模块。选择房间后,房间号将显示在标签中。单击OK按钮时,执行以下代码。当我检查房间的可用性时,即使是“否”,标志也不会初始化为1。谁能告诉我哪里出了问题

protectedvoid ok\u房间(对象发送方,事件参数e)
{
如果(Label1.Text!=“”)
{
int结果=0;
int标志=0;
字符串[]room=Label1.Text.Split(新字符[]{''});
cmd=newsqlcommand();
cmd1=新的SqlCommand();
cmd1.Connection=con;
cmd.Connection=con;
对于(int i=0;i
此查询返回可用和不可用房间的数量。然后,制定逻辑应该比使用标志更容易

还可以查看
ExecuteScalar
方法。这比我上面所展示的查询更简单:

using (SqlConnection conn = new SqlConnection(connString)) {
    string sql = "SELECT COUNT(*) FROM rooms WHERE room_availability='Yes' AND " +
                 roomsCondition;
    SqlCommand cmd = new SqlCommand(sql, conn);
    conn.Open();
    int availableRooms = (int)cmd.ExecuteScalar();
    if (availableRooms > 0) {
        cmd.CommandText =
            @"UPDATE rooms
            SET room_availability='No'
            WHERE availability='Yes' AND " + roomsCondition;
        cmd.ExecuteNonQuery();
    } else {
        ...
    }
}

嗨……谢谢你的回答。但我在这个领域是一个真正的新人,要找到这个解决方案有点困难。还有其他简单的方法吗。如果我遵循我的代码,我会错在哪里?实际上你只需要我的第二个例子。它为您提供了
(int)cmd.ExecuteScalar()的可用房间数。方法
ExecuteScalar
返回第一行的第一列。这比(
while(dr.Read()){if(dr[0].ToString().Equals“No”))flag=1;…
!如果您想知道发生了什么问题,请在非工作行上设置一个断点,然后查看
dr[0].ToString()返回的值。
using (SqlConnection conn = new SqlConnection(connString)) {
    string sql = "SELECT COUNT(*) FROM rooms WHERE room_availability='Yes' AND " +
                 roomsCondition;
    SqlCommand cmd = new SqlCommand(sql, conn);
    conn.Open();
    int availableRooms = (int)cmd.ExecuteScalar();
    if (availableRooms > 0) {
        cmd.CommandText =
            @"UPDATE rooms
            SET room_availability='No'
            WHERE availability='Yes' AND " + roomsCondition;
        cmd.ExecuteNonQuery();
    } else {
        ...
    }
}