C# 如何在asp.net c中全局定义Sqlconnection#
我在web.config中定义了如下connectionstringC# 如何在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
<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