Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.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
C# 在多个函数中共享单个SQL连接(不公开)_C#_Sql Server - Fatal编程技术网

C# 在多个函数中共享单个SQL连接(不公开)

C# 在多个函数中共享单个SQL连接(不公开),c#,sql-server,C#,Sql Server,我有一个调用方法的函数,每个方法分别执行SQL连接任务 protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { ContentPlaceHolder ph = (ContentPlaceHolder)this.Master.FindControl("MainContent"); SearchOrderID(true,

我有一个调用方法的函数,每个方法分别执行SQL连接任务

protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack) 
        {
            ContentPlaceHolder ph = (ContentPlaceHolder)this.Master.FindControl("MainContent");
            SearchOrderID(true, 2, 3, 4, 8);  
            SearchOrderID(false, 2, 3, 4, 9);   
        }
    }
private void SearchOrderID(bool type,int Branch1ID, int Branch2ID, int Branch3ID, int DepartmentID)
    {
        using (SqlConnection cnn = new SqlConnection(Properties.Settings.Default.connString1))
        {
            cnn.Open();
            ------code
            using (SqlCommand cmd = new SqlCommand(findOrderID, cnn))
            {
                ------cod
            }
        }     
是否可以使用在特定函数之间共享的单个SQL连接,而不使其成为公共字符串(由所有函数共享)

理想情况下,我想要这样的东西

protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack) 
        {
          using (SqlConnection cnn = new SqlConnection(Properties.Settings.Default.connString1))
          {
            cnn.Open();
            ContentPlaceHolder ph = (ContentPlaceHolder)this.Master.FindControl("MainContent");
            SearchOrderID(true, 2, 3, 4, 8);  
            SearchOrderID(false, 2, 3, 4, 9);   
          }
        }
    }
private void SearchOrderID(bool type,int Branch1ID, int Branch2ID, int Branch3ID, int DepartmentID)
    {
            using (SqlCommand cmd = new SqlCommand(findOrderID, cnn))
            {
                ------cod
            }
        }
我的主要目标是提高性能,所以首先要做的就是消除不必要的任务。共享一个SQL连接在理论上比多个SQL连接更快,对吗


谢谢您的时间。

也许您可以创建一个函数,将您的连接存储在一个静态变量中。大概是这样的:

private SqlConnection ManageSQLConnection(bool disconnect=false)
{
静态SqlConnection conn=null;
如果(conn==null)
{
//初始化你的连接
}
如果(断开)
{
//处理连接
}
返回连接;
}
私有void SearchOrderID()
{
var conn=ManageSQLConnection();
//在这里插入逻辑
}

在处理类时,不要忘记处理连接。

当然,您可以将参数
SqlConnection cnn
添加到方法
SearchOrderID
——您所说的“不公开”是什么意思?ADO.NET具有内置功能,因此您创建/共享的任何逻辑连接实际上都可以映射到相同的物理连接检查默认情况下,它的“Pooling”参数为true,并生成代码以重用具有相同连接字符串的连接。但如果我正确理解了描述,则只有在您处置或关闭连接时,连接才会返回到池中,因此几个同时打开的连接可能会以几个物理连接结束。我本人从未测试过它真的是一样的吗?——是的,没错