【问题标题】:Attempt to attach to SQL Server database file failed尝试附加到 SQL Server 数据库文件失败
【发布时间】:2009-07-16 22:23:29
【问题描述】:

我不太擅长部署,遇到了一个问题:

首先,我使用的是 Vista。

我在 vb.net 中创建了一个 Windows 应用程序,其中有一个名为 Customerdb.mdf 的数据库文件。

我选择了数据库并在属性中选择了Embedded Resource 选项。

我使用了以下连接:

Dim constring As String
constring = Application.StartupPath.ToString() + "\Customerdb.mdf"
Dim con = New SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename=" + constring + ";Integrated Security=True;User Instance=True")

我的问题是安装设置后我无法访问数据库。每次我尝试访问数据库时都会引发以下错误:

"尝试为文件 C:\Program File\App\Customerdb.mdf 附加自动命名数据库失败。存在同名数据库,或无法打开指定文件,或位于 UNC 共享上。”

似乎一旦安装,应用程序就无法访问数据库。

你能告诉我连接出了什么问题吗?

非常感谢任何帮助。 提前致谢

【问题讨论】:

    标签: sql-server vb.net deployment


    【解决方案1】:

    我选择了嵌入式资源选项。

    这意味着数据库文件作为资源嵌入到创建的 *.exe 文件中。它不是文件系统上的单独文件。您尝试使用此代码创建的文件名:Application.StartupPath.ToString() + "\Customerdb.mdf" 不存在。

    要解决此问题,您有几个选择:

    • Embedded Resource 更改为 Content 并告诉它“始终复制”
    • 检查文件是否存在,如果不存在,则在打开数据库之前将字节数组写入磁盘
    • Embedded Resource 更改为 Content 并将您的部署项目设置为将其放入 Application Data 文件夹中。

    其中,你真的应该做最后一个,别忘了在你的应用程序中部署 sql server express。

    最后,作为单用户桌面数据库,Sql Server Express 是一个非常糟糕的选择。您真的应该选择桌面(或“进程内”)引擎,如 SQL Server Compact Edition、sqlite 甚至 Access。

    【讨论】:

    • 感谢您的回复,我得到了第一点,但是您能否提供一个示例来说明如何执行此操作,因为我尝试过并且收到了相同的错误消息。使用“内容”选项,设置后数据库文件仍未显示在应用程序文件夹中。我想我使用的路径是正确的。感谢回复!
    • 您仍然需要手动将其添加到部署项目中。将其设置为“内容”只是使其可用于项目,以便您可以添加它。
    • 我在部署过程中将选择的内容选项和数据库文件放在App文件夹中(显示在程序文件中)。设置后,数据库文件显示在 App 文件夹中,但在尝试访问数据库时出现以下错误代码:无法打开新数据库“C:\PROGRAM FILES\APP\CUSTOMERDB.MDF”。 CREATE DATABASE 已中止。尝试为文件 C:\Program File\App\Customerdb.mdf 附加自动命名数据库失败。
    • 这要么是因为您没有部署 sql server express edition,要么是因为应用程序没有对该文件夹的写入权限。即使这些事情对您来说没问题,但它们对您的用户来说将是一个问题。正如我所说:你真的应该把这个项目转换成一个in-process数据库引擎。
    • -进程引擎。像 Sql Server Compact 或 Access。 sql 语法会有一些细微差别,您需要 System.Data.OleDb 或 System.Data.SqlCe 命名空间而不是 System.Data.SqlClient,但除此之外一切工作完全相同,部署和用户体验都_much更好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-13
    • 1970-01-01
    • 1970-01-01
    • 2012-09-15
    • 2012-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多