TSQL + C #: динамическое изменение используемой базы данных - PullRequest
3 голосов
/ 15 сентября 2011

Я наткнулся на проблему и не могу придумать хороший, БЕЗОПАСНЫЙ способ ее решения.У меня есть класс-оболочка для класса "Sql.Helper" (Microsoft.ApplicationBlocks.Data), и я везде использую параметры.

Я пытаюсь изменить текущую базу данных, используемую для C #

USE @DBName

Этот код не может быть параметризован, и поэтому везде, где я читаю, предлагается запускать его как динамический SQL (дрожь), как, например,

DECLARE @SQL_SCRIPT NVARCHAR(100); 
SET @SQL_SCRIPT = REPLACE('USE {DBName};', '{DBName}', @DBName); 
exec sp_executesql @SQL_SCRIPT;

Однако за пределами этого sp_executesql БД остается неизменной.Затем я подумал добавить это в начало всех вызовов SQL, однако это не поможет.

При запуске профилировщик сообщает мне, что код наконец-то запускается как:

exec sp_executesql N'DECLARE @SQL_SCRIPT NVARCHAR(100); SET @SQL_SCRIPT = REPLACE(''USE {DBName};'', ''{DBName}'', @DBName); exec sp_executesql @SQL_SCRIPT;',N'@DBName nvarchar(100)',@DBName=N'MyDatabaseName'

он содержится в еще одном exec sp_executesql по умолчанию: (

В настоящее время, и я знаю, что это не лучший метод, но я делаю следующее в начале каждого вызова.

commandText = "USE " + this._currentDB + ";" + commandText;

Кто-нибудь знает правильный способ выбора БД для этого решения?

ps this._currentDB - экранированный SQL (насколько я могу)

Ответы [ 4 ]

3 голосов
/ 15 сентября 2011

Вы можете изменить базу данных в вашем соединении с помощью свойства SqlConnection.Database .

РЕДАКТИРОВАТЬ: Вы должны использовать метод SqlConnection.ChangeDatabase.

1 голос
/ 15 сентября 2011

Да, правильный способ изменения БД - изменение строки подключения.

Вы можете получить строку подключения из вашего App.config и заменить имя базы данных программно.

string connString = ConfigurationManager.ConnectionStrings["YourKey"].ConnectionString;

Теперь замените имя базы данных на новое, прежде чем создавать новый экземпляр DBConnection.

1 голос
/ 15 сентября 2011

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

0 голосов
/ 15 сентября 2011

Как точно он должен быть динамичным?

Если у вас нет неизвестного количества баз данных с неизвестными именами, почему бы просто не создать ConnectionString для каждой из них, а затем выбрать правильную на основе Enum, регистра переключателя, If-Else или аналогичного.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...