【问题标题】:How to run .mdf database from LAN?如何从局域网运行 .mdf 数据库?
【发布时间】:2018-07-24 08:33:13
【问题描述】:

我有一个 C# (.NET Framework 4.5 - MVS 2015) 项目,它有一个基于服务的数据库和一个本地生成的 .mdf 文件。我使用的 Microsoft SQL Server 有这个版本:13.0.1601.5。 在服务器 PC 上一切正常。我在 LAN 中与 .mdf 文件共享应用程序,但来自同一 LAN 的客户端无法打开该应用程序。好像和DB的连接不好。

我的连接字符串是这样形成的:

public static string attachedDbFile = "AttachDbFilename=" + currentWorkinglocation + "NCI_DB.MDF;";

public SqlConnection mySqlConnection = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;" + attachedDbFile + "Integrated Security=True");

请问我错过了什么?

后期编辑:

按照你们提供的步骤进行操作后:

我的数据源现在是 Microsoft SQL Server(而不是 MSQL Server Db 文件)。我已将 .mdf 文件从我的服务器(在 MSQL Server Management Studio 中)附加到数据库,选中“允许远程连接选项”并将连接字符串更改为:

public SqlConnection mySqlConnection = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;Initial Catalog=myDbName;Integrated Security=True");

现在,该应用程序可以在我的本地主机(安装了 sql server 的 PC)上运行,而无需 .mdf 文件。没关系。

但是,如果客户端尝试从 LAN 访问应用程序,从我的共享位置,应用程序 .exe 再次崩溃并出现以下错误消息:

我错过了什么吗?

解决方案: 在遵循我们同事的一些指示并进一步调查问题后,解决方案是: - 安装 sql server 2017(完整版!- 非特快版) - 安装 microsoft sql server 管理工作室 - 将 mdf 附加到数据库 - 配置具有该数据库权限的帐户 - 根据这个更新连接字符串:

public SqlConnection mySqlConnection = new SqlConnection(@"Data Source=ip,port(1433-default);Initial Catalog=db_name;User ID=user;Password=pwd");

【问题讨论】:

  • (LocalDB) 指的是 SQL Server 的本地实例。如果您的客户没有全部安装 LocalDB,这将不起作用。此外,如果您希望数据库在客户端之间共享​​>,这根本行不通:您必须在自己的机器上安装 SQL Server (Express)。在任何给定时间,只有一个 SQL Server 实例可以附加数据库。
  • 我很生气,也许我可以通过将客户端引用到我的 IP 来将它们重定向到我的本地数据库?没有解决办法吗?
  • 无法从网络访问 LocalDB 实例。如果您想在将数据库公开给外部客户端的同时在本地运行数据库,您可以,但您必须安装(同样免费的)SQL Server Express。
  • 您可以通过简单地将 (LocalDB) 更改为安装了 SQL 的远程 PC 来连接。如果远程 PC 数据库使用不同的实例,我需要更改实例名称 (MSSQLLocalDB)。您正在使用“Integrated Security=True”,这意味着数据库正在使用 Windows 凭据。所以本地和远程PC必须具有相同的UserGroup,数据库凭据必须使用该组,并且用户帐户必须在本地和远程PC上的组中。Jereon是错误的。安装 SQL Express 只会自动设置我描述的凭据,如果从 c# 访问则不需要。
  • @jdweng:LocalDB 实例(不要与本地主机的特殊 (local) 别名混淆)设置并配置为仅侦听本地命名管道,并且不接受来自其他电脑。如果您可以以其他方式显示,请写一个带有详细说明的答案,我会对它感兴趣。当然,您可以在任何您喜欢的机器上安装 SQL Server,但是使用 LocalDB 会将您限制在本地机器上——至少根据我所读过和看到的任何内容。

标签: c# sql-server database


【解决方案1】:

SQL 服务器仅支持本地磁盘上的数据库文件(或比 LAN 更奇特的链接,例如 iSCSI 等)。如果您想通过本地网络共享对数据库的访问,则需要建立一个拥有该文件的 SQL Server 实例,然后连接到该 SQL Server 客户端/服务器。停止尝试通过网络将其作为 文件 进行访问。

【讨论】:

  • “建立一个拥有该文件的 SQL Server 实例”是什么意思?我怎么能这样做?请问有什么补充信息吗?
  • @Marko - 您已经在您的自己的机器上安装了至少一个 SQL Server 实例。但是,这可能不是作为所有其他机器的服务器的最合适位置。因此,您可能需要在更合适的机器上安装实例。然后附加 MDF 文件(在网上找到了很多关于将文件附加到服务器的帮助),然后你的连接字符串使用 Database 而不是 AttachDbFileName(和 Data Source,也就是 Server 标识你拥有的服务器实例选择)
  • @Marko - 但请记住,您的本地实例可能是 SQL Server express,默认情况下不对远程连接开放。同样,如果您需要这样做,可以在线获得大量帮助。
  • 我明白了。所以步骤是: 1. 检查我的本地实例是否是 SQL Server express(我对此表示怀疑,因为我在控制面板中看到它仅说明 MSQL Server 2016 LocalDB); 2.将.mdf文件附加到我使用的MSQL Server 2016(我想我需要MSQL Server Management Studio); 3.根据新方法更改连接字符串。对吗?
  • Damien :非常清楚您可以通过远程 PC 上的 SQL Server 访问数据库。在 PC 上安装 SQL Server 允许连接到远程服务器。网络库(SQL 客户端类)中的驱动程序也允许连接到远程 SQL Server。
猜你喜欢
  • 2012-03-18
  • 2011-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-02
  • 2011-05-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多