0

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で動作させることに成功した人はいますか? ありがとう!

4

6 に答える 6

0

別の原因として、SQL ステートメントで次のことが考えられます。

AND dbo.[PublishDate] <= GetDate()

GetDate () は動的であるため (同様に、@ パラメータを介して DateTime.Now を渡す場合)、SQLCacheDependency は基になるデータが変更されていなくても変更されたかのように動作します。

上記のすべての良い提案に従ってprocを書き直した後、これは私には明らかではありませんでした。また、procから「SET NOCOUNT ON」を削除することも忘れていませんでした。SQLCacheDependencyは、データが変更された場合、またはクエリ パラメーターの値が変更された場合にキャッシュを期限切れにします。これは理にかなっていると思います。

于 2012-03-07T20:46:30.707 に答える
0

私にとって、ストアドプロシージャでこのようなものを使用してもうまくいきませんでした。

select id, name from dbo.tblTable;

このような参照を明示的に入れなければなりませんでした。

select dbo.tblTable.id, dbo.tblTable.name from dbo.tblTable;
于 2010-09-24T15:22:22.043 に答える
0

を使用する場合、SQL キャッシュは機能しません。また、テーブル名の前に (または関連するスキーマ)select *を入れる必要があります。dboSQLプロファイラをチェックして、sql実行されているかどうかを確認することもできます....

于 2010-12-01T00:57:29.540 に答える