2014-02-15 140 views
0

是否有可能創建一個可以存儲DataSet()的應用程序狀態? 我想創建可供任何用戶使用的DataSet變量。我怎樣才能做到這一點?如何將數據集()存儲在應用程序變量中?

謝謝!

+0

爲什麼你想給一個adataset用戶? –

+0

我希望每個登錄用戶都被添加到公共表中,這將包含他的IP地址,他的用戶名和登錄時間。*我不想使用數據庫 - 我想使用應用程序狀態變量* –

回答

1

這僅僅是一個設置

if(Application["myGlobalDataset"] == null) 
    Application["myGlobalDataset"] = LoadMyDataSet(); 

不過的事情,請仔細閱讀MSDN(粗體是我的)

應用程序狀態的數據儲存庫,可用於所有 類在ASP.NET應用程序。應用程序狀態存儲在服務器上的 內存中,並且比存儲和檢索數據庫中的信息要快。與會話狀態不同,會話狀態(具體到 單個用戶會話)中,應用程序狀態適用於所有用戶和會話。因此,應用程序狀態是用於存儲 的少量常用數據,這些數據不會從一個用戶更改爲 另一個

的好地方,用來初始化變量是在global.asax.cs文件

void Application_Start(object sender, EventArgs e) 
{ 
    if(Application["myGlobalDataset"] == null) 
     Application["myGlobalDataset"] = LoadMyDataSet(); 
} 

發現Application_Start事件並記住摧毀它在Application_End事件

void Application_End(object sender, EventArgs e) 
{ 
    // Code that runs on application shutdown 
    if(Application["myGlobalDataset"] != null) 
     Application["myGlobalDataset"].Dispose(); 
} 

如果您打算修改數據集的內容請記住,您需要防止對變量的併發訪問,因此需要鎖定機制。

try 
{ 
    Application.Lock() 
    Dataset ds = Application["myGlobalDataset] as Dataset; 
     ...... 
    } 
    finally 
    { 
     Application.UnLock() 
    } 

的鎖一直持續到頁面終止處理或者超時,但是我還是喜歡在try /附上一切finally塊

+0

現在爲了向表中添加一個新行,我只需要將Application變量視爲一個DataSet變量? –

+0

現在,如果您打算修改此數據集,則會出現其他問題,例如對同一變量的併發訪問。 – Steve

+0

我無法找到global.asax文件。我如何創建一個? –

0

所以你只是想將DataSet存儲在應用程序變量中?

應用程序[「YourDataSet」] = YourDataSetVariable。

從你的其他評論,它可能是最好的存儲在一個會話變量,因爲它似乎你會不斷更新的信息。

相關問題