【发布时间】: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