2013-10-14 3 views
4

Это мой стол:Ошибка: тип объекта не может быть по сравнению с Int

roomtype, number of rooms 
Ac  10 

Я хочу, чтобы получить значение из таблицы и вычесть номера на 1 и обновить таблицу выше. Как написать код поиска в ASP.NET с помощью C#?

Это обновленный код. Он показывает ошибки в 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 [email protected]"; 
     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 [email protected] ,[email protected]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; 
     } 
    } 
} 
+0

Вы должны указать его в 'int', если хотите использовать его как' int'. –

+0

Это может быть только я, но похоже, что в конце концов он превратится в какой-то массивный код спагетти. Вместо того чтобы иметь всю вашу логику в событии нажатия кнопки, делегировать функциональность на вспомогательные классы и т. Д. Только мои два цента. Я просто ненавижу грязный код. Я не могу с собой поделать. –

ответ

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 [email protected]"; 
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 
} 
Смежные вопросы