【问题标题】:Cannot attach database file when setup application on other computer在其他计算机上安装应用程序时无法附加数据库文件
【发布时间】:2015-06-06 07:49:41
【问题描述】:

我已将我的数据库文件 (.mdf) 放入 bin\debug 文件夹并使用此 app.config:

<?xml version="1.0"?>
<configuration>
<configSections>
</configSections>
 <connectionStrings>
    <add name="XtopazConnectionString"
    connectionString="Data Source=.;AttachDbFilename=|DataDirectory|\Database\XTOPAZ.mdf;Initial Catalog=XTOPAZ;Integrated Security=True"
    providerName="System.Data.SqlClient" />
    </connectionStrings>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
    </startup>
</configuration>

并附加数据库功能:

public static void openConnect()
{
    try
    {
        if (File.Exists(Application.StartupPath + @"\Database\XTOPAZ.mdf"))
        {
            if (File.Exists(Application.StartupPath + @"\Database\XTOPAZ_log.ldf")) //delete current ldf file if it existed
            {
                File.Delete(Application.StartupPath + @"\Database\XTOPAZ_log.ldf");
            }
            string s = ConfigurationManager.ConnectionStrings["XtopazConnectionString"].ConnectionString;

            //Set full permisstion access for database file
            DirectoryInfo dInfo = new DirectoryInfo(Application.StartupPath + @"\Database\XTOPAZ.mdf");
            DirectorySecurity dSecurity = dInfo.GetAccessControl();
            dSecurity.AddAccessRule(new FileSystemAccessRule(new SecurityIdentifier(WellKnownSidType.WorldSid, null), FileSystemRights.FullControl, InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit, PropagationFlags.NoPropagateInherit, AccessControlType.Allow));
            dInfo.SetAccessControl(dSecurity);
            dInfo.SetAccessControl(dSecurity);

            con.ConnectionString = s;
            con.Open();
        }
        else
        {
            Exception ex;
            ex = new Exception("Database file not found");
            throw ex;
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show("Error occured when trying to connect to database\r\nDetail: " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}

我在 Visual Studio 2012 中使用 InstallShield 创建 setup.exe 并将其安装到其他计算机(在我的 C# 项目中,没有错误),我看到此错误:

我该如何解决这个问题?我已经google了,但我找不到解决方案。

【问题讨论】:

  • 您在连接字符串中使用了Integrated Security=True。我猜您可以使用 Windows 凭据登录数据库,但遇到错误的用户无法使用他们的 Windows 凭据登录。
  • @Smudge202 ,我应该更改Integrated Security=False 吗?

标签: c# sql sql-server-2012


【解决方案1】:

这种AttachDbFileName= 方法仅适用于 SQL Server Express - 因此您必须确保本地 SQL Server Express 实例存在且正在运行。

默认实例名称是.\SQLEXPRESS - 所以我建议你试试这个连接字符串:

<add name="XtopazConnectionString"
     connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database\XTOPAZ.mdf;Initial Catalog=XTOPAZ;Integrated Security=True"
     providerName="System.Data.SqlClient" />

【讨论】:

  • 我试过这个连接字符串但是这个错误仍然出现
猜你喜欢
  • 2013-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-27
  • 2012-01-15
  • 1970-01-01
相关资源
最近更新 更多