C# 数据读取器有行,但其值的比较永远不会为真
我正在为酒店预订房间创建一个模块。选择房间后,房间号将显示在标签中。单击OK按钮时,执行以下代码。当我检查房间的可用性时,即使是“否”,标志也不会初始化为1。谁能告诉我哪里出了问题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
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 {
...
}
}