错误:对象类型无法与int进行比较

4
这是我的表格:
roomtype, number of rooms
Ac        10

我希望能够从表中检索值并将房间数减1,然后更新上面的表格。如何使用C#在ASP.NET中编写检索代码?
下面是更新后的代码。它显示了错误信息:dt.Rows[0]["no_of_rooms"] > 1,表示无法将对象类型与int进行比较。但是,将no_of_rooms解析为int后错误仍然存在。
public partial class Book_Room : System.Web.UI.Page
{
    protected void Button1_Click(object sender, EventArgs e)
    {
        string type = DropDownList1.SelectedItem.ToString();
        string name = TextBox2.Text;
        string nop = DropDownList2.SelectedItem.ToString();
        int num = int.Parse(nop);
        string connectionString = WebConfigurationManager.ConnectionStrings["HMSConnectionString"].ConnectionString;
        SqlConnection connection = new SqlConnection(connectionString);

        string qry3 = "select * from availiability where RoomType=@type";
        SqlCommand cmd3 = new SqlCommand(qry3, connection);
        cmd3.Parameters.AddWithValue("@type", type);
        cmd3.ExecuteReader();
        SqlDataAdapter ad = new SqlDataAdapter(cmd3);
        DataTable dt = new DataTable();
        if (dt.Rows.Count > 0)
        {    
            if (dt.Rows[0]["no_of_rooms"] > 1)
            {
                string qry = "insert into RoomType values('" + type + "','" + name + "','" + num + "') ";
                SqlCommand cmd = new SqlCommand(qry, connection);
                connection.Open();
                int g = cmd.ExecuteNonQuery();
                if (g != 0)
                    Label5.Text = "Reserved for" + name;
                connection.Close();

                string qry2 = "update availiability set RoomType=@type ,availiable_rooms=@av";
                SqlCommand cmd2 = new SqlCommand(qry2, connection);
                cmd2.Parameters.AddWithValue("@type", type);
                cmd2.Parameters.AddWithValue("@av", dt.Rows[0]["no_of_rooms"] - 1);
                connection.Open();
                cmd2.ExecuteNonQuery();
                connection.Close();
            }
        }

        else
        {
            label5.Text = "No Rooms Availiable in " + type;
        }
    }
}

如果你想将它用作 int,你必须将其转换为 int - Jeroen Vannevel
可能只是我一个人这么认为,但这似乎最终会变成一些庞大的意大利面条式代码。不要把所有逻辑都放在按钮点击事件中,而是将功能委托给辅助类等。这只是我的个人看法。我真的很讨厌混乱的代码。我忍不住要说。 - Mike Marks
3个回答

3
将其更改为 (int)dt.Rows [0] ["no_of_rooms"]> 1

3

或者你可以尝试:

dt.Rows [0] .Field<int>("no_of_rooms")>1


2

您并未使用查询返回的其他值,因此创建SqlDataAdapater并填充Table有点过于繁琐。

我建议改用ExecuteScalar。它可以从数据库中返回单个值。

string qry3 = "select * from availiability where RoomType=@type";
SqlCommand cmd3 = new SqlCommand(qry3, connection);
cmd3.Parameters.AddWithValue("@type", type);
object objCount = command.ExecuteScalar();
int count = objCount == null ? 0 : (int)objCount;
if (count > 0)
{
    // Do other things
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接