public class db
{
public static string connectionString =
WebConfigurationManager.ConnectionStrings["connectString"].ConnectionString;
public static SqlConnection OpenConnection()
{
SqlConnection connection = new SqlConnection(connectionString);
connection.Open();
return connection;
}
}
我看到这样的代码,它尖叫着错!它适用于ASP.NET(2.0)。我明白这是错的。
对于一个你不应该打开SqlConnection并返回它,两个为什么你要进行静态SqlConnection?如果有多个人同时尝试使用它,这不会产生问题吗?
答案 0 :(得分:12)
什么是static是 OpenConnection()返回连接的Method。然而,每次都会返回一个新连接(假设调用者将在适当的时候负责处理此连接对象)。
换句话说,显示的db类根本不是单例。混淆可能是因为一个人不需要实例化db的实例以便使用它的OpenConnection()方法(因为它是静态的),而其余的代码可能包含多个片段,如
myConn = db.OpenConnection();
-- then do something with myConn
答案 1 :(得分:3)
我不是100%确定问题是什么,而是回答这个问题
不,没有问题,因为每次调用OpenConnection()都会构造一个新的SqlConnection实例。这并不意味着代码不是出于其他原因的垃圾。我至少希望调用这个方法看起来像这样:如果多重则不会产生问题 人们正在尝试同时使用它 时间?
using(var conn = db.OpenConnection())
{
// stuff
}
答案 2 :(得分:0)
你不能只说“出错的尖叫”,然后错误地应用“单身人士”这个词。为什么单个静态连接是一种糟糕的方法?它不会每次都重新创建它,然后您的整个应用程序可以共享连接。你是否需要为每个frigg'n sql调用创建,打开和关闭,这些都是愚蠢的尖叫。无论哪种方式,ADO都应该管理这个。
答案 3 :(得分:0)
连接对象必须限定为执行事务的方法。 在线程之间共享相同的连接对象将破坏连接池。 请参阅this question on SQLDataReader.GetOrdinal() fails rarely with IndexOutOfRange。