【问题标题】:SqlDataAdapater.Fill(dataTable) not returning rowsSqlDataAdapter.Fill(dataTable) 不返回行
【发布时间】:2020-12-10 22:59:36
【问题描述】:

SqlDataAdapter 没有用一行填充数据表,我有一个模糊的问题。这仅在生产版本上失败。

它适用于

  • 开发者机器上的调试模式
  • 开发者机器上的发布模式

我们最近在所有表上添加了一些审核日志记录,并且有 2 个触发器在运行。 1 在表本身上将行副本作为 JSON 推送到我们的审计日志表。然后是 AuditLog 表本身的第二个触发器,如下所示:

CREATE or ALTER   TRIGGER [dbo].[trg_AuditLog_Insert] ON  [dbo].[AuditLog] AFTER INSERT
AS 
BEGIN

    SET NOCOUNT ON;

        DECLARE @Qry varchar(255)      
                        
    SELECT 
            @Qry = event_info
        FROM sys.dm_exec_sessions AS es
            CROSS APPLY sys.dm_exec_input_buffer(es.session_id, NULL) AS ib
        WHERE es.session_id = @@SPID
    
        UPDATE AuditLog 
        SET 
            [CallerProc] = @Qry
        FROM 
            AuditLog al 
            INNER JOIN inserted i on i.AuditLogID=al.AuditLogID

END

基本上它只是更新 AuditLog 表并告诉我们运行了哪个 SP 导致任何审计表的更新。

如果我们禁用此触发器,则 SQLDataAdapater.Fill 方法将按预期开始工作。基本上,Fill 方法中使用的 SQLCommand 是一个基本的存储过程,用于检查登录凭据。我添加了一些跟踪,一切似乎都正常。触发器工作正常,SQL 命令似乎工作正常,但数据表似乎没有填满(直到我们禁用触发器)。任何建议表示赞赏。

【问题讨论】:

  • ..您是否检查了 sys.dm_exec_input_buffer() 权限中的重要说明? docs.microsoft.com/en-us/sql/relational-databases/…:
  • 好的...我会调查一下。很可能是个问题吗?奇怪的是,虽然触发器仍然有效,但显然它对返回行有某种影响
  • 谢谢...就是这样...需要应用正确的权限

标签: sql-server triggers ado.net


【解决方案1】:

好的...对于那些可能遇到此问题的人。解决方案是确保为在应用程序的发布版本中使用的 SQL 用户应用 View State Server 权限

【讨论】:

    猜你喜欢
    • 2010-10-20
    • 2021-05-16
    • 2020-03-16
    • 2019-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    相关资源
    最近更新 更多