У меня есть 2 таблицы, имеющие точно те же столбцы. Но они хранятся в Database1 и Database2 (на том же сервере). Я могу передать имя базы данных как переменную? Например:
SELECT [SomeValue]
FROM [Database2].[dbo].[Klienci]
SELECT [SomeValue]
FROM [Database1].[dbo].[Klienci]
Есть ли способ передать целый [ОТ] как @variable через следующий код в C#:
SqlCommand sqlQuery = new SqlCommand(preparedCommand, varConnection);
sqlQuery.Prepare();
sqlQuery.Parameters.AddWithValue("@varDatabase", varDatabase);
Где @varDatabase содержал бы имя базы данных и/или имя таблицы т.е. [Database1]. [dbo]. [Klienci] в одном формате или другом.
Я говорю о C# 3.5 / MSSQL 2005/2008.
Почему бы вам не установить вашу базу данных, когда вы делаете соединение? Тогда код даже не меняется.
Похоже, вам необходимо установить имя базы данных и строку подключения, динамически, в зависимости от типа запроса. Даже если у вас есть, скажем, (просто например) 60 баз данных, вы можете подключиться, используя жесткие операторы, как никто никогда не рекомендуется, потому что
Файлы конфигурации обслуживают эту цель, наряду со многими другими, и думают о ваших коллегах на секунду, глядя на это « CustomConnectionStringsFile и царапая голову.
Лучший способ - сохранить их как ConnectionStrings, в вашем файле конфигурации и используйте один Вам нужно
что-то в качестве этого
Добавление строки подключения к Web.config
<connectionStrings>
<add
name="NorthwindConnectionString"
connectionString="Data Source=serverName;Initial
Catalog=Northwind;Persist Security Info=True;User
ID=userName;Password=password"
providerName="System.Data.SqlClient"
/>
<add
name="BestDBConnectionString"
connectionString="Data Source=serverName;Initial
Catalog= BestDB;Persist Security Info=True;User
ID=userName;Password=password"
providerName="System.Data.SqlClient"
/>
</connectionStrings>
Доступ к подключению
string myConnString ="";
if(ThisIsThat("A"))
{
myConnString =
rootWebConfig.ConnectionStrings.ConnectionStrings["NorthwindConnectionString"];
}
else if(ThisIsThat("B"))
{
myConnString =
rootWebConfig.ConnectionStrings.ConnectionStrings["BestDBConnectionString"]
}
{ else // Can go on}
для получения дополнительной информации на
Надеюсь, это поможет
NO, параметры T-SQL не могут ссылаться на объект (например, базу данных или таблицу), если ни по какой другой причине, чем ума.
Если только имя БД отличается, предложение динамически построения строки подключения является хорошим. Вы можете использовать класс SQLConnectionStringBuilder , чтобы сделать это менее подверженным ошибкам.
Вы также можете просто создать строку C # динамически, но будьте осторожны о том, чтобы открыть себя до атаки SQL впрыска.
В противном случае просто делайте заявление о если в вашем коде T-SQL:
IF (@dbName = 'Database1') BEGIN
SELECT SomeValue FROM [Database1].[dbo].[Klienci]
END ELSE BEGIN
SELECT SomeValue FROM [Database2].[dbo].[Klienci]
END
Вы могут , но я бы просто изменил соединение, чтобы указать в базу данных, которую вы хотите запросить.
Разъяснение:
Чтобы уточнить, вы могут сделать это с помощью динамического SQL. например Передача имя базы данных на SPROC, которое затем может создать полное утверждение и выполнить его. Конечно, неверно использовать переменную напрямую («Выбрать * из (скрытых) недействительно). Однако это не будет рекомендуемым подходом, отсюда, лучшее, что можно изменить соединение.
в этом случае несколько строк соединений - ваш друг!
Попробуйте что-нибудь вроде DBProviderFactory вместо
.