我有一個單例(因爲我認爲這將是有用的,讓這些可用的所有時間)來表示一些設置,這將清除舊的並在數據庫中加載新的設置在clr過程調用的開始。是否同時運行同一過程的多個SQL/CLR調用(如線程)?
但是,如果CLR調用像線程一樣處理,我可能會在某些時候出現問題,即在我想訪問它們的那一刻,設置被清除。
所以這會是一個問題嗎?我能用簡單的對象鎖解決這個問題嗎?
編輯:
代碼示例設置:
public class Settings
{
public static Settings Default
{
get { return _default ?? (_default = new Settings()); }
}
private static Settings _default;
private Dictionary<string, string> _settingsDict;
private Settings()
{
_settingsDict = new Dictionary<string, string>();
}
public void ReloadSettings()
{
_settingsDict.Clear();
using (var connection = new SqlConnection("context connetion=true"))
using (var command = connection.CreateCommand())
{
command.CommandText = ...
connection.Open();
// Read Settings with DataReader into _settingsDict
}
}
public string Get(string key) {
get { return _settingsDict["key"] }
}
}
步驟:
[SqlProcedure]
public static void InsertData(SqlString csv)
{
Settings.Default.ReloadSettings();
var setting = Settings.Default.Get("SETTING");
using (var connection = new SqlConnection("context connetion=true"))
using (var command = connection.CreateCommand())
{
...
}
}
你能展示你的代碼嗎? – st4hoo
如果在您正在專門討論SQL/CLR的問題中明確說明是非常明智的。目前這隻隱藏在標籤中。 –
我用代碼示例和更好的標題更新了問題 – Staeff