我不能用一个简单的存储过程获得的SqlCacheDependency工作(SQL Server 2008中):

create proc dbo.spGetPeteTest
as

set  ANSI_NULLS ON
set ANSI_PADDING ON
set ANSI_WARNINGS ON
set CONCAT_NULL_YIELDS_NULL ON
set QUOTED_IDENTIFIER ON
set NUMERIC_ROUNDABORT OFF
set ARITHABORT ON

select Id, Artist, Album
from dbo.PeteTest

这是我的ASP.NET代码(3.5框架):

-- global.asax
    protected void Application_Start(object sender, EventArgs e)
{
    string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["MyConn"].ConnectionString;
    System.Data.SqlClient.SqlDependency.Start(connectionString);
}

 -- Code-Behind
private DataTable GetAlbums()
{
    string connectionString =
    System.Configuration.ConfigurationManager.ConnectionStrings["UnigoConnection"].ConnectionString;

    DataTable dtAlbums = new DataTable();

    using (SqlConnection connection =
        new SqlConnection(connectionString))
    {
    // Works using select statement, but NOT SP with same text
    //SqlCommand command = new SqlCommand(
    //    "select Id, Artist, Album from dbo.PeteTest", connection);
    SqlCommand command = new SqlCommand();
    command.Connection = connection;
    command.CommandType = CommandType.StoredProcedure;
    command.CommandText = "dbo.spGetPeteTest";


    System.Web.Caching.SqlCacheDependency new_dependency =
        new System.Web.Caching.SqlCacheDependency(command);


    SqlDataAdapter DA1 = new SqlDataAdapter();
    DA1.SelectCommand = command;

    DataSet DS1 = new DataSet();

    DA1.Fill(DS1);

    dtAlbums = DS1.Tables[0];

    Cache.Insert("Albums", dtAlbums, new_dependency);
    }

    return dtAlbums;

}

任何人有得到这个工作与SP的任何运气? 谢谢!

有帮助吗?

解决方案

我这出,需要设置查询选项之前创建SP。得到它的工作,当我创建的SP如下:

USE [MyDatabase]
GO

set ANSI_NULLS ON
set ANSI_PADDING ON
set ANSI_WARNINGS ON
set CONCAT_NULL_YIELDS_NULL ON
set QUOTED_IDENTIFIER ON
set NUMERIC_ROUNDABORT OFF
set ARITHABORT ON
go


create proc [dbo].[spGetPeteTest]
as

select Id, Artist, Album
from dbo.PeteTest

GO

其他提示

您不会从缓存每次返回数据。这应该是这样的:

if (Cache["Albums"]!=null)
{
   return (DataTable) Cache["Albums"];
}
else
{
  // you need to write coding from database.
}

另一个原因可以是这在SQL语句:

AND dbo.[PublishDate] <= GetDate()

的SqlCacheDependency 将表现为如果基础数据已经改变,即使还没有,因为GETDATE()是动态的(如果同样你是经由@parameter传递DateTime.Now)。

这是不是明显,我重新写我PROC后,按照上面所有的好建议,也没有忘记也从PROC删除“SET NOCOUNT ON”。的的SqlCacheDependency 过期缓存如果数据变化的 OR 的查询参数值的变化,这是有意义的我想。

有关使用我这样的事情在存储过程中没有工作。

select id, name from dbo.tblTable;

我不得不明确提出在这样的引用。

select dbo.tblTable.id, dbo.tblTable.name from dbo.tblTable;

SQL缓存不会工作,如果你使用select *,你也需要确保你在你的表名前加上dbo(或相关的架构)。 您还可以检查SQL事件探查器来验证,如果你的sql运行,希望会帮助你等等......

请注意,你不能使用

与(NOLOCK)

在存储过程或依赖将保持不断地无效。 这并不出现在文档中被提及,只要能告诉我

我意识到,原来的海报并没有这样做,但没有人来这里已经在标题中所述问题可能已经这样做了,所以我认为这是值得一提。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top