【问题标题】:Accessing MDF file thread safety [closed]访问 MDF 文件线程安全 [关闭]
【发布时间】:2013-07-31 11:13:38
【问题描述】:

MDF 文件访问(当附加到 SQLEXPRESS 时)线程安全吗?

我有一个本地 MDF 文件与我的 WPF 客户端应用程序一起部署。 我正在使用 MDF 文件来保留一些特定于客户端的设置。可能有很多线程同时选择和更新同一行,从而同时通过 SQL 连接提供程序访问文件。

现在,我要问的是,我是否可以像处理远程 SQL SERVER 数据库一样处理线程同步(只需将所有工作留给 SQL 连接提供程序),还是必须将我的关键部分内的数据库调用?

谢谢!

【问题讨论】:

  • 查看答案,不清楚您要做什么。如前所述,MDF 是您通常通过数据库引擎访问的核心数据库文件。知道您如何访问它会有所帮助 - 您正在使用的连接字符串,或者如果不是演示您如何修改 MDF 的源代码。没有这些,就不清楚你要做什么。

标签: c# sql-server multithreading mdf


【解决方案1】:

我真的很困惑,它是一个运行在数据库服务器上的 Microsoft SQL 数据库,只要您在更新行时在 WHERE 子句中使用乐观并发,它就可以管理表和行锁定和冲突。例如

update settings set A = 'val' where A = 'old val'

所以当然它是线程安全的。

【讨论】:

  • 不,它是一个本地文件,是我项目的一部分。该项目是一个客户端 exe,已部署到数百台机器上。您是说附加的 mdf 文件或常规远程连接没有任何区别?
  • 你不是直接访问本地文件,你是通过sql server客户端访问sql server存储引擎访问文件。
  • @UriAbramson,您将无法从多台计算机附加网络文件。您需要将该数据库放在服务器上,并在部署期间将连接字符串更改为Server=serverName;Database=databaseName;User ID=userid;Password=pwd
  • @TheSolution 该文件与应用程序一起部署,并且应用程序的每个实例都访问与其一起部署的文件。它不是远程数据库伙伴。
  • @DinoM 你是说它绝对线程安全吗?
【解决方案2】:

MDF 文件是主数据库文件

你不能直接写入 MDF 文件(理论上),你是通过 SQL Server 引擎和客户端访问的。

对于多个SELECTUPDATE,您是在数据库事务隔离级别(读取已提交、未提交读取、可序列化、快照)上中继。

Isolation Levels in the Database Engine

【讨论】:

  • MDF 文件不必是服务器的主数据库文件。它可以使用 VS 或其他方式创建,并通过 SSMS 访问,同时它被“附加”到 sql server 实例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-03
  • 1970-01-01
  • 2014-07-20
  • 1970-01-01
相关资源
最近更新 更多