使用Tarantino数据库管理创建ASP.NET成员资格表

时间:2010-07-06 20:10:23

标签: sql-server asp.net-membership nant tarantino

我正在将Tarantino数据库管理引入到一个项目中,该项目具有全新的数据库模式。唯一的更改(位于0001_InitialSchema.sql)是创建ASP.NET成员资格中使用的表。我使用aspnet_regsql.exe生成表,然后将它们编写为CREATE TO脚本,然后将它们组合到我的单个Tarantino sql文件中。

运行我的NAnt构建脚本时,drop database命令在尝试从数据库中删除所有正在尝试删除的连接时会发生阻塞。

  

删除数据库DBName的连接

     

[call]执行Transact-SQL语句或批处理时发生异常。

     

[call]只能杀死用户进程。

这导致以下create database步骤失败,因为数据库仍然存在,并且不会应用新的更新:

  

ManageSqlDatabase:

     

使用path \ to \ source \ src \ Database

中的脚本在localhost上创建DBName      

建筑失败 - 1次非致命错误,0次警告

     

内部错误

     

Microsoft.SqlServer.Management.Common.ExecutionFailureException:执行Transact-SQL语句或批处理时发生异常。 ---> System.Data.SqlClient.SqlException:数据库'DBName'已存在。选择其他数据库名称。

脚本运行后,某些系统进程始终保持与数据库的连接。我试过在不同的机器上运行它并且存在同样的问题。我也尝试过运行一个不同的Tarantino项目,每次运行都完美无瑕。我甚至创建了一个虚拟更新文件(添加了表Foo,Bar等),它也运行没有问题。问题似乎源于ASP.NET Membership表的CREATE TABLE脚本。

您可以找到运行at PasteBin的SQL更新脚本的副本(由于其长度而与帖子分开)。

1 个答案:

答案 0 :(得分:2)

这很可能是塔伦蒂诺的一个错误。如果你看一下DropConnections.sql,你会发现作者已经因为50岁以上的会话是用户会话的旧神话而堕落。识别用户会话(以及因此KILL-able会话)的正确方法是检查sys.dm_exec_sessions中的is_user_process列。