从C#删除数据库

khr*_*055 13 c# sql-server mstest

我有一个MDF文件,我在使用MSTEST进行测试时附加到我的本地SQL服务器,我不想在运行测试集50次后手动删除这些临时数据库.(我已经这样做了,我不喜欢它..<)在我的TestCleanup方法中,我正在寻找一种从服务器中删除数据库的方法.我只需要一些关于我将用来执行此操作的SQL语句的指导.

思考?

Thx提前!:d

编辑(由软件猴子,从OP的拒绝编辑到ODED的答案)

这是适合我的代码:

var server = new Server(serverName); // Can use overload that specifies 

foreach (Database db in server.Databases)
{
     if (db.Name.ToLower().Contains(testDatabaseIdentifier))
     {
          databasesToDelete.Add(db.Name);
     }
}
databasesToDelete.ForEach(x =>
{
     Database db = new Database(server, x);
     db.Refresh();
     db.Drop();
});
Run Code Online (Sandbox Code Playgroud)

Ode*_*ded 16

看一下SMO(SQL Server管理对象).NET包装器.

这些允许您从代码管理SQL Server的所有方面,包括删除数据库.

数据库对象有一个Drop方法.

下面的代码是为了说明如何使用对象模型,尽管我还没有测试过它:

var server = new Server(serverName); // Can use overload that specifies 

foreach (Database db in server.Databases)
{
     if (db.Name.ToLower().Contains(testDatabaseIdentifier))
     {
          databasesToDelete.Add(db.Name);
     }
}
databasesToDelete.ForEach(x =>
{
     Database db = new Database(server, x);
     db.Refresh();
     db.Drop();
});
Run Code Online (Sandbox Code Playgroud)


bud*_*uda 9

试试这个:

sqlCommandText = "DROP DATABASE [NAME]";
sqlCommand = new SqlCommand(sqlCommandText , connection);
sqlCommand.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)

我认为这会有所帮助.


feO*_*O2x 5

Database我建议使用该Microsoft.SqlServer.Management.Smo.Server.KillDatabase方法,而不是使用类型删除TestCleanup中的数据库.此外,这将在删除数据库之前关闭所有现有SQL连接.因此,您的单元测试(或者更确切地说是集成测试)可能会使连接保持打开状态,这对清理方法没有影响.

var server = new Server(SqlServerName);
server.KillDatabase(DatabaseName);
Run Code Online (Sandbox Code Playgroud)


mhe*_*man 5

feO2x的答案很有效,但他没有提供代码.如果您的app.config中有数据库连接字符串,则以下情况有效.

using System.Configuration;
using System.Data.SqlClient;
using Microsoft.SqlServer.Management.Common;
public class Foo
{
    public static void DropDatabase(string connectionName)
    {
        using (
            var sqlConnection =
                new SqlConnection(
                    ConfigurationManager.ConnectionStrings[connectionName]
                    .ConnectionString))
        {
            var serverConnection = new ServerConnection(sqlConnection);
            var server = new Microsoft.SqlServer.Management.Smo.Server(
                             serverConnection);
            server.KillDatabase(sqlConnection.Database);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

您必须引用System.Data,*System.Configuratio*n,Microsoft.SqlServer.ConnectionInfo,Microsoft.SqlServer.Management.Sdk.Sfc和Microsoft.SqlServer.Management.Smo.


Bas*_*sem 5

以下是使用Entity Framework第6版的方法

System.Data.Entity.Database.Delete(connectionString);
Run Code Online (Sandbox Code Playgroud)