热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何使用SQLite的Windows窗体应用程序文件?-HowtouseSQLiteforwindowsformsapplicationfile?

ImwritinganewWindowsForms2.0application.Thisapplicationisgoingtohaveadatafile.The

I'm writing a new Windows Forms 2.0 application. This application is going to have a data file. The user will be able to open the data file, do some work and save it to disk. Then he'll be able to open it later, to continue working. Same thing as Microsoft Word and .doc files.

我正在编写一个新的Windows Forms 2.0应用程序。该应用程序将具有数据文件。用户可以打开数据文件,做一些工作并将其保存到磁盘。然后他就可以打开它,继续工作。与Microsoft Word和.doc文件相同。

I'd like to use SQLite for the data file. However, I don't want changes to be written immediately to the data file. I want the user to change the data, but the file on disk remaining unchanged. Only when the user clicks "save" the data file on disk will be changed.

我想使用SQLite作为数据文件。但是,我不希望将更改立即写入数据文件。我希望用户更改数据,但磁盘上的文件保持不变。只有当用户单击“保存”时,才会更改磁盘上的数据文件。

In your opinion, what's the best way to do this?

在您看来,最好的方法是什么?

Should I load the contents of the SQLite DB into memory, maybe mapping it to objects, and write back to it when the user clicks "save"?

我应该将SQLite DB的内容加载到内存中,也可以将其映射到对象,并在用户单击“保存”时写回?

Or... is there a way to work with the data file with SQL commands (no objects), but leaving the changes in memory only, until "save" is clicked?

或者......有没有办法使用SQL命令(没有对象)处理数据文件,但只将更改保留在内存中,直到单击“保存”?

I'm a bit confused, I'd appreciate any idea regarding a best practice for this.

我有点困惑,我很欣赏任何关于最佳实践的想法。

Cheers

4 个解决方案

#1


1) On startup, make a temporary copy of the Sqlite file. This will be your "working file".

1)在启动时,制作Sqlite文件的临时副本。这将是你的“工作档案”。

2) Run all the INSERTs/UPDATEs/DELETEs against working file. When the user clicks "Save", copy the working file over the original.

2)针对工作文件运行所有INSERT / UPDATE / DELETE。当用户单击“保存”时,将工作文件复制到原始文件上。

3) Delete the working file and goto step #1.

3)删除工作文件并转到步骤#1。

#2


Depending on your scenario, you can also wrap your SQL in a transaction (BEGIN TRANSACTION;), and when the user click save, commit the transaction; if user click cancel, rollback the transaction.

根据您的方案,您还可以将SQL包装在事务中(BEGIN TRANSACTION;),当用户单击“保存”时,提交事务;如果用户单击取消,则回滚事务。

#3


Load the data when the user enters the edit-form. If he clicks save then Update/Insert. If not then just close the Form without any database action.

在用户输入编辑表单时加载数据。如果他单击保存,则单击更新/插入。如果没有,则只关闭表单而不进行任何数据库操作。

#4


Temp files.

Use XML or some other easy to parse format, save the data to a temp file on disk. When user saves the file, dump that date into your db.

使用XML或其他一些易于解析的格式,将数据保存到磁盘上的临时文件中。用户保存文件时,将该日期转储到数据库中。

This gives you the save-when-user-hits-save feature plus some redundancy if the machine dies or program crashes.

如果机器死机或程序崩溃,这将为您提供“用户点击时保存”功能以及一些冗余。


推荐阅读
  • OpenCV–反转遮罩原文:https://www.geeksf ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文介绍了三种方法来实现在Win7系统中显示桌面的快捷方式,包括使用任务栏快速启动栏、运行命令和自己创建快捷方式的方法。具体操作步骤详细说明,并提供了保存图标的路径,方便以后使用。 ... [详细]
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
  • IOS开发之短信发送与拨打电话的方法详解
    本文详细介绍了在IOS开发中实现短信发送和拨打电话的两种方式,一种是使用系统底层发送,虽然无法自定义短信内容和返回原应用,但是简单方便;另一种是使用第三方框架发送,需要导入MessageUI头文件,并遵守MFMessageComposeViewControllerDelegate协议,可以实现自定义短信内容和返回原应用的功能。 ... [详细]
  • python3 nmap函数简介及使用方法
    本文介绍了python3 nmap函数的简介及使用方法,python-nmap是一个使用nmap进行端口扫描的python库,它可以生成nmap扫描报告,并帮助系统管理员进行自动化扫描任务和生成报告。同时,它也支持nmap脚本输出。文章详细介绍了python-nmap的几个py文件的功能和用途,包括__init__.py、nmap.py和test.py。__init__.py主要导入基本信息,nmap.py用于调用nmap的功能进行扫描,test.py用于测试是否可以利用nmap的扫描功能。 ... [详细]
  • 使用C++编写程序实现增加或删除桌面的右键列表项
    本文介绍了使用C++编写程序实现增加或删除桌面的右键列表项的方法。首先通过操作注册表来实现增加或删除右键列表项的目的,然后使用管理注册表的函数来编写程序。文章详细介绍了使用的五种函数:RegCreateKey、RegSetValueEx、RegOpenKeyEx、RegDeleteKey和RegCloseKey,并给出了增加一项的函数写法。通过本文的方法,可以方便地自定义桌面的右键列表项。 ... [详细]
  • tcpdump 4.5.1 crash 深入分析
    tcpdump 4.5.1 crash 深入分析 ... [详细]
  • Iamworkingonaprojectwhichrequiresopentokandcallkitfornotifyingusers.However,theappli ... [详细]
  • iOS开发Debug和Release的理解
    2019独角兽企业重金招聘Python工程师标准参考:http:blog.csdn.netmad1989articledetails406580331&# ... [详细]
  • ios中级面试题(二)
    1.如何追踪app崩溃率,如何解决线上闪退当iOS设备上的App应用闪退时,操作系统会生成一个crash日志,保存在设备上。crash日志上有很多有用的信息,比如每个正在执行线程的 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
author-avatar
gerardlong
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有