2015-11-10 3 views
0

Я использую SQLite для Windows UWP (10).SQLite Persist Update

Это то, что я делаю:

Открытое соединение Начало транзакции Обновление строки Commit транзакции Закрыть соединение

И тем не менее, значение в базе данных фактически не записаны в таблице. Когда я перезагружаю запись (после отсоединения и повторного подключения, или не отключая), значение остается до того, как я вызвал обновление.

Есть ли что-то дополнительное, что мне нужно сделать? В DB Browser для SQLite есть пункт меню «Write Changes». Что это делает? Просто нормальная фиксация? В браузере изменения будут выполняться только в том случае, если я нажму на этот пункт меню.

Кроме того, я положил след на связи, и это то, что придумал:

Выполнение: начало транзакции

Выполнение: UPDATE 'TaskManagement.TaskInfo' SET StatusKey = @StatusKey, ProbAddDttm = @ProbAddDttm, ProbCode = @ProbCode, ProbPriority = @ProbPriority, ProbGroup = @ProbGroup, ProbInsp = @ProbInsp, Activity = @Activity, UpdateDttm = @UpdateDttm, Asset = @Asset, Address = @Address, TaskStartDttm = @TaskStartDttm, MaintenanceScheduleSetup = @MaintenanceScheduleSetup, MaintenanceScheduleBatch = @MaintenanceScheduleBatch, ProbZone = @ProbZone , ProbContractor = @ProbContractor, ProbNotes = @ProbNotes, JobCompleted = @JobCompleted, Resolution = @Resolution, Result = @Result, ActType = @ActType, Complaint = @Complaint, BudgetNo = @BudgetNo, Contractor = @Contractor, MapLocCorrect = @MapLocCorrect , FollowUpWorkRequired = @FollowUpWorkRequired, Condition = @Condition, ActPriority = @ActPriority, ExpectedVersion = @ExpectedVersion, EmailProbOriginator = @EmailProbOriginator, IsBug = @IsBug, IsCompletePendingCheckIn = @IsCompletePendingCheckIn ГДЕ TaskInfoKey = @PrimaryKey 0: 63711ec4-57d0-4a23 -8595-0022b757af44 1: 6 2: 2013-06-03 08: 56: 39: 117 3: 13 4: 2 5: 17 6: 24 7: 8: 2015-11-1 0 04: 05: 09: 502 9: 10: 11: 2013-06-03 08: 56: 39: 117 12: 13: 14: 15: 16: Проверить эту MoFo! 17: 2013-08-15 12: 13: 24: 620 18: 19: 20: 21: 22: 23: 4 24: Ложные 25: Ложные 26: 27: 28 : 3 29: Ложные 30: Ложные 31: Ложные

Выполнение: Commit

ответ

0

Таким образом, в конце концов, проблема заключалась в том, что я не передаем параметры в библиотеку правильно. Метод CreateCommand соединения позволяет только передать текст команды и массив объектов. Это неверно, потому что это означает, что вы не можете назвать параметры. Таким образом, я считаю это недостающей функциональностью в этой конкретной реализации SQLite для UWP.

Во-вторых, это должно быть ошибкой! Ни одно из имен параметров, о которых я упоминал выше, не было передано команде, и все же, когда я его запускал, никаких исключений не было. Поэтому я считаю, что это вторая ошибка в реализации.

Я исправил это так:

 var command = _Connection.CreateCommand(commandText, new object[0]); 

     if (parameters != null) 
     { 
      foreach (var parameter in parameters) 
      { 

       if (parameter.ParameterValue is DateTime) 
       { 
        parameter.ParameterValue = ((DateTime)parameter.ParameterValue).ToString("yyyy-MM-dd hh:mm:ss:fff"); 
       } 

       command.Bind(parameter.ParameterName, parameter.ParameterValue); 
      } 
     } 

     return command;