C# 如何使用C从winforms附加数据库

C# 如何使用C从winforms附加数据库,c#,sql-server,sql-server-2005,C#,Sql Server,Sql Server 2005,我已经编写了代码来检查数据库是否存在,如果不存在,那么我将尝试从本地目录附加数据库。我的代码是: SqlConnection con = new SqlConnection(@"Data Source=CENSYS08\SQLEXPRESS;Initial Catalog=master;Integrated Security=True"); con.Open(); SqlDataAdapter da = new SqlDataAdapter("s

我已经编写了代码来检查数据库是否存在,如果不存在,那么我将尝试从本地目录附加数据库。我的代码是:

        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();

        }
还有一件事,我已经允许我的本地文件作为。事件,它将作为

无法打开物理文件C:\Naresh WORK AREA\My Projects\AttachDB\Data\cstmrDB.mdf。操作系统错误2:2系统找不到指定的文件


如何将我的数据库连接到sql server。

您还应该将关联的.ldf日志文件与.mdf一起保存,否则它将抛出错误

您应该删除路径中的空格,使用类似-C:\Naresh\u WORK\u AREA\my\u Projects\AttachDB\Data\cstmrDB.mdf的“\uu”命令 如果此问题仍未解决,请尝试以下代码。 您还可以删除代码中检查查询中DB名称的额外步骤

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();

我不想在这里成为一个混蛋,但文件确实存在于该路径中吗?C:\Naresh WORK AREA\My Projects\AttachDB\Data\cstmrDB.mdfyah。。当然我将该文件从默认位置复制到此位置。我已从windows资源管理器地址栏复制了该目录。CENSYS08是您的本地计算机名吗?我认为问题在于,服务器未安装在您的本地计算机上。您必须将文件复制到机器CENSYS08。是的。。CENSYS08是我的本地机器名。我确信我已经在我的机器上安装了服务器。现在我在办公室。我们正在开发SQL2005。没有sql server我们怎么可能呢?我想没有必要。。如果有的话。我如何在queryldf文件中也附加这个参数@filename2。几个月前,这对我来说是个大问题,因为我丢失了ldf文件。但我认为这不会解决你的问题,因为现在我检查了附加一个没有.ldf的db,没有问题。sql server必须查看ldf文件。如果不存在的话,它会尝试建立一个。我过去的问题是数据库文件的前一个位置已更改,从而导致在前一个位置创建.ldf文件,在当前位置创建mdf。因此,位于不同位置的这两个文件导致了问题。。是否更改了数据库.mdf文件的位置名。。。??