【问题标题】:inconsistent behavior of static member静态成员的不一致行为
【发布时间】:2016-01-08 13:53:11
【问题描述】:

我在一个解决方案中有两个项目。一个 C# 类库项目封装了逻辑和一个用于查看的 asp.net 网站。 逻辑如下:

public static class LoginHandler
{
   private static string _connectionString = Data Source=.;Initial Catalog=ASP;Integrated Security=True"
   private static SqlConnection Connection;
   static LoginHandler()
    {
        Connection = new SqlConnection(ConnectionString);
    }
     public static User StudentLogin(string username, string password)
    {
        using (Connection)
        {
         .........
        }
    }
}

一切顺利,直到我第二次调用 StudentLogin 方法。

我得到一个 InvalidOperationException 说 Connection 的 ConnectionString 属性未初始化。 (ConnectionString 是 "" 通过监视窗口)

我的问题是,由于静态成员只被初始化一次(在这种情况下,在静态构造函数中),ConnectionString 属性如何改变?

或者,调用 IDisposible.Dispose() 的 using 语句是否有罪?

【问题讨论】:

  • 到底为什么需要LoginHandler?在您的方法中定义您的 SqlConnection 并用作 using(var con = new SqlConnection(ConnectionString))

标签: c# asp.net static


【解决方案1】:

或者,调用IDisposible.Dispose()的using语句是否有罪?

是的。每次调用 StudentLogin 方法时,您都应该创建一个新连接。您甚至不需要静态字段来保留对它的引用。

public static User StudentLogin(string username, string password)
{
    using (var connection = new SqlConnection(ConnectionString))
    {

    }
}

【讨论】:

  • 谢谢。顺便说一句,仅在关闭网站时关闭的连接是否会比每次调用该方法时创建一个新连接并在该方法完成时关闭它的性能更好?
  • @Hohenheim Sql 连接是池化的,打开和关闭它们非常便宜。您可以在msdn.microsoft.com/en-us/library/8xx3tyca(v=vs.110).aspx 上阅读更多内容
猜你喜欢
  • 2015-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-21
  • 1970-01-01
  • 2016-12-16
  • 2012-07-28
  • 1970-01-01
相关资源
最近更新 更多