Рекомендации по подключению нескольких экземпляров SQL .NET к SQL Server - PullRequest
1 голос
/ 03 января 2011

Буду признателен за несколько советов о лучшем методе управления несколькими соединениями SQL .net (VB)

Мое приложение подключается к четырем экземплярам SQL Server (2000, 2005, 2008, 2008R2) для восстановления баз данных, изменения данных и создания резервных копий.

В дополнение к управлению базами данных приложение также имеет свою собственную БД (в экземпляре 2008 года) для хранения различных данных.

Я использую два метода для подключения к экземплярам: SMO (для резервного копирования, восстановления и получения информации о базах данных, размере и т. Д.) И SqlClient для запроса каждой базы данных для многих задач, таких как обновление полей и выполнение сценариев sql.I у меня есть несколько форм для выполнения различных задач, поэтому есть много мест, где я открываю \ закрываю соединения.

Будет ли лучше поддерживать постоянное глобальное соединение с каждым экземпляром из приложения? (Всего два, один для SMO, а другой для SqlClient) или открывать закрывать соединение для каждой задачи, которую я выполняю?) Я не использую LINK, поскольку мне нужно, чтобы задачи были максимально быстрыми.

Строка подключения будет отличаться для каждого подключения (в зависимости от того, к какому экземпляру и базе данных подключено), как бы я справился с этим? Строка в файле конфигурации для базы данных приложений будет иметь смысл, поскольку она будет статической, но работа с базами данных будет варьироваться в зависимости от каждого соединения.

В настоящее время я создаю соединение для каждого экземпляра в основной форме:

Dim 2000Connection = New SqlConnection("Data Source=" & SQLServerName & _
"\SQL2000;Initial Catalog=Master;User ID=sa;Password=P@ssw0rd;Pooling=True;")

Dim 2005Connection = New SqlConnection("Data Source=" & SQLServerName & _
"\SQL2005;Initial Catalog=Master;User ID=sa;Password=P@ssw0rd;Pooling=True;")

Dim 2008Connection = New SqlConnection("Data Source=" & SQLServerName & _
"\SQL2008;Initial Catalog=Master;User ID=sa;Password=P@ssw0rd;Pooling=True;")

и т.д.

Затем, используя «USE [» & DatabaseName & »] ...», перейдите в нужную базу данных и сохраните ее, создав новую строку подключения.

Я использую этот класс для подключения:

Public Class ClassDatabaseConnection
Private Shared connection As SqlClient.SqlConnection

Public Shared ReadOnly Property Instance As SqlClient.SqlConnection
    Get
        If connection Is Nothing Then
            connection = New SqlConnection("Static Connection String;")
        End If
        Return connection
    End Get
End Property

Public Shared Customconnection As SqlClient.SqlConnection
Public Shared Property CustomInstance(Optional ByVal Server As String = "", Optional ByVal Database As String = "Master") As SqlClient.SqlConnection
    Get
        If Customconnection Is Nothing Then
            Customconnection = New SqlConnection("Data Source=" & Server & ";User ID=sa;Password=P@ssw0rd;")
        End If
        Return Customconnection
    End Get
    Set(ByVal value As SqlClient.SqlConnection)
    End Set
End Property
End Class

1 Ответ

2 голосов
/ 03 января 2011

Моя рекомендация будет следующей:

  1. Настройте каждую из строк подключения в файле конфигурации приложения, но без указания конкретной базы данных.
  2. Создание и открытие / закрытиепо мере необходимости, пул соединений позволяет повторно использовать соединения, когда это возможно

Этот способ имеет несколько ключевых преимуществ.

  1. Обслуживание и обновлениесоединения, если вам нужно
  2. . Вы используете пул соединений и базовую систему для управления соединениями и сосредоточены на открытии / закрытии соединения по мере необходимости, чтобы предотвратить утечку ресурсов и / или код, который трудно отладить

Затем вы можете продолжать использовать различные операторы SQL для переключения между отдельными базами данных, которые используются с вашими операторами SQL.

...