这是一个有点奇怪,但我想检查是否已连接到我的数据库已打开或没有?我如何检查?如果打开,我希望能够直接使用它,而无需通过所有语句:使用已经打开的数据库连接
sqlconnection conn = new sqlconnection("string ...");
可以这样做吗?我也知道连接字符串和连接名称。我想检查这个连接是否可用,然后继续。
这是一个有点奇怪,但我想检查是否已连接到我的数据库已打开或没有?我如何检查?如果打开,我希望能够直接使用它,而无需通过所有语句:使用已经打开的数据库连接
sqlconnection conn = new sqlconnection("string ...");
可以这样做吗?我也知道连接字符串和连接名称。我想检查这个连接是否可用,然后继续。
如果你知道在连接字符串,然后获取一个新的可用SQL连接的最简单的方法是创建SqlConnection类的新实例:
using (SqlConnection conn = new SqlConnection("MyConnectionString"))
{
conn.Open();
// Use the connection
}
.NET框架使用连接池和因此没有必要担心开口效率&多个连接 - 在上面的代码将是重新使用可用的现有的连接,或者根据需要创建一个新的。
如果你想自己节省一些打字,那么你可能会发现它很有用自己创建一个小的辅助方法或属性:
class SqlHelper
{
public static SqlConnection GetConn()
{
SqlConnection returnValue = new SqlConnection("MyConnectionString");
returnValue.Open();
return returnValue;
}
}
用法:
using (SqlConnection conn = SqlHelper.GetConn())
{
// Use the connection
}
你看着为SqlConnection的文件?
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.aspx
我相信,“国家”属性会告诉你想要的东西。
如果要问,而更普遍了如何使用从连接池中现有的连接,这将时自动创建一个相同的连接字符串作为有效连接的新的SqlConnection来完成。
如果你只是想避免编写冗余代码,然后把它放在一个类和重用。
虽然你可能只使用SQL Server可能是很好的做法,以熟悉,因为所有数据提供者实现他们System.Data
所有的核心接口。我相信State
财产上IDbConnection
返回你所要求的(IDbConnection)
你也可能想要隐藏某种集中的方法是逻辑的信息:
public static IDbConnection RetrieveConnection(){
if(DataAccess.Connection.State == ConnectionState.Open) return DataAccess.Connection;
conn.Dispose(); //to be clean, I believe this is safe if it's already disposed
//retrieve configured connection string
//create and open connection
return DataAccess.Connection;
}
所以也许DataAccess
是一些地方,你可以放置和检索你的连接对象,但我会避免让每个人都直接使用它。而是让他们通过可以确保连接可用的方法。我只是想给你提供一些想法。你
可能还需要采取这一步,使用类似的NHibernate将管理你的连接和所有的东西。尽管如果项目很小,这并不总是值得的。
编辑:取得的代码更明确的
的Façade
设计模式应该帮助你在这里。这是一个例子。
一个“智能”门面知道什么方法需要连接到哪里,等等。门面打开连接,并将其传递给底层代码,通常包含在工厂类或类似的东西。
public class DoSomethingFacade {
private static readonly DoSomethingFactory _doSomethingFactory = new DoSomethingFactory();
public static IList<T> GetList<T>() {
using(IDbConnection connection = OpenConnection("string..."))
return _doSomethingFactory.GetList<T>(connection);
}
public static IDbConnection OpenConnection(string connectionString) {
IDbConnection openedConnection = new SqlConnection(connectionString);
openedConnection.Open();
return openedConnection;
}
}
internal class DoSomethingFactory {
internal DoSomethingFactory() { }
internal IList<T> GetList<T>(IDbConnection connection) {
IList<T> results = new List<T>();
// use connection here without caring about it,
// as it should be provided as an opened available connection.
return results;
}
}
谢谢Kragen。我担心打开已经打开的连接。我不知道.NET的'重用'属性。 – zack 2010-10-22 15:33:42
非常有用的答案,我没有什么是连接池,并打算创建一个机制自己! – Jack 2015-08-24 19:03:38