我已编写代码来检查数据库是否存在,如果不存在,那么我正在尝试从我的本地目录附加数据库。我的代码是:
SqlConnection con = new SqlConnection(@"Data Source=CENSYS08\SQLEXPRESS;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", "cstmrDB");
cmd.Parameters.AddWithValue("@filename1", @"C:\Naresh WORK AREA\My Projects\AttachDB\Data\cstmrDB.mdf");
cmd.ExecuteNonQuery();
}
还有一件事,我已将权限授予我的本地文件this。事件正在抛出异常
无法打开物理文件“C:\ Naresh WORK AREA \ My Projects \ AttachDB \ Data \ cstmrDB.mdf”。操作系统错误2:“2(系统找不到指定的文件。)”。
如何将数据库附加到sql server。
答案 0 :(得分:2)
您应该删除路径中的空格使用'_',如C:\ Naresh_WORK_AREA \ My_Projects \ AttachDB \ Data \ cstmrDB.mdf
如果仍未解决此问题,请尝试以下代码。
您还可以删除代码中的额外步骤,以便在查询中检查数据库名称。
string query = "select name from sys.databases where name='cstmrDB'";
SqlConnection con = new SqlConnection(@"Data Source=CENSYS08\SQLEXPRESS;Initial Catalog=master;Integrated Security=True");
SqlDataAdapter da = new SqlDataAdapter(query , con);
DataTable dt = new DataTable();
con.Open();
da.Fill(dt);
if(dt.Rows.Count==0)
{
query=" CREATE DATABASE AdventureWorks2008R2 ON"+
" (FILENAME = 'C:\Naresh_WORK_AREA\My_Projects\AttachDB\Data\cstmrDB.mdf'), "+
" (FILENAME = 'C:\Naresh_WORK_AREA\My_Projects\AttachDB\Data\cstmrDB.ldf'),"+
" (FILENAME = 'c:\myFTCatalogs\cstmrDBCat')"+
" FOR ATTACH;"
SqlCommand cmd = new SqlCommand(query);
cmd.Connection = con;
cmd.ExecuteNonQuery();
}
con.Close();
答案 1 :(得分:0)
您还应该将相关的.ldf(日志文件)文件与.mdf一起使用,否则会抛出错误