Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 如何使数据库连接跨webforms持久化_Asp.net - Fatal编程技术网

Asp.net 如何使数据库连接跨webforms持久化

Asp.net 如何使数据库连接跨webforms持久化,asp.net,Asp.net,我正在使用带有登录对话框的ASP.NET webforms编写一个应用程序。成功身份验证后,连接将打开,但连接对象在其他webforms中不可见。是否有任何方法可以使其持久化和可访问(在某些服务器会话对象中),或者通常采用另一种方法?任何提示都非常感谢。最好的方法是打开/关闭您想要使用它的连接。不要共享它,也不要在ASP.NET(多线程环境)中使用静态连接。您应该对实现IDisposable的所有对象使用using语句,以确保释放所有非托管资源。这也将关闭连接,即使出现错误: using(var

我正在使用带有登录对话框的ASP.NET webforms编写一个应用程序。成功身份验证后,连接将打开,但连接对象在其他webforms中不可见。是否有任何方法可以使其持久化和可访问(在某些服务器会话对象中),或者通常采用另一种方法?任何提示都非常感谢。

最好的方法是打开/关闭您想要使用它的连接。不要共享它,也不要在ASP.NET(多线程环境)中使用静态连接。您应该对实现
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
,突然之间,您可以将它换成任何类型的数据库连接,而使用者类甚至不需要知道或关心。