以编程方式附加数据库
本文关键字:数据库 方式附 编程 | 更新日期: 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
,然后将适当的权限应用于需要它的文件夹/文件。