2013-12-26 2 views
0

Я беру пример. У меня есть поле с именем Deleted in the db. .Когда я нажимаю кнопку «Удалить», фактически не удаляя данные, просто заменяя «N» значением «Y». Проблема в том, что я загрузил исходный код. Это работает, но после небольшого изменения я получаю это исключение. Мне интересно, что я делаю неправильноConfusion on Выражение небулевого типа, указанное в контексте, где ожидается условие.

этот код работает

  if (e.CommandName.Equals("Delete")) 
     { 

     long holidayNum = Convert.ToInt64(e.CommandArgument); 




     using (SqlConnection con = new SqlConnection()) 
     { 

      using (SqlCommand cmd = new SqlCommand()) 
      { 

       cmd.Parameters.Add("@Deleted", SqlDbType.NChar).Value = "Y"; 

       cmd.CommandText = "Update HolidaysDetails set [email protected] where HolidayNum=" + holidayNum; 

       con.ConnectionString = connectionString; 

       cmd.Connection = con; 




       if (con.State == ConnectionState.Closed) 
       { 

        con.Open(); 

       } 

       int result = cmd.ExecuteNonQuery(); 

       con.Close(); 

       dlHoliday.EditItemIndex = -1; 

       GetData(); 

      } 

     } 




    } 

Но мой код выдает исключение

 if (e.CommandName.Equals("delete")) 
    { 

     long holidayNum = Convert.ToInt64(e.CommandArgument); 
     cmdText = "Update HolidaysDetails set [email protected] where HolidayNum" 
     + holidayNum; 
     using (con = new SqlConnection(cnnStr)) 
     { 

      if (con.State == ConnectionState.Closed) 
      { 

       con.Open(); 
      } 
      using (cmd = new SqlCommand()) 
      { 

       cmd.Connection = con; 
       cmd.CommandText = cmdText; 
       cmd.Parameters.AddWithValue("@deleted", SqlDbType.NChar).Value = "Y"; 
       cmd.ExecuteNonQuery(); 
       con.Close(); 
       dlHoliday.EditItemIndex = -1; 
       GetData(); 


      } 
     } 


    } 

ответ

2

Просто отсутствует знак равенства здесь

cmdText = "Update HolidaysDetails set [email protected] " + 
      "where HolidayNum=" + holidayNum; 
          ^

Кстати, пока вы пытаетесь следовать правильной практике и используете параметр для флага @deleted, вы делаете это неправильно. AddWithValue требует, в качестве второго параметра, значения, а не типа параметра. При его фиксации добавьте также второй параметр, необходимый по запросу

cmdText = "Update HolidaysDetails set [email protected] " + 
      "where [email protected]"; 
...... 
cmd.Connection = con; 
cmd.CommandText = cmdText; 
cmd.Parameters.AddWithValue("@deleted", "Y"); 
cmd.Parameters.AddWithValue("@num", holidaynum); 
cmd.ExecuteNonQuery(); 
.... 
+0

спасибо Это сработало – user2751773