C# Sql server缓存问题

C# Sql server缓存问题,c#,.net,sql-server,caching,C#,.net,Sql Server,Caching,我使用的是SQLServer2008R2、VS2008、C#on.NET3.5和SqlHelper 例如,updateData(intid)方法加载一些与“id”相关的数据,进行大量计算和处理,并重新提交数据。有一个单独的程序doThings(intid),它执行一组任务,其中每个任务操作与“id”相关的数据,然后在事务中提交该数据。其中一些任务在提交后调用updateData(int-id),但是updateData(int-id)没有按照最新提交更新数据。过了一段时间,如果我重新运行upda

我使用的是SQLServer2008R2、VS2008、C#on.NET3.5和SqlHelper

例如,updateData(intid)方法加载一些与“id”相关的数据,进行大量计算和处理,并重新提交数据。有一个单独的程序doThings(intid),它执行一组任务,其中每个任务操作与“id”相关的数据,然后在事务中提交该数据。其中一些任务在提交后调用updateData(int-id),但是updateData(int-id)没有按照最新提交更新数据。过了一段时间,如果我重新运行updateData(intid),那么更新应该完成

为了更清楚地说明这一点,以下是该计划正在做的事情-

doTask(int id) //updates some table related to id and calls updateData()
doTask(int id) //updates some table related to id and calls updateData()
doTask(int id) //updates some table related to id and calls updateData()
doTask(int id) //updates some table related to id and calls updateData()
...
输出-数据未更新

过了一会儿-

updateData() //recalculates and updates the data
输出-更新数据

我知道SQL Server缓存查询结果集。但是,如果我已经更新了缓存中的表的一部分,那么它不应该重新创建结果集。我在不同的环境(测试和生产)中尝试过这一点,但没有得到太多帮助

每个doTask(int-id)都在使用事务更新数据库,并且该事务已完成,最后一次调用updateData不会像最终那样更新数据。一旦事务完成,就会调用updateData(),它也使用事务。这里有什么与缓存相关的帮助吗?因为我必须在这里发布大量代码,我甚至不被允许这样做

我尝试了两种方法,两种方法都有效-

  • 添加了一个500毫秒的线程
  • 调试并将doTask()中对updateData()的调用推迟了一秒钟
  • 我知道SQL Server缓存查询结果集

    这是不正确的。SQLServer不缓存查询结果,也不缓存任何其他关系数据库

    您需要提供问题所在、表结构、运行的查询、预期结果和实际结果的清晰示例。事实上,这个问题是无法回答的

    根据您对结果缓存的评论,我不相信您理解事务和隔离。假设您的代码(根本没有显示)至少执行一次查询,而不是一次又一次地显示相同的本地缓存数据,那么您描述的内容可以通过更新丢失(应用程序中的代码不正确)以及在快照隔离下操作和不理解行为来解释

    我知道SQL Server缓存查询结果集

    这是不正确的。SQLServer不缓存查询结果,也不缓存任何其他关系数据库

    您需要提供问题所在、表结构、运行的查询、预期结果和实际结果的清晰示例。事实上,这个问题是无法回答的


    根据您对结果缓存的评论,我不相信您理解事务和隔离。假设您的代码(根本没有显示)至少执行一次查询,而不是一次又一次地显示相同的本地缓存数据,那么您描述的内容可以通过更新丢失(应用程序中的代码不正确)以及在快照隔离下操作和不理解行为来解释

    Sql server不会缓存结果,而是缓存生成结果的计划。 你能说出UpdateData调用的查询是什么吗?交易似乎已经开始,但尚未提交?
    或者,如果您正在运行相同的UpdateData(),则可能会在表上创建一个类似锁的条件,以防止其他实例更新。

    Sql server不会缓存它缓存生成结果的计划的结果。 你能说出UpdateData调用的查询是什么吗?交易似乎已经开始,但尚未提交?
    或者,如果正在运行相同的UpdateData(),这可能是在表上创建了一个类似锁的条件,阻止了其他实例的更新。

    BTW:MySQL确实如此@PankajKohli缓存结果和@MartinSmith之间有很大的区别。@MartinSmith我知道我应该说“任何严肃的关系数据库…”,然后我可以随时排除任何反例:)严肃地说,尽管我不知道关于MySQL的行为(或者如果我知道我忘记了…)。顺便说一句:MySQL确实@PankajKohli缓存结果和@MartinSmith之间有很大的区别。我知道我应该说“任何严重的关系数据库…”,然后我总是可以忽略任何反例:),尽管我不知道MySQL的行为(或者,如果我知道我忘了…)不,那里发生了其他事情。发布一些代码。不,那里发生了其他事情。发布一些代码。