Asp.net 如何使数据库连接跨webforms持久化
我正在使用带有登录对话框的ASP.NET webforms编写一个应用程序。成功身份验证后,连接将打开,但连接对象在其他webforms中不可见。是否有任何方法可以使其持久化和可访问(在某些服务器会话对象中),或者通常采用另一种方法?任何提示都非常感谢。最好的方法是打开/关闭您想要使用它的连接。不要共享它,也不要在ASP.NET(多线程环境)中使用静态连接。您应该对实现Asp.net 如何使数据库连接跨webforms持久化,asp.net,Asp.net,我正在使用带有登录对话框的ASP.NET webforms编写一个应用程序。成功身份验证后,连接将打开,但连接对象在其他webforms中不可见。是否有任何方法可以使其持久化和可访问(在某些服务器会话对象中),或者通常采用另一种方法?任何提示都非常感谢。最好的方法是打开/关闭您想要使用它的连接。不要共享它,也不要在ASP.NET(多线程环境)中使用静态连接。您应该对实现IDisposable的所有对象使用using语句,以确保释放所有非托管资源。这也将关闭连接,即使出现错误: using(var
IDisposable
的所有对象使用using
语句,以确保释放所有非托管资源。这也将关闭连接,即使出现错误:
using(var con = new SqlConnection("connection string here"))
{
// do something ...
}
您不必担心每次都必须打开/关闭物理连接。警察会帮你处理的 最好的方法是打开/关闭要使用的连接。不要共享它,也不要在ASP.NET(多线程环境)中使用静态连接。您应该对实现
IDisposable
的所有对象使用using
语句,以确保释放所有非托管资源。这也将关闭连接,即使出现错误:
using(var con = new SqlConnection("connection string here"))
{
// do something ...
}
您不必担心每次都必须打开/关闭物理连接。警察会帮你处理的 一个简单的例子
设置一个类来处理SqlConnection对象(或您正在使用的任何DB):
DbConnectionProvider.cs
using System.Data.SqlClient
public class DbConnectionProvider
{
public static SqlConnection GetDbConnection()
{
return new SqlConnection("MyConnectionString");
}
}
using System.Data.SqlClient
public class ApplicationClass
{
private void GetSomeDbWorkDone()
{
using(SqlConnection Conn = DbConnectionProvider.GetDbConnection())
{
//Do some fancy database operations here
}
}
}
然后从所有需要使用数据库的类中
ApplicationClass.cs
using System.Data.SqlClient
public class DbConnectionProvider
{
public static SqlConnection GetDbConnection()
{
return new SqlConnection("MyConnectionString");
}
}
using System.Data.SqlClient
public class ApplicationClass
{
private void GetSomeDbWorkDone()
{
using(SqlConnection Conn = DbConnectionProvider.GetDbConnection())
{
//Do some fancy database operations here
}
}
}
这样,如果您需要更改连接详细信息或对SqlConnection对象执行其他操作,则只需执行一次,而不需要在代码中的任何地方执行。一个简单的示例
设置一个类来处理SqlConnection对象(或您正在使用的任何DB):
DbConnectionProvider.cs
using System.Data.SqlClient
public class DbConnectionProvider
{
public static SqlConnection GetDbConnection()
{
return new SqlConnection("MyConnectionString");
}
}
using System.Data.SqlClient
public class ApplicationClass
{
private void GetSomeDbWorkDone()
{
using(SqlConnection Conn = DbConnectionProvider.GetDbConnection())
{
//Do some fancy database operations here
}
}
}
然后从所有需要使用数据库的类中
ApplicationClass.cs
using System.Data.SqlClient
public class DbConnectionProvider
{
public static SqlConnection GetDbConnection()
{
return new SqlConnection("MyConnectionString");
}
}
using System.Data.SqlClient
public class ApplicationClass
{
private void GetSomeDbWorkDone()
{
using(SqlConnection Conn = DbConnectionProvider.GetDbConnection())
{
//Do some fancy database operations here
}
}
}
这样,如果您需要更改连接详细信息或对SqlConnection对象执行其他操作,只需执行一次,而不是在代码中的任何地方执行。数据库连接不应保持打开状态,除非它实际执行任何操作。即,当您登录时,您打开一个连接以检查用户凭据,然后再次关闭它。执行此操作的一种常见方法是调用一个数据访问层来执行DB操作,否则我建议您设置一些静态函数,将连接对象返回给调用方法,并从该方法打开/关闭DB。数据库连接不应保持打开状态,除非它实际执行任何操作。即,当您登录时,您打开一个连接以检查用户凭据,然后再次关闭它。一种常见的方法是使用一个您调用的数据访问层来执行DB操作,否则我建议您设置一些静态函数,将连接对象返回给调用方法,并从该方法打开/关闭DB。该类的好处是什么?在我看来,它只是引入了一个不需要的层。如果有人认为将连接设为静态是明智的,那么这是一个不好的改进来源。@TimSchmelter“该类的好处是什么?”关注点分离。一个提供者类负责连接到数据库,因此其他每个使用者类都可以负责使用数据库。让它成为一个接口,返回
IDbConnection
,突然间你可以将它换成任何类型的数据库连接,消费者类甚至不需要知道或关心。这个类的好处是什么?在我看来,它只是引入了一个不需要的层。如果有人认为将连接设为静态是明智的,那么这是一个不好的改进来源。@TimSchmelter“该类的好处是什么?”关注点分离。一个提供者类负责连接到数据库,因此其他每个使用者类都可以负责使用数据库。让它成为一个接口,返回IDbConnection
,突然之间,您可以将它换成任何类型的数据库连接,而使用者类甚至不需要知道或关心。