2015-03-05 2 views
0

Я слишком долго смотрел на этот код. Этот блок продолжает бросать исключение, которое говорит:Параметрированный UPDATE в SQLite и C#, бросающий исключение

 
{System.Data.SQLite.SQLiteException (0x80004005): SQL logic error or missing database 
     near ",": syntax error 

Это звучит, как это может быть формирование моего SQL, но я не вижу его.

Я знаю, что процесс создания и заполнения параметров верен. Он работает в других местах одного и того же приложения. SQL выглядит хорошо, когда я проверяю его как строку, но я не могу проверить его перед тем, как перейти к движку SQLite.

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

Код

public static int updatePartner(Partner updatedPartner, Partner oldPartner) 
{ 
    int result = 0; 
    SQLiteConnection connection = GroomwatchDB.GetConnection(); 

    string sqlStatement = "UPDATE partners SET [last_name] = @lastName, [first_name] = @firstName, " 
     + "[pay_rate] = @payRate, [active] = @uactive " 
     + "WHERE [partner_code] = @oldPartnerCode, [last_name] = @oldLastName, [first_name] = @oldFirstName " 
     + "[pay_rate] = @oldPayRate, [active] = @oldActive"; 

    MessageBox.Show(sqlStatement); 

    SQLiteCommand command = new SQLiteCommand(sqlStatement, connection); 
    command.Parameters.Add(new SQLiteParameter("@lastName")); 
    command.Parameters.Add(new SQLiteParameter("@firstName")); 
    command.Parameters.Add(new SQLiteParameter("@payRate")); 
    command.Parameters.Add(new SQLiteParameter("@uactive")); 
    command.Parameters.Add(new SQLiteParameter("@oldPartnerCode")); 
    command.Parameters.Add(new SQLiteParameter("@oldLastName")); 
    command.Parameters.Add(new SQLiteParameter("@oldFirstName")); 
    command.Parameters.Add(new SQLiteParameter("@oldPayRate")); 
    command.Parameters.Add(new SQLiteParameter("@oldActive")); 
    command.Parameters["@lastName"].Value = updatedPartner.Last_name; 
    command.Parameters["@firstName"].Value = updatedPartner.First_name; 
    command.Parameters["@payRate"].Value = updatedPartner.Pay_rate; 
    command.Parameters["@uactive"].Value = updatedPartner.Active; 
    command.Parameters["@oldPartnerCode"].Value = oldPartner.Code; 
    command.Parameters["@oldLastName"].Value = oldPartner.Last_name; 
    command.Parameters["@oldFirstName"].Value = oldPartner.First_name; 
    command.Parameters["@oldPayRate"].Value = oldPartner.Pay_rate; 
    command.Parameters["@oldActive"].Value = oldPartner.Active; 
    try 
    { 
     connection.Open(); 
     result = command.ExecuteNonQuery();    
    } 
    catch (SQLiteException ex) 
    { 
     throw ex; 
    } 
    finally 
    { 
     connection.Close(); 
    } 
    return result; 

} 

ответ

1

О, я полагаю, вам не хватает И годов в ИНЕКЕ

поэтому было бы

"WHERE [partner_code] = @oldPartnerCode AND [last_name] = @oldLastName AND [first_name] = @oldFirstName " 
    + " AND [pay_rate] = @oldPayRate AND [active] = @oldActive"; 
+0

Хороший улов @ eddie_31003, но я все еще получаю то же самое исключение возникает после того, как я исправлю это. :(Должно быть, это было раньше в заявлении. Ясно, что я слишком долго смотрел. –

+0

Я обновил свой ответ @KeithKolbo. Я считаю, что вы потеряли оператор AND в своем WHERE. –

+0

Конечно, это была проблема с SQL. Я думаю, что сегодня я был на планете тупой. –

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