是否可以在 PC 的共享文件夹中使用 SQLite 数据库?
Is it possible to use a SQLite database in a shared folder in a PC?
我正在开发一个 UWP 应用程序 (Windows phone 10),我在局域网中的 PC 的共享文件夹中有一个 SQLite 数据库。我想知道我是否可以在 windows phone 应用程序中使用这个数据库,就像我在我的 WPF 应用程序中所做的那样,我可以设置数据库的路径并且可以从任何计算机使用它在我的局域网中。
谢谢。
据我所知,开发人员不推荐这样做,因为文件锁定在此类设置(使用网络文件系统)中非常受限。
来自FAQ:
You should avoid putting SQLite database files on NFS if multiple processes might try to access the file at the same time. On Windows, Microsoft's documentation says that locking may not work under FAT filesystems if you are not running the Share.exe daemon. People who have a lot of experience with Windows tell me that file locking of network files is very buggy and is not dependable. If what they say is true, sharing an SQLite database between two or more Windows machines might cause unexpected problems.
但是,如果您打算一次仅从一个进程使用它(不涉及并发),它应该没问题。
简答:
可以,但是您需要注意您选择的日记模式,例如 WAL 不能在网络文件系统上工作。
长答案:
如果您发现自己处在许多 clients/programs 需要通过网络访问公共数据库的情况下,您应该考虑 client/server 数据库或提供某种 API 可以顺序保存客户端的数据库数据到 SQLite 数据库。
有关详细信息,请参阅 Appropriate Uses of SQLite
您不能随意从 UWP 应用程序打开文件,您需要使用 RuntimeBroker 来处理它,唯一可以与 RuntimeBroker 对话的机制是 StorageFile API,而后者又是对局域网环境下的共享文件夹一无所知。
要访问共享数据库(SQLite 或其他),最好的选择是将其托管在某种形式的服务器上,并构建一个 API 来与之交互(SOAP、REST 等) .对于断开连接的使用,您仍然可以在每个客户端上使用本地缓存,但您需要自己处理复制。
真实路径:
\192.168.1.102\Database\MyDB.db3
使用这个连接字符串:
Data Source='//192.168.1.102/Database/MyDB.db3';Version=3
- cnStr.Replace("\", "/") 在 windows
cnStr.Replace("\", "/") in windows
效果很好!
我正在开发一个 UWP 应用程序 (Windows phone 10),我在局域网中的 PC 的共享文件夹中有一个 SQLite 数据库。我想知道我是否可以在 windows phone 应用程序中使用这个数据库,就像我在我的 WPF 应用程序中所做的那样,我可以设置数据库的路径并且可以从任何计算机使用它在我的局域网中。
谢谢。
据我所知,开发人员不推荐这样做,因为文件锁定在此类设置(使用网络文件系统)中非常受限。
来自FAQ:
You should avoid putting SQLite database files on NFS if multiple processes might try to access the file at the same time. On Windows, Microsoft's documentation says that locking may not work under FAT filesystems if you are not running the Share.exe daemon. People who have a lot of experience with Windows tell me that file locking of network files is very buggy and is not dependable. If what they say is true, sharing an SQLite database between two or more Windows machines might cause unexpected problems.
但是,如果您打算一次仅从一个进程使用它(不涉及并发),它应该没问题。
简答:
可以,但是您需要注意您选择的日记模式,例如 WAL 不能在网络文件系统上工作。
长答案:
如果您发现自己处在许多 clients/programs 需要通过网络访问公共数据库的情况下,您应该考虑 client/server 数据库或提供某种 API 可以顺序保存客户端的数据库数据到 SQLite 数据库。
有关详细信息,请参阅 Appropriate Uses of SQLite
您不能随意从 UWP 应用程序打开文件,您需要使用 RuntimeBroker 来处理它,唯一可以与 RuntimeBroker 对话的机制是 StorageFile API,而后者又是对局域网环境下的共享文件夹一无所知。
要访问共享数据库(SQLite 或其他),最好的选择是将其托管在某种形式的服务器上,并构建一个 API 来与之交互(SOAP、REST 等) .对于断开连接的使用,您仍然可以在每个客户端上使用本地缓存,但您需要自己处理复制。
真实路径:
\192.168.1.102\Database\MyDB.db3
使用这个连接字符串:
Data Source='//192.168.1.102/Database/MyDB.db3';Version=3
- cnStr.Replace("\", "/") 在 windows
cnStr.Replace("\", "/") in windows
效果很好!