以编程方式附加数据库

本文关键字:数据库 方式附 编程 | 更新日期: 2023-09-27 18:36:39

我的项目中有一个登录表单,当加载此登录表单时,我编写以下代码来附加我的数据库(d:'' 中有):

try
{ 
    SqlConnection con = new SqlConnection(@"Data Source=.;Initial Catalog=master;Integrated Security=True");
    con.Open();
    SqlDataAdapter da = new SqlDataAdapter("select name from sys.databases", con);
    DataTable dt = new DataTable();
    da.Fill(dt);
    string[] array = dt
        .AsEnumerable()
        .Select(row => row.Field<string>("Name"))
        .ToArray();
    if (!array.Contains("cstmrDB", StringComparer.OrdinalIgnoreCase))
    {
        SqlCommand cmd = new SqlCommand("sp_attach_db");
        cmd.Connection = con;
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue("@dbname", "Apdb");
        cmd.Parameters.AddWithValue("@filename1", @"d:'Apdb.mdf");
        cmd.ExecuteNonQuery();
    }
}
catch (exception ex) 
{ 
    messagebox.show(ex.message); 
}

它在我的笔记本电脑中工作正常。 我发布我的项目(使用 c# 发布)并安装 SQL Server 和我的项目,并在 d:'' 中复制我的数据库在另一台 PC 中。但是当我运行我的项目时,数据库不会附加! 我不知道为什么会出现这个问题...但我认为也许原因是我没有编写任何代码来定义 *.ldf 文件(但我将 mdf 和 ldf 文件都放在 d:'' 中)

错误: 与 SQL Server 建立连接时发生与网络相关或特定于实例的错误。

找不到服务器或无法访问服务器。验证实例名称是否正确,以及 SQL Server 是否配置为允许远程连接。

(提供程序:

命名管道提供程序,错误:40 - 无法打开与 SQL Server 的连接)

以编程方式附加数据库

我冒昧地猜测这是一个权限问题,通常新安装的SQL Server正在运行一个NETWORK_SERVICE这是一个非常低的特权帐户。 它可能无法访问G驱动器的根目录(或其任何部分)。

您可以通过将服务更改为LocalSystem运行来非常快速地测试这一点。 一旦您确认这是一个问题,我建议您将登录使用更改回NETWORK_SERVICE,然后将适当的权限应用于需要它的文件夹/文件。