【问题标题】:c# Connecting to a local MDF DB Filec# 连接到本地 MDF DB 文件
【发布时间】:2010-08-29 20:07:25
【问题描述】:

在我的开发计算机上,我有 MS SQL Server/Visual Studio 2005。我的程序可以正确连接到我的本地数据库并使用它。但是,我的另一台计算机(非开发人员)没有 MS SQL Server/Visual Studio 2005,也没有连接到数据库。它吐出以下内容:

“建立与服务器的连接时发生错误。连接到 SQL Server 2005 时,此失败可能是由于在默认设置下 SQL Server 不允许远程连接。...”(错误: 26)。

这是否意味着我必须在我的非开发计算机上安装 SQL Server 2005?有没有其他办法?

我的连接字符串是:

"数据源=.\SQLEXPRESS;AttachDbFilename=\"" + Directory.GetCurrentDirectory() + "\DB.mdf\";集成安全=True;用户实例=True";

【问题讨论】:

    标签: c# database connection mdf


    【解决方案1】:

    您的连接字符串告诉 Sql Server Native Client ADO.NET Provider 尝试连接到名为 SQLEXPRESS 的 Sql Server 实例,该实例将管理存储在文件 DB.mdf 中的数据库。由于您的客户端计算机没有安装 Sql Server Express,因此它不会找到要连接的数据库。

    您需要:

    • 在客户端计算机上安装 Sql Server 并在那里部署您的数据库。
    • 切换到 Sql Server Compact Edition(SqlCE - 嵌入式数据库)并重新构建您的应用程序以改用可移植数据库文件(使用 SqlCE)。
    • 放弃使用强大的数据库引擎并完全切换到 ADO.NET 数据集,将数据集的内容保存/加载到 Xml 文件(通过 WriteXml()ReadXml())。如果您正在处理的数据量的大小相当有限,那么 DataSet 是保持完整性(通过强类型和明确定义的架构)和可移植性的好方法。

    【讨论】:

      【解决方案2】:

      如果您想在其他电脑/服务器上运行它,您还需要安装 SQL Server(需要将您的 .mdf 附加到它)或安装 SQL Server Express。

      另一个技巧是更改连接字符串,使其指向运行数据库的另一台电脑/服务器。

      【讨论】:

        【解决方案3】:

        是的,您的目标计算机上确实需要可用的 MS-SQL (Express)。本地安装或与服务器的连接。

        在 Setup.exe 中包含 SQl Express 并不难(参见 PreRequisites)。

        另一种方法是使用 SQL-CE 或 Sqlite 或(甚至)MS-Access。它们是“嵌入式”数据库引擎,因此您只需要分发 DLL。

        【讨论】:

        • 我转换为 SQLCE... 现在 Visual Studio 将 System.Data.SqlServeCe.dll 添加到输出路径。删除此 dll 显然会产生异常。但是当我将带有 DLL 文件的输出复制到非开发计算机时,它会吐出与在没有 DLL 的情况下运行它相同的错误。有谁知道为什么会这样?
        • SqlServerCe dll 通常安装在 GAC 中。可能不建议单独使用它,但是:将 DLL 复制到您的源文件夹(不是 \bin)添加对 that dll 的引用并确保已设置 CopyLocal。不过,它可能取决于其他 DLL,您需要在 Fx 版本上进行严格匹配。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-14
        • 1970-01-01
        相关资源
        最近更新 更多