C# 如何在asp.net c中全局定义Sqlconnection#

C# 如何在asp.net c中全局定义Sqlconnection#,c#,asp.net,C#,Asp.net,我在web.config中定义了如下connectionstring <add name="connect" connectionString="Initial Catalog=MyDatabase;User ID=sa;Password=mypassword" /> SqlConnection cn = new SqlConnection(System.Web.Configuration.WebConfigurationManager.ConnectionStrings["con

我在web.config中定义了如下connectionstring

<add name="connect" connectionString="Initial Catalog=MyDatabase;User ID=sa;Password=mypassword" />
SqlConnection cn = new SqlConnection(System.Web.Configuration.WebConfigurationManager.ConnectionStrings["connect"].ConnectionString);
SqlConnection con=ConnectionHandler.ConnectionObj; 
我不想在每个页面中创建SqlConnection。有没有办法只创建一次sqlconnection并在每个页面中使用它?

有两种方法:

1) 创建包含创建连接代码的BasePage类。。。如果您需要为每个用户/会话实例建立不同的连接,这将最有效

2) 使用initialize方法创建一个静态类,并将其调用到应用程序启动时创建和初始化的连接

下面是一个应用程序启动的静态类示例

public static class Connections
{
     public static SqlConnection Connection {get; set;}
     public static Init()
     {
         //INIT YOUR CONNECTION PROPERTY HERE
         //Connection = new SqlConnection(....);
     }

}
在GLOBAL.ASAX中

void Application_Start(object sender, EventArgs e)
{
    // Code that runs on application startup
    Connections.Init();
}
然后,在任何ASP.Net后端代码中,您都可以直接引用/访问它

Connections.Connection

这在web应用程序的整个生命周期内都有效(从开始到结束)

是的,您可以将其存储在
应用程序
字典中,作为
应用程序[“连接”]=cn

private static void Main(string[] args)
    {

        Services.Container.AddService(typeof(DbConnectionHandler),new DbConnectionHandler("connectionstring"));
        Services.Container.AddService(typeof(MyClass), new MyClass((DbConnectionHandler)Services.Container.GetService(typeof(DbConnectionHandler))));

        var myclass = (MyClass)Services.Container.GetService(typeof (MyClass));
        Console.WriteLine($"servicecontainertest {myclass.Testshit()}");

        Console.ReadLine();
    }

    public static class Services
    {
        public static ServiceContainer Container { get; set; }
        static Services()
        {
            Container = new ServiceContainer();
        }
    }

    class MyClass
    {
        private DbConnectionHandler _dbHandler { get; set; }
        public MyClass(DbConnectionHandler dbhandler)
        {
            _dbHandler = dbhandler;
        }

        public string Testshit()
        {
            return _dbHandler.Connection.ConnectionString;
        }
    }
    class DbConnectionHandler
    {
        public SqlConnection Connection { get; set; }
        public DbConnectionHandler(string connection)
        {
            Connection = new SqlConnection(connection);
        }
    }

正如您在我的示例中所看到的,我创建了一个包含Servicecontainer的全局服务类,然后将Dbconnection添加到其中,我可以在任何地方使用Services.Container.GetService()访问它。

您可以通过

public class ConnectionHandler
{
    static SqlConnection con=null;
    public static SqlConnection ConnectionObj 
    {
        get
        {
         if(con==null)
             con=new SqlConnection("your connection string");
        return con;
     }
}
在后一种情况下,您可以像这样使用此连接对象

<add name="connect" connectionString="Initial Catalog=MyDatabase;User ID=sa;Password=mypassword" />
SqlConnection cn = new SqlConnection(System.Web.Configuration.WebConfigurationManager.ConnectionStrings["connect"].ConnectionString);
SqlConnection con=ConnectionHandler.ConnectionObj; 

您可能希望为每个需要连接的页面创建一个基类,并将创建连接放置在基类中以避免重复。这可能不是一个好主意。HI@MaxOvrdrv感谢您的回复。你能提供一些示例代码或参考吗?嗨@MaxOvrdrv请告诉我应该在哪里定义这个“公共静态类连接”?这是一个类。。。只需在项目中创建一个新类,并将声明更改为静态。这是一个单独的文件…谢谢。很好用。但我还有一件事要问。我想向Init函数传递一个参数,因为我想创建这样的动态连接。public static void Init(字符串名称){Connection=new SqlConnection(System.Web.Configuration.WebConfigurationManager.ConnectionString[Name].ConnectionString);}但当我尝试这样做时,它不起作用,因为Init函数在应用程序启动时调用,它不允许我定义任何要传递的变量。只需使用参数创建
Init()
方法,并在您想要更改连接时调用它。因为它名为Init,并不意味着您以后不能从其他地方再次调用它;)嗨,安德烈·伊申科。您能提供任何示例代码或参考吗?假设您有您在问题中定义的
SqlConnection
,保存:
Application[“Connection”]=cn
;正在检索:
SqlConnection sc=Application[“Connection”]作为SqlConnection