Передача имени базы данных как переменная к SQL от C#. Действительно ли это возможно?

У меня есть 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.

5
задан Cade Roux 27 January 2010 в 21:36
поделиться

6 ответов

Почему бы вам не установить вашу базу данных, когда вы делаете соединение? Тогда код даже не меняется.

8
ответ дан 13 December 2019 в 05:35
поделиться

Похоже, вам необходимо установить имя базы данных и строку подключения, динамически, в зависимости от типа запроса. Даже если у вас есть, скажем, (просто например) 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}

для получения дополнительной информации на

Надеюсь, это поможет

2
ответ дан 13 December 2019 в 05:35
поделиться

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
1
ответ дан 13 December 2019 в 05:35
поделиться

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

Разъяснение:
Чтобы уточнить, вы могут сделать это с помощью динамического SQL. например Передача имя базы данных на SPROC, которое затем может создать полное утверждение и выполнить его. Конечно, неверно использовать переменную напрямую («Выбрать * из (скрытых) недействительно). Однако это не будет рекомендуемым подходом, отсюда, лучшее, что можно изменить соединение.

0
ответ дан 13 December 2019 в 05:35
поделиться

в этом случае несколько строк соединений - ваш друг!

1
ответ дан 13 December 2019 в 05:35
поделиться

Попробуйте что-нибудь вроде DBProviderFactory вместо

.
0
ответ дан 13 December 2019 в 05:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: