SQLite持久更新

时间:2015-11-10 22:02:46

标签: sqlite persistence uwp

我在Windows UWP(10)上使用SQLite。

这就是我在做的事情:

打开连接 开始交易 更新行 提交交易 关闭连接

然而,数据库中的值实际上并未写入表中。当我重新加载记录时(在断开连接并重新连接或断开连接之后),在我调用更新之前,该值仍然存在。

我还需要做些什么吗?在SQL Browser的DB Browser中,有一个名为" Write Changes"的菜单项。那是做什么的?只是一个正常的提交?在浏览器中,仅当我单击此菜单项时才会提交更改。

另外,我对连接进行了跟踪,这就是出现的结果:

执行:开始交易

执行:更新     ' TaskManagement.TaskInfo' 组     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,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-10 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:错误

执行:提交

1 个答案:

答案 0 :(得分:0)

所以,最后,问题是我没有正确地将参数传递给库。连接的CreateCommand方法仅允许您传入命令文本和对象数组。这是不正确的,因为这意味着您无法命名参数。因此,我认为这是针对UWP的SQLite特定实现中缺少的功能。

其次,这应该是错误的!我上面提到的所有参数名都没有传递给命令,但是当我运行它时,没有抛出任何异常。所以,我认为这是实施中的第二个错误。

我这样修好了:

        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;