c# 変数名 データベースをプログラムで切り離す




変数名 命名規則 (3)

データベース "D:\ MDF CONNECTION SAMPLE \ BIN \ DEBUG \ HARMDATABASE.MDF"があります。 このコードを使用して、切り離しまたは名前を変更しようとしています:

SqlConnection conn = new SqlConnection("Data Source=.\\MSSQLSERVER2008;database=Master;Integrated Security=True;");
SqlCommand cmd = new SqlCommand("", conn);
cmd.CommandText = @"sys.sp_detach_db D:\MDF CONNECTION SAMPLE\BIN\DEBUG\HARMDATABASE.MDF";
conn.Open(); 
cmd.ExecuteNonQuery();
cmd.Dispose();
conn.Dispose();

しかし、エラーを取得する:

'\'付近の構文が正しくありません。


データベースを切り離すと同時にエラーを解決するために

現在使用中のため、データベース 'YOUR_DATABASE'をデタッチできません

次のコードをそのまま使用することができます:

    private void DetachDatabase()
    {
        String databaseConnectionString = "Data Source=localhost;MultipleActiveResultSets=True;Integrated Security=True";
        using (SqlConnection sqlDatabaseConnection = new SqlConnection(databaseConnectionString))
        {
            try
            {
                sqlDatabaseConnection.Open();
                string commandString = "ALTER DATABASE YOUR_DATABASE SET OFFLINE WITH ROLLBACK IMMEDIATE ALTER DATABASE YOUR_DATABASE SET SINGLE_USER EXEC sp_detach_db 'YOUR_DATABASE'";
                SqlCommand sqlDatabaseCommand = new SqlCommand(commandString, sqlDatabaseConnection);
                sqlDatabaseCommand.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
    }

YOUR_DATABASEは一重引用符なしで、時には一重引用符で囲まれて記述されることがあります。 YOUR_DATABASE.mdf拡張子を持たないデータベースの名前で置き換え、残りの文字列をそのまま残してください...

このウェブサイトのおかげで、 データベース接続の切断

そしてこのウェブサイト: SQL Server - データベースを切り離す方法

ちなみに、これはSQL Server 2014で私にとって役に立ちました


SMOの使用はどうですか?

あなたは、SQL ExpressまたはSQL Serverがあなたの開発マシンにインストールされているときに利用できるMicrosoft.SqlServer.Smoへの参照を追加する必要があります。

using Microsoft.SqlServer.Management.Smo;

void Detach()
{
  Server smoServer = new Server("MSSQLSERVER2008");
  smoServer.DetachDatabase("HARMDATABASE", False);
}

クエリの中に引用符を入れず、@ KyleHaleが指摘したように、データベースの名前である必要があり、そこへのパスではありません。

変化する:

cmd.CommandText = @"sys.sp_detach_db D:\MDF CONNECTION SAMPLE\BIN\DEBUG\HARMDATABASE.MDF;";

することが:

cmd.CommandText = @"sys.sp_detach_db 'dbName'";






ado.net