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)
试试这个:
sqlCommandText = "DROP DATABASE [NAME]";
sqlCommand = new SqlCommand(sqlCommandText , connection);
sqlCommand.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)
我认为这会有所帮助.
Database我建议使用该Microsoft.SqlServer.Management.Smo.Server.KillDatabase方法,而不是使用类型删除TestCleanup中的数据库.此外,这将在删除数据库之前关闭所有现有SQL连接.因此,您的单元测试(或者更确切地说是集成测试)可能会使连接保持打开状态,这对清理方法没有影响.
var server = new Server(SqlServerName);
server.KillDatabase(DatabaseName);
Run Code Online (Sandbox Code Playgroud)
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.
以下是使用Entity Framework第6版的方法
System.Data.Entity.Database.Delete(connectionString);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23973 次 |
| 最近记录: |