データベースの行の変更に基づいてキャッシュを無効にしようとしています。同じデータベースとテーブルを使用してlinqで同じことを実行しながら成功を収めましたが、Iamは基本的な方法でそれを実行できません。
これが私が書いたコードです、助けてください:
public DataSet GetData(string sqlCmd)
{
string connectionStr = System.Configuration.ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString;
string cacheKey = "test123";
DataSet ds = (DataSet)HttpRuntime.Cache.Get(cacheKey);
if (ds != null)
{
return ds;
}
SqlCacheDependency sqldep = null;
SqlConnection conn = new SqlConnection(connectionStr);
SqlCommand cmd = new SqlCommand(sqlCmd, conn);
cmd.Notification = null;
cmd.NotificationAutoEnlist = true;
SqlDataAdapter sqlAd = new SqlDataAdapter(cmd);
ds = new DataSet();
sqlAd.Fill(ds);
System.Web.Caching.SqlCacheDependencyAdmin.EnableNotifications(connectionStr);
string NotificationTable = "TblMetaData";
if (!System.Web.Caching.SqlCacheDependencyAdmin.GetTablesEnabledForNotifications(connectionStr).Contains(NotificationTable))
System.Web.Caching.SqlCacheDependencyAdmin.EnableTableForNotifications(connectionStr, NotificationTable);
sqldep = new SqlCacheDependency(cmd);
HttpRuntime.Cache.Insert(cacheKey, ds, sqldep);
return ds;
}
私はSQLServer2005を使用しており、コマンド通知で機能する完全修飾クエリを使用しています。
Linqの他のコードは、同じデータベースとテーブルで完全に機能しているため、ServiceBrokerやその他のアクセス許可が設定されていないことについては意味がありません。この問題を取り除くのを手伝ってください。