2011-07-05 82 views
1
SqlConnection sqlConn = new SqlConnection(m_connectionString); 
m_cmd = sqlConn.CreateCommand(); 
m_cmd.CommandText = "Select id,name from dbo.instances"; 
m_cmd.Notification = null; 
SqlCacheDependency cacheDepen = new SqlCacheDependency(m_cmd); 

using (SqlDataAdapter sda = new SqlDataAdapter(m_cmd)) 
{ 
    DataSet ds = new DataSet(); 
    sda.Fill(ds, "instance"); 
    Cache.Insert("instance", ds.Tables["instance"],cacheDepen); 
    Cache.Insert("timeNow", DateTime.Now.ToLongTimeString(), cacheDepen); 
} 

我通過SqlCacheDependency創建了一個Web應用程序,Sql Server利用Service Broker在數據更新時通知我。 它在最後兩行中引發異常「試圖從多個Cache條目引用CacheDependency對象」。 我應該爲異常做什麼?如何將一個SqlCacheDependency附加到多個Cache項目?

回答

0

我只是放在一起快速控制檯應用程序測試重用SqlCacheDependency對象,它工作正常如果你離開了m_cmd.Notification = null;

namespace CacheDependencyReuse 
{ 
class Program 
{ 
    static void Main(string[] args) 
    { 
     SqlCommand cmd = new SqlCommand("SELECT * FROM Products"); 
     SqlCacheDependency dep = new SqlCacheDependency(cmd); 

     // Uncomment this line to get the Exception 
     //cmd.Notification = null; 

     using (SqlConnection conn = new SqlConnection("Data Source=xxx; Initial Catalog=Northwind;User ID=xxx; Password=xxx;")) 
     { 
      SqlDependency.Start(conn.ConnectionString); 
      cmd.Connection = conn; 
      SqlDataAdapter adapter = new SqlDataAdapter(cmd); 
      DataSet productDataSet = new DataSet(); 
      conn.Open(); 
      adapter.Fill(productDataSet); 


      HttpRuntime.Cache.Insert("Products",productDataSet,dep); 
      HttpRuntime.Cache.Insert("Now",DateTime.Now,dep); 

     } 

     Console.ReadLine(); 
    } 
} 

}

我認爲,如果你離開Notification操作使用默認值,則運行時將整理你。

+0

對不起,它會在您的建議中再次引發我的代碼中的異常。我使用了需要Service Broker支持的SqlDependency,它與控制檯應用程序有一些不同。 –

相關問題