рдореИрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ C # рдХреЗ рд▓рд┐рдП рд╕рдХреНрд░рд┐рдп рд░рд┐рдХреЙрд░реНрдб рдЯреЗрдореНрдкрд▓реЗрдЯ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдРрд╕рд╛ рд╡рд░реНрдЧ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдирд┐рд╖реНрдХрд░реНрд╖рдг рдФрд░ рд▓реЗрдЦрди рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рд╡реНрдпрд╛рдкрд╛рд░рд┐рдХ рддрд░реНрдХ рдХреЛ рдЕрдореВрд░реНрддрддрд╛ рдХреЗ рдирд┐рдореНрди рд╕реНрддрд░реЛрдВ рддрдХ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдБ рд╡реНрдпрдХреНрддрд┐ рдирд┐рдпрдорд┐рдд рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рдЗрд╕ рддрд░рд╣ рдХреА рд╡рд╕реНрддреБ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдХреЗрдВрджреНрд░реАрдп рдорд╛рдорд▓рд╛, рдЬрд┐рд╕реЗ рдореИрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдиреВрдВрдЧрд╛, рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ
рджреЗрд╢ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЕрдХреНрд╕рд░ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдХрдо рд╣реА рдмрджрд▓рддрд╛ рд╣реИред
рд╡реНрдпрд╛рдкрд╛рд░ рддрд░реНрдХ рдХреЛрдб рдореЗрдВ рдПрдХ
рд╕рдХреНрд░рд┐рдп рд░рд┐рдХреЙрд░реНрдб рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
Country russia = Country.All[тАЬRussiaтАЭ];
рджреЗрд╢ рдореЗрдВ рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдирд┐рд░реНрдорд╛рддрд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдХреЗрд╡рд▓
рд╢рдмреНрджрдХреЛрд╢ <string, Country> All рд╡рд┐рдзрд┐ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрднрд╡ рд╣реИред
рдЕрдм рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдХрд┐ рдпрд╣ рд╡рд░реНрдЧ рдЕрдВрджрд░ рд╕реЗ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд░рд┐рдХреЙрд░реНрдб рдирд┐рд░реНрдорд╛рддрд╛
public readonly string name; private Country(IDataRecord record) { name = record.GetString(0); }
рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреА рдЧреЛрдкрдиреАрдпрддрд╛ рдХреЗ рдХрд╛рд░рдг, рд╣рдо рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рд╕рд╣реА рдЙрдкрдпреЛрдЧ рдХреА рдЖрд╢рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдХреЗрд╡рд▓ рдХрдХреНрд╖рд╛ рдХреЗ рдЕрдВрджрд░ред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣:
private static Dictionary<string, Country> _all = null; private static Dictionary<string, Country> LoadDictionary() { _all = new Dictionary<string, Country>(); IDataReader reader = DBWrapper.GetReader(sqlSelect); try { while (reader.Read()) { Country item = new Country(reader); _all.Add(item.name, item); } } finally { reader.Close(); } return _all; }
sqlSelect рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдлрд╝реАрд▓реНрдб рдСрд░реНрдбрд░ рдХреЗ рд╕рд╛рде рд╕рднреА рд░рд┐рдХреЙрд░реНрдб рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рдЬреА рд╕реНрдерд┐рд░рд╛рдВрдХ рд╣реИред
DBWrapper рдПрдХ рд╕реНрд╡-рд▓рд┐рдЦрд┐рдд рд╡рд░реНрдЧ рд╣реИ рдЬреЛ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЙрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЗрд╕ рд╕реНрддрд░ рдкрд░ рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдмрд┐рдирд╛, рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдЬреЛрдбрд╝реЗрдВ - рд╕рд╛рдорд╛рдиреНрдп рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдореЗрдВ рдПрдХ рдирдИ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдЬреЛрдбрд╝рдирд╛ рд▓реЗрдЦ рдореЗрдВ рдХреЛрдб рдХреА рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рдХреЗ рд▓рд┐рдП рдЫрд┐рдкрд╛ рд╣реБрдЖ рд╣реИред
рд╕рднреА рд╢рдмреНрджрдХреЛрд╢
рдпрд╣рд╛рдВ рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ:
public static Dictionary<string, Country> All { get { return _all ?? LoadDictionary(); }}
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реА рдХреЙрд▓ рдкрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рджреЗрд░реА рд╣реЛрддреА рд╣реИред
рдирд┐рдЬреА рдЪрд░
_all рдХреЗрд╡рд▓ рдЗрд╕ рдХреЛрдб рдХреЗ рдЯреБрдХрдбрд╝реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╕реА # рдкреВрд░реЗ рд╡рд░реНрдЧ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЖрд╡реЗрджрди рдХрд╛ рдЦрддрд░рд╛ рдмрдирд╛ рд░рд╣рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рддрд░реАрдХреЛрдВ рд╕реЗред рдХрдИ рдереНрд░реЗрдбреНрд╕ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдкрд░ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдорд╕реНрдпрд╛ рдмрди рдЬрд╛рдПрдЧреАред
рдпрд╣ рдкрд╣рд▓рд╛ рд╕рд╡рд╛рд▓ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдореИрдВ рдЪрд░реНрдЪрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ: _all рдЪрд░ рдХреА рджреГрд╢реНрдпрддрд╛ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдХреИрд╕реЗ рд╕реАрдорд┐рдд рдХрд░реЗрдВ?
рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди
рдпрд╣ рдЖрд╕реНрдердЧрд┐рдд рд▓реЛрдбрд┐рдВрдЧ рд╡рд┐рдзрд┐ рдЕрднреА рддрдХ рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ
рд▓реЛрдбрд╕реНрдЯреИрдЯрд╕ рд╡рд░реНрдЧ рдЬреЛрдбрд╝рд╛ред
private static readonly LoadStatus statusCountryList = new LoadStatus(тАЬcountryтАЭ);
рд╕рднреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреА рд╕реНрдерд┐рддрд┐ рд╕реВрдЪреА рдореЗрдВ рдЗрд╕реЗ рдкрд╣рдЪрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рддрд┐ рдХреЗ рдирд╛рдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЙрд╕ рдкрд░ рдФрд░ рдмрд╛рдж рдореЗрдВред
private static Dictionary<string, Country> _all = null; public static Dictionary<string, Country> All { get { if ( !statusCountryList.IsCompleted ) { lock (statusCountryList) { if ( !statusCountryList.IsCompleted ) { statusCountryList.Start(); _all = new Dictionary<string, Country>(); IDataReader reader= DBWrapper.GetReader(sqlSelect); try { while (reader.Read()) Add(new Country(reader)) statusCountryList.Finish(_all.Count); } catch Exception ex { statusCountryList.Error(ex); } finally { reader.Close(); } }}} return _all; }}
рдмрд╣реБрдд рд╕реЗ рдкрд╛рд╕реНрддрд╛, рд▓реЗрдХрд┐рди рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдФрд░ рд╣рдорд╛рд░реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреА рдПрдХ рд╕реНрд╡рд╛рд╕реНрдереНрдп рд░рд┐рдкреЛрд░реНрдЯ рд╣реИ, рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рд╕реЗ рдПрдХ рдмреЛрдирд╕ рдХреЗ рд░реВрдк рдореЗрдВред
рд▓реЛрдбрд╕реНрдЯреИрдЯрд╕ рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдбреЗрдЯрд╛ рдХреЗ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдФрд░ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдЫреБрдкрд╛рддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛,
рд▓реЛрдбрд╕реНрдЯреИрдЯрд╕ рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░рдиреЗ рд╕реЗ, рдордХреНрдЦреА рдкрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣ рдЗрд╕ рдЕрд╡рд╕рд░ рдХреЗ рд▓рд┐рдП рдерд╛ рдХрд┐ рдореИрдВрдиреЗ
_all рдХреЗ рд▓рд┐рдП
рдЖрд╕рд╛рдиреА рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ред
рдХрдХреНрд╖рд╛ рд╕рд╛рдорд╛рдиреНрдп
рд╕рдорд╛рдзрд╛рди рдЗрддрдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдирд┐рдХрд▓рд╛ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рд╕рднреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рджрд░реНрдЬрдиреЛрдВ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдФрд░ рдЗрд╕ рдХреЛрдб рдХреЛ рдПрдХ
рд╕рд╛рдорд╛рдиреНрдп рд╡рд░реНрдЧ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдмрд╣реБрдд рдЗрдЪреНрдЫрд╛ рд╣реИред
рд╣рд╛рд▓рд╛рдБрдХрд┐, C # рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред
рдЖрдк рдЗрд╕ рдирд┐рд░реНрдгрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВ?
рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреЛ
рдЬреЗрдиреЗрд░рд┐рдХ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рдХреНрдпрд╛ рддрд░реАрдХреЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ?