3

データベースが存在するかどうかを確認するコードを作成しました。存在しない場合は、ローカル ディレクトリからデータベースをアタッチしようとしています。私のコードは次のとおりです。

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

        }

もう1つ、ローカルファイルにthisとして許可を与えました。として例外をスローしているイベント

物理ファイル「C:\Naresh WORK AREA\My Projects\AttachDB\Data\cstmrDB.mdf」を開けません。オペレーティング システム エラー 2:「2(指定されたファイルが見つかりません。)」。

データベースを SQL サーバーに接続するにはどうすればよいですか。

4

2 に答える 2

2

C:\Naresh_WORK_AREA\My_Projects\AttachDB\Data\cstmrDB.mdf のように「_」を使用してパスのスペースを削除する必要があります
。それでもこの問題が解決しない場合は、次のコードを試してください。また、クエリで 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();
于 2013-09-05T11:33:14.583 に答える
0

関連する .ldf (ログ ファイル) ファイルと .mdf も必要です。そうしないと、エラーがスローされます。

于 2013-09-05T08:05:16.007 に答える