Здравствуйте. Я хотел бы обсудить одну проблему, которая возникает при написании клиентского приложения с ADO.NET. Я думаю, что большинство, кто начинал писать приложения с использованием данной технологии сталкивался с этой проблемой. В клиентском приложении, которое подключено к БД и получает от туда данные, практически в каждом окне эти данные и отображаются. А значит необходимо постоянно указывать необходимый Connection для получения данных. Поэтому по логике, такой Connection должен быть где-то объявлен глобально. Но .NET не даёт возможности создавать глобальные переменные в рамках всего приложения. Можно если только положть это в класс настроек:
namespace AppClient.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "8.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.SpecialSettingAttribute(global::System.Configuration.SpecialSetting.ConnectionString)]
[global::System.Configuration.DefaultSettingValueAttribute("Data Source=SERVER-SQL\\SQLSERVER_PIK;Initial Catalog=PIK_Rieltor;Integrated Secur" +
"ity=True")]
public string PIK_RieltorConnectionString {
get {
return ((string)(this["PIK_RieltorConnectionString"]));
}
}
public global::System.Data.SqlClient.SqlConnection Connection;
}
}
Но тут есть момент моего непонимания: ведь все эти настройки являются членами класса, посути указатель на объект которого значит где-то должен быть объявлен глобально. Но если посмотреть автоматически сгенерированные участки кода, то можно увидеть, что члены этого класса вызываются не из экземпляра класса, а прямо из него. Но как это? А может Connection лучше хранить не здесь, то где?
Или может я вообще неправильно к этому подхожу?