Я слишком долго смотрел на этот код. Этот блок продолжает бросать исключение, которое говорит:Параметрированный 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;
}
Хороший улов @ eddie_31003, но я все еще получаю то же самое исключение возникает после того, как я исправлю это. :(Должно быть, это было раньше в заявлении. Ясно, что я слишком долго смотрел. –
Я обновил свой ответ @KeithKolbo. Я считаю, что вы потеряли оператор AND в своем WHERE. –
Конечно, это была проблема с SQL. Я думаю, что сегодня я был на планете тупой. –