【发布时间】:2014-04-04 14:56:28
【问题描述】:
我看到许多开发人员为数据库连接创建了单例类。我只想知道当应用程序将被许多用户使用时是好是坏。如果不好,请讨论上述模式可能发生的所有不良情况。
public class ConnSingleton
{
private static ConnSingleton dbInstance;
private readonly SqlConnection conn = new SqlConnection(@"Data Source=127.0.0.1;database=soa;User id=sa1;Password=sa1;");
private ConnSingleton()
{
}
public static ConnSingleton getDbInstance()
{
if (dbInstance == null)
{
dbInstance = new ConnSingleton();
}
return dbInstance;
}
public SqlConnection GetDBConnection()
{
try
{
conn.Open();
Console.WriteLine("Connected");
}
catch (SqlException e)
{
Console.WriteLine("Not connected : "+e.ToString());
Console.ReadLine();
}
finally
{
Console.WriteLine("End..");
// Console.WriteLine("Not connected : " + e.ToString());
Console.ReadLine();
}
Console.ReadLine();
return con;
}
}
public static void Main(string[] args)
{
ConnSingleton cs = ConnSingleton.getDbInstance();
cs.GetDBConnection();
Console.WriteLine("Connection established");
}
【问题讨论】:
-
真的没有必要坚持一个连接对象。它应该始终包裹在 using 中并在之后处理。 .NET 还缓存连接,因此也没有理由保持打开状态。我会更倾向于实例化并返回一个新的 SqlConnection 的静态方法。
-
我很想知道,当我们使用内置连接池时,谁来创建和维护连接池。它是由 OS 或 sql server 还是 dotnet runtime 管理的?