首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >未激发SqlTableDependency onchange事件

未激发SqlTableDependency onchange事件
EN

Stack Overflow用户
提问于 2016-12-16 00:39:05
回答 2查看 11.1K关注 0票数 9

我对SqlTableDependency有意见。当我对期望的表执行insert/update/delete操作时,我更改的方法不会被调用。OnStatusChanged事件工作正常。

代码语言:javascript
运行
复制
 string conn = @"data source=secret server; integrated security=True; initial catalog=secret db;User id=secret user";

    var mapper = new ModelToTableMapper<SqlDataModel>();

    mapper.AddMapping(c => c.datavalue, "datavalue");       

    using (var dep = new SqlTableDependency<SqlDataModel>(conn, "data", mapper))
    {
        dep.OnChanged +=  Changed;
        dep.OnStatusChanged += OnStatusChanged;
        dep.OnError += OnError;
        dep.TraceLevel = TraceLevel.Verbose;
        dep.TraceListener = new TextWriterTraceListener(Console.Out);            
        dep.Start();          

        Console.WriteLine("Press a key to exit");           
        Console.ReadKey();            
        dep.Stop();
    }
}
static void OnStatusChanged(object sender, StatusChangedEventArgs e)
{
    Console.WriteLine(e.ToString());
}
static void OnError(object sender, ErrorEventArgs e)
{
    Console.WriteLine(e.ToString());
}
static void Changed(object sender, RecordChangedEventArgs<SqlDataModel> e)
{      
    if (e.ChangeType != ChangeType.None)
    {
        var changedEntity = e.Entity;
        Console.WriteLine("DML operation: " + e.ChangeType);          
        Console.WriteLine("value: " + changedEntity.datavalue);
    }
}

上面的代码我基于https://tabledependency.codeplex.com/wikipage?title=SqlTableDependency,我确信我有并且我正在使用db_owner角色。我启用了代理,我看到触发器、服务等都是在mssql数据库中创建的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-27 23:03:54

我终于在我的sys.transmission_queue表中发现了错误:在目标队列中将消息入队时发生异常。错误:

15517,状态: 1。无法作为数据库主体执行,因为主体"dbo“不存在,无法模拟此类型的主体,或者您没有权限。

尽管数据库已经给了我完全的权限,但我还没有这样做

代码语言:javascript
运行
复制
ALTER AUTHORIZATION ON DATABASE::secret db TO sa
票数 9
EN

Stack Overflow用户

发布于 2019-10-11 14:03:04

另请查看https://github.com/christiandelbianco/monitor-table-change-with-sqltabledependency的“注意兼容性级别和数据库版本以跟踪记录更改”部分。

即使您的SQL Server实例是SQL Server2008 R2或最新版本,也可能是您的数据库是使用旧的SQL Server版本创建的,例如SQL Server2005.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41169144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档