Это интересно (для меня в любом случае), и я хотел бы посмотреть, есть ли у кого-нибудь хороший ответ и объяснение этому поведению.
Скажем, у вас есть одноэлементный объект базы данных (или статический объект базы данных), и он хранится в классе Foo.
public class Foo
{
public static SqlConnection DBConn = new SqlConnection(ConfigurationManager.ConnectionStrings["BAR"].ConnectionString);
}
Итак, давайте представим, что вы осведомлены о полезности вызова и избавления от своего соединения (представьте для этого примера, что это одноразовое использование в целях иллюстрации). Поэтому вы решаете использовать блок «using», чтобы позаботиться о вызове Dispose ().
using (SqlConnection conn = Foo.DBConn)
{
conn.Open();
using (SqlCommand cmd = new SqlCommand())
{
cmd.Connection = conn;
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.CommandText = "SP_YOUR_PROC";
cmd.ExecuteNonQuery();
}
conn.Close();
}
Это завершается ошибкой, вызывая исключение при вызове для открытия соединения, заявляя, что «свойство ConnectionString не инициализировано». Это не проблема с извлечением строки подключения из app.config / web.config. Когда вы исследуете в сеансе отладки, вы видите, что Foo.DBConn не является нулевым, но содержит пустые свойства.
Почему это?