【发布时间】:2015-08-06 17:52:51
【问题描述】:
我正在 .Net 中创建需要更改数据库以设置测试场景的测试方法。我们使用 SqlCommands 发送查询以更改数据库,此连接字符串是受信任的连接字符串。所有 DROPS 和 ALTER 查询对于表、列、约束等都可以正常工作。但是当我尝试 DROP 触发器时,出现以下错误。
SQL EXCEPTION: 'Cannot drop the trigger 'dbo.TRIG_Application_Insert', because it does not exist or you do not have permission.'
查询是DROP TRIGGER [dbo].[TRIG_Application_Insert],它之所以有效,是因为它已经在 SQL Management Studio 中直接测试过,并且在通过sqlcmd 工具调用的将触发器添加到数据库的脚本中使用。
这可能是权限问题,还是使用 .Net SqlCommand 时查询需要不同?
我尝试为 sa 用户和具有高权限的 db 用户使用标准安全连接字符串,但仍然遇到相同的错误。
【问题讨论】:
-
不,您不需要其他声明。您确定在连接字符串上设置了 Initial_Catalog 吗?如果不是,您的命令没有针对正确的数据库运行。
-
当您运行脚本添加触发器时,您是进入 SQL Management Studio 并查看创建的触发器还是在回滚的事务中?
-
@shf301 我的连接字符串是 Data Source=(local)\SQLEXPRESS2012;Initial Catalog=master;Integrated Security=True
-
@JeffO 每个测试都会重新生成数据库以在每个测试上都有一个干净的实例,然后修改这个实例;在将它们写入 .Net 代码之前,我直接在 SQL Management Studio 上(在一个干净的数据库实例中)尝试我的查询。在 Management Studio 中,查询工作得很好,它们确实按预期删除了触发器
-
在 SQL Management Studio 上运行 DROP TRIGGER 可以正常工作,因为为新查询选择了所需的数据库。在查询窗口的右下方显示正在运行针对查询的数据库。
标签: c# .net sql-server sqlcommand