📄 outofboundsqlproviderhelper.cs
字号:
//------------------------------------------------------------------------------
// <copyright company="Telligent Systems">
// Copyright (c) Telligent Systems Corporation. All rights reserved.
// </copyright>
//------------------------------------------------------------------------------
using System;
using System.Collections;
using System.Threading;
using CommunityServer.Components;
namespace CommunityServer.Data
{
/// <summary>
/// Summary description for WebSqlProviderHelper.
/// </summary>
public class OutOfBoundSqlProviderHelper : ProviderHelper
{
#region Member Variables
private string databaseOwner = "dbo";
private string connectionString = null;
const string cacheKey = "OOB.DataProviderKey.SettingsIDs";
#endregion
#region Constructor
public OutOfBoundSqlProviderHelper(string databaseOwner, string connectionString)
{
this.connectionString = connectionString;
this.databaseOwner = databaseOwner;
}
#endregion
public override int GetSettingsID()
{
Hashtable threadsTable = GetThreadsTable();
// Check if it is in there and return it, else return -1
if(threadsTable.Contains(Thread.CurrentThread.GetHashCode()))
return (int)threadsTable[Thread.CurrentThread.GetHashCode()];
else
return -1;
}
public override void SetSettingsID(int settingsID)
{
Hashtable threadsTable = GetThreadsTable();
// Remove it if it already exists
if(threadsTable.Contains(Thread.CurrentThread.GetHashCode()))
threadsTable.Remove(Thread.CurrentThread.GetHashCode());
// Only add if it is greater than 0 (easy way to remove entries like when a thread is closing)
if(settingsID > 0)
threadsTable.Add( Thread.CurrentThread.GetHashCode(), settingsID );
}
public override SiteSettings GetSiteSettings()
{
return GetSiteSettingsTable()[ GetSettingsID() ] as SiteSettings;
}
private Hashtable GetThreadsTable()
{
Hashtable threadsTable = CSCache.Get(cacheKey) as Hashtable;
if(threadsTable == null)
{
threadsTable = Hashtable.Synchronized( new Hashtable() );
CSCache.Max( cacheKey, threadsTable );
}
return threadsTable;
}
private Hashtable GetSiteSettingsTable()
{
Hashtable siteSettingsTable = CSCache.Get(cacheKey + "-Sites") as Hashtable;
if(siteSettingsTable == null)
{
siteSettingsTable = Hashtable.Synchronized( new Hashtable() );
// Since we can't lookup the sitesettings by the settingsID, and there is no method
// to get the appName from the settingsID, we'll cache all of them. Might want to
// improve this in the future
ArrayList siteSettings = CommonDataProvider.Instance().LoadAllSiteSettings();
foreach(SiteSettings site in siteSettings)
if(!siteSettingsTable.Contains(site.SettingsID))
siteSettingsTable.Add(site.SettingsID, site);
CSCache.Insert( cacheKey + "-Sites", siteSettingsTable, CSCache.HourFactor );
}
return siteSettingsTable;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -