2013-12-09 5 views
0

Я пишу код C#, в котором пытаюсь обновить 4 из 10 столбцов таблицы. Вот мой тип функции, в которой Посылают аргументы для запроса:Проблемы с запросом на обновление SQL

public int checkout_visitor(int check_inn, int checkout, String time_out, String date_out, String cnic) 

Теперь, что происходит, что я называю эту функцию где-то в моей программе, содержащие значения в аргументе:

checkout_visitor(chk_in,chk_out,t_out,dt_out,idcardnum); 

запросе я использую для уточнения моих столбцов дается:

String query2 = " UPDATE visit_detail SET[check_in] = " + check_inn + "[check_out] = " + checkout + "[time_out] = " + time_out + "[date_out] =" + date_out + "where visit_detail.v_id = "+ v_idd; 

Учитывая, что у chkout возникает некорректный синтаксис. Где я ошибаюсь? Правильно ли синтаксис? как мне его исправить?

код:

public int checkout_visitor(int check_inn, int checkout, String time_out, String date_out, String cnic) 
    { 
     try 
     { 
      connection.Open(); 
      String query = "select v_id from visitor where visitor.cnic=" + cnic; 
      command = connection.CreateCommand(); 
      command.CommandText = query; 
      visitor_id = command.ExecuteScalar().ToString(); 
      int v_idd = Int32.Parse(visitor_id); 
      String query2 = " UPDATE visit_detail SET[check_in] = " + check_inn + "[check_out] = " + checkout + "[time_out] = " + time_out + "[date_out] =" + date_out + "where visit_detail.v_id = " + v_idd; 
      //String query2 = "UPDATE visit_detail SET [check_in] = " + check_inn + ",[check_out] = " + checkout + ",[time_out] = " + time_out + ",[date_out] =" + date_out + " where visit_detail.v_id = " + v_idd; 
      command = connection.CreateCommand(); 
      command.CommandText = query2; 
      int result = command.ExecuteNonQuery(); 
      connection.Close(); 
      return result; 
     } 
     catch (Exception e) 
     { 
      return -1; 
     } 

    } 
+0

Вы забыли место между SET и check_in SET [check_in] => SET [check_in] – adt

+0

Пожалуйста, рассмотрите возможность использования параметров вместо слепого конкатенации строковых значений. Доступны ли какие-либо из этих пользователей? Я должен ввести значение «1234»); DROP TABLE visit_detail; - 'для моего номера ID: http://xkcd.com/327 – Bridge

ответ

0

Проблема:

1.you не отделяя Параметров правильно с помощью запятой ,.
2. вы не даете сапку между SET и check_in параметром.

Попробуйте:

String query2 = "UPDATE visit_detail SET [check_in] = " + check_inn + ",[check_out] = " + checkout + ",[time_out] = '" + time_out + "',[date_out] ='" + date_out + "' where visit_detail.v_id = "+ v_idd; 
+0

{" Неверный синтаксис рядом с::. "} – user3081555

+0

@ user3081555: можете ли вы разместить свой код? –

+0

здесь см. Обновленный вопрос – user3081555

0

Вы видите полученный запрос? Мне кажется, что вам не хватает запятой, но вы должны напечатать (и опубликовать) полученный запрос, чтобы лучше понять проблему.

+0

" UPDATE visit_detail SET [check_in] = 0 [check_out] = 1 [time_out] = 04:43 PM [date_out] = 12 -9-2013where visit_detail.v_id = 2 " – user3081555

0

Вам не хватает «,» между именами столбцов. Его как Обновить таблицу Set col1 = 3, Col2 = 'тест'

0

Проблема заключается в том, что query2 строка будет что-то вдоль линий:

UPDATE visit_detail SET[check_in] = " 1[check_out] = 2[time_out] = some time[date_out] =some datewhere visit_detail.v_id = 5 

Таким образом, вы уже можете видеть, что есть datewhere что incorect, там также нет ' символов вокруг строковых параметров, а между запятыми нет параметров.

быстрое решение, что будет:

String query2 = String.Format("UPDATE visit_detail SET [check_in]={0}, [check_out]={1}, [time_out]='{2}', [date_out]='{3}' where visit_detail.v_id={4};", check_inn, checkout, time_out, date_out, v_idd); 

Но это еще не действует. Если time_out содержит ' символов, вы снова получите сообщение об ошибке.

Что вы действительно должны использовать это: SqlCommand.Parameters Это правильный способ передачи paramters к вашей команде, все проблемы будут заботиться о вас.

Смежные вопросы