C#学习教程:从C#中删除数据库设置50次临时数据库。(我已经这样做了,但我不喜欢它。<)我正在寻找一种方法,在我完成测试后用我的TestCleanup方法从服务器中删除数据库。我只需要一些关于执行此操作的SQL语句的指导。思考?提前致谢!:D编辑(由软件猴子编辑,从OP拒绝编辑到ODED答案)这是对我有用的代码:varserver=newServer(serverName);//可以使用指定foreach(Databasedbinserver.Databases)的重载{if(db.Name.ToLower().Contains(testDatabaseIdentifier)){databasesToDelete.Add(db.Name);}}databasesToDelete.ForEach(x=>{Databasedb=newDatabase(server,x);db.Refresh();db.Drop();});查看SMO(SQLServer管理对象).NET包装器。这些允许您从代码管理SQLServer的所有方面,包括删除数据库。数据库对象有一个Drop方法。下面的代码是为了说明如何使用对象模型,虽然我没有测试过:varserver=newServer(serverName);//可以使用指定foreach(Databasedbinserver.Databases)的重载{if(db.Name.ToLower().Contains(testDatabaseIdentifier)){databasesToDelete.Add(db.Name);}}databasesToDelete.ForEach(x=>{Databasedb=newDatabase(server,x);db.Refresh();db.Drop();});试试这个:sqlCommandText="DROPDATABASE[NAME]";sqlCommand=newSqlCommand(sqlCommandText,连接);sqlCommand.ExecuteNonQuery();我认为这会有所帮助。我建议使用Microsoft.SqlServer.Management.Smo.Server.KillDatabase方法而不是使用Database类型来删除TestCleanup中的数据库。此外,这将在删除数据库之前关闭所有现有的SQL连接。因此,您的单元测试(或更确切地说是集成测试)可能会使连接保持打开状态,这对清理方法没有影响。varserver=newServer(SqlServerName);server.KillDatabase(数据库名称);feO2x的答案有效,但他没有提供代码。如果您的app.config中有数据库连接字符串,则以下内容有效。使用系统配置;使用System.Data.SqlClient;使用Microsoft.SqlServer.Management.Common;publicclassFoo{publicstaticvoidDropDatabase(stringconnectionName){使用(varsqlConnection=newSqlConnection(ConfigurationManager.ConnectionStrings[connectionName].ConnectionString)){varserverConnection=newServerConnection(sqlConnection);varserver=newMicrosoft.SqlServer.Management.Smo.Server(serverConnection);server.KillDatabase(sqlConnection.Database);}}}您必须引用System.Data,*System.Configuratio*n,Microsoft.SqlServer.ConnectionInfo,Microsoft.SqlServer.Management.Sdk.Sfc和Microsoft.SqlServer.Management.Smo。这是使用实体框架版本6System.Data.Entity.Database.Delete(connectionString)的方法;I.创建资源文件(Resources.rsx)并编写sql查询:DECLARE@DatabaseNamenvarchar(50)SET@DatabaseName=N'{0}'DECLARE@SQLvarchar(max)SELECT@SQL=COALESCE(@SQL,'')+'Kill'+Convert(varchar,SPId)+';'FROMMASTER..SysProcessesWHEREDBId=DB_ID(@DatabaseName)ANDSPId@@SPIdEXEC(@SQL)IFEXISTS(select*fromsys.databaseswherename='{0}')DROPDATABASE[{0}]II.将MsSqlDatabaseTestsHelper类添加到测试项目中publicclassMsSqlDatabaseTestsHelper{privatereadonlystring_connectionString;publicMsSqlDatabaseTestsHelper(stringconnectionString){_connectionString=connectionString;}privatevoidExecuteNonQuery(stringsql){使用(varconnection=newSqlConnection(_connectionString)){connection.Open();SqlCommand命令=connection.CreateCommand();命令.CommandText=sql;命令.ExecuteNonQuery();}}publicvoidCreateDatabase(stringdatabaseName){ExecuteNonQuery("CREATEDATABASE{0}".Set(databaseName));}publicvoidDropDatabase(stringdatabaseName){try{ExecuteNonQuery(Resources.SQL_KillConnections.Set(databaseName));}catch(Exception){thrownewException("Can'tkilldatabase'{0}'connections".Set(databaseName));}try{ExecuteNonQuery(Resources.SQL_DropDatabaseIfExists.Set(databaseName));}catch(Exception){thrownewException("Can'tdropdatabase'{0}'".Set(databaseName));}}}三在单元测试[TestFixture]中使用数据库助手privateconststringConnectionStringcondStringWithoutDatabase=@"server=.SqlExpress;pstringDatabaseName="TestPersistence";[SetUp]publicvoidSetUp(){_msSqlDatabaseTestsHelper.DropDatabase(DatabaseName);_msSqlDatabaseTestsHelper.CreateDatabase(DatabaseName);}[TearDown]publicvoidTearDown(){_msSqlDatabaseTestsHelper.DropDatabase(DatabaseName);]publicvoidTestSomethingWithDatabaseUsing(){}}或者试试这个以上是C#学习教程:从C#中删除所有数据库共享的内容,如果对大家有用需要想了解更多C#学习教程,希望大家多多关注—varsqlCommandText="DROPDATABASE[dbName]";varsqlConnection=newSqlConnection(connectionstring);varsqlCommand=newSqlCommand(sqlCommandText,sqlConnection);sqlConnection.OpenAsync();sqlCommand.ExecuteNonQuery();本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处:
