2017-03-11 4 views
1

私はこの声明の問題を見ることができません。私はバックアップからDBファイルを復元しようとしています。 conは既に開いています。データベースのバックアップを復元するとき、SQL文でこのエラーが表示されます@dbの近くの構文が間違っています。すぐ近くに構文がありません

if (con.State == ConnectionState.Closed) 
     { 
      con.Open(); 
     } 
     string db = con.Database.ToString(); 
    using (SqlCommand cmd = new SqlCommand("ALTER DATABASE @db SET Single_User WITH Rollback Immediate", con)) 
       { 
        cmd.Parameters.AddWithValue("@db", db); 
        cmd.ExecuteNonQuery(); 
       } 

答えて

1

alter文にデータベース名変数を渡すことはできません。クエリを動的に構築してから実行する必要があります。

using (SqlCommand cmd = new SqlCommand("ALTER DATABASE [" + db + "] SET Single_User WITH Rollback Immediate", con)) 

が、SQLコマンドを作成するこの方法は、AQL注入

を危険にさらすことに注意
関連する問題