我的项目中有一个登录表单,当我登录表单加载时,我在下面编写代码来附加我的数据库(在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#publish)并安装SQL Server和我的项目,并将我的数据库复制到另一台PC的d:\中。但是当我运行我的项目时,数据库不会被附加!我不知道为什么会出现这个问题...但我想也许是因为我没有编写任何代码来定义* .ldf文件(但我把mdf和ldf文件放在d:\中)
错误:建立与SQL Server的连接时发生与网络相关或特定于实例的错误。
找不到服务器或无法访问服务器。验证实例名称是否正确,以及SQL Server是否配置为允许远程连接。
(provider:Named Pipes Provider,错误:40 - 无法打开与SQL Server的连接)
答案 0 :(得分:2)
我冒昧地猜测这是一个权限问题,通常新安装的SQL Server正在运行<reference>.observeEventType(FEventType.Value, withBlock: { snapshot in
let currentUser = snapshot.value.objectForKey("username") as! String
<--your code-->
print("Username: \(currentUser)")
self.currentUsername = currentUser
}, withCancelBlock: { error in
print(error.description)
})
}
这是一个相当低权限的帐户。 可能无法访问G驱动器的根目录(或其任何部分)。
您可以通过将服务更改为NETWORK_SERVICE
来快速测试。一旦您确认这是一个问题,我建议您将使用日志更改回LocalSystem
,然后将相应的权限应用于需要它的文件夹/文件。