2014-02-02 3 views
0

Я хотел бы знать, что не так с этим кодом. У меня проблема: ошибка около "," ошибка синтаксисаОшибка обновления SqLite

Он принимает код предмета и объект объекта.

public override int Update(string ItemCode, Item Item) 
{ 
    int rc = 0; 

    try 
    { 
     _sqlConnection = new SQLiteConnection(_connStr); 
     _sqlConnection.Open(); 

Я думаю, что проблема заключается в следующем утверждении:

 string updateQuery = string.Format("UPDATE ItemDatabase SET [email protected], [email protected], [email protected] WHERE [_itemDescription] = '{0}' AND [_itemPrice] = '{1}' AND [_itemName] = '{2}'", Item.ItemDescription, Item.ItemPrice, Item.ItemName); 

Я не уверен, если оно должно быть отделено запятой.

 SQLiteCommand sqlCommand = new SQLiteCommand(updateQuery, _sqlConnection); 

     SQLiteParameter[] sqlParams = new SQLiteParameter[] 
      { 
      new SQLiteParameter("@ItemDescription",DbType.String), 
      new SQLiteParameter("@ItemPrice",DbType.String), 
      new SQLiteParameter("@ItemName", DbType.String) 
      }; // end SQLiteParameter 
     sqlParams[0].Value = Item.ItemDescription; 
     sqlParams[1].Value = Item.ItemPrice; 
     sqlParams[2].Value = Item.ItemName; 
     sqlCommand.Parameters.AddRange(sqlParams); 
     rc = sqlCommand.ExecuteNonQuery(); 
     if (rc == 1) 
     { 
      rc = 0; 
     } 
     _sqlConnection.Close(); 
    } 
    catch (SQLiteException ex) 
    { 
     throw ex; 
    } 
    catch (Exception ex) 
    { 

     throw ex; 
    } 
    return rc; 
} 
+0

То, что вы видите, как 'updateQuery' когда вы отлаживаете свой код? –

+0

Почему вы помещаете это подчеркивание перед своими полями? – Steve

+0

И что-то здесь не совсем верно. Значения, используемые для параметров, - это те же значения, что и для запроса. Таким образом, вы ничего не нашли или обновили поле до того же значения – Steve

ответ

1

Ваш запрос на обновление следующий.

string updateQuery = string.Format(@"UPDATE ItemDatabase 
     SET [email protected], 
     [email protected], 
     [email protected] 
     WHERE [_itemDescription] = '{0}', 
      [_itemPrice] = '{1}', 
      [_itemName] = '{2}'", Item.ItemDescription, Item.ItemPrice, Item.ItemName); 

поэтому ваши параметры должны называться

SQLiteParameter[] sqlParams = new SQLiteParameter[] 
    { 
     new SQLiteParameter("@ItemDescription",DbType.String), 
     new SQLiteParameter("@ItemPrice",DbType.String), 
     new SQLiteParameter("@ItemName", DbType.String) 
    }; 

Конечно, правильный синтаксис для WHERE оператор требует, чтобы при наличии нескольких условий вы присоединиться к ним с AND или OR операторы

 WHERE [_itemDescription] = '{0}' AND 
      [_itemPrice] = '{1}' AND 
      [_itemName] = '{2}'", Item.ItemDescription, Item.ItemPrice, Item.ItemName); 

Но опять же, как я уже сказал в комментарии выше, вы используете те же значения для коллекции параметров и для предложения where. Если вы используете одни и те же значения, в базе данных никогда не будет применено никаких изменений.

Позвольте мне привести пример:

Item.Description = "Item1"; 
    Item.ItemPrice = "100"; 
    Item.ItemName = "Stuff"; 

Ваш запрос станет:

string updateQuery = @"UPDATE ItemDatabase 
     SET _itemDescription='Item1', 
     _ItemPrice='100', 
     _ItemName='Stuff' 
     WHERE [_itemDescription] = 'Item1' AND 
      [_itemPrice] = '100' AND 
      [_itemName] = 'Stuff'"); 

Так что никаких изменений в данных, даже если запись найдена

+0

Я изменил параметры с «@_itemDescription» на «@ItemDescription» и «@_itemPrice» на «@ItemPrice» и «@_itemName» на «@ItemName», то, что вы оцениваете по значениям, одинаковы – user2980509

+0

Thanx for твоя помощь, я заработал! – user2980509

0

where condition, condition, condition недействителен SQL. Вы либо имели значение where condition and condition and condition, либо where condition or condition or condition.

Кроме того, вы можете избавиться от тех блоков catch, которые ничего не делают, кроме сброса трассировки стека исключений.

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