Как манипулировать строкой соединения SQL - PullRequest
0 голосов
/ 10 июня 2010

Я пытаюсь манипулировать строкой соединения SQL, поэтому вместо запуска исходной копии нашей базы данных он запускается из одной копии в нашем проекте C #.

Ответы [ 5 ]

2 голосов
/ 10 июня 2010

Класс DbConnectionStringBuilder является хорошим способом манипулирования различными парами ключ / значение строки соединения.Вы должны использовать соответствующий класс специфичных для провайдера соединений.

1 голос
/ 10 июня 2010

Попробуйте взглянуть на это: http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnectionstringbuilder.aspx

Если вы используете SQL Server, это гораздо лучше, чем пытаться манипулировать строкой ...

0 голосов
/ 10 июня 2010

Если вы используете xsds / адаптеры, вам нужно вручную установить строку подключения адаптера при запуске приложения. Если у вас есть ваши адаптеры в отдельной библиотеке, вам нужно перегрузить конструктор адаптера подписью, которой вы можете передать connectionString (читайте ниже, если это так). Первая строка подключения, которую вы использовали для создания xsd, кэшируется.

Если это так, выполните следующие действия:

Допустим, у вас есть User.xsd. Щелкните правой кнопкой мыши, затем просмотрите код. Вы заметите, что User.cs создан, если вы развернете (+) xsd.

Возможно, у вас сгенерирован этот код:

namespace Adapters {


    public partial class User
    {
    }
}

Вы должны добавить следующее:

namespace Adapters.UserTableAdapters
{
    public partial class UsersTableAdapter : global::System.ComponentModel.Component
    {
        public UsersTableAdapter(string connectionString)
        {
            this._clearBeforeFill = true;
            this._connection = new System.Data.SqlClient.SqlConnection();
            this._connection.ConnectionString = connectionString;
        }
    }
}

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

Поскольку я использую connectionString по всему веб-сайту, и мне неудобно продолжать читать для него web.config, я создал этот простой класс:

namespace Data
{
    public class DataModule
    {
        private static string _connectionString = String.Empty;


        public static string ConnectionString
        {
            get
            {
                if (_connectionString == String.Empty)
                    throw new Exception("DataModule not initialized");
                return _connectionString;
            }
        }

        public static void initialize(string connectionString)
        {
            _connectionString = connectionString;
        }
    }
}

При запуске приложения я звоню

DataModule.Initialize(System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);

Обратите внимание, что этот класс поддерживает только 1 connectionString. Вы можете легко изменить его для поддержки многих.

Мы можем помочь вам больше, если вы лучше описываете свое окружение =)

0 голосов
/ 10 июня 2010

Я не уверен на 100%, каков контекст вашей проблемы, но вам может помочь следующее. Одним из способов было бы позволить App.Config выполнить работу:

<configuration>
  <configSections>
    <section name="loggingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null" />
    <section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null" />
  </configSections>
<dataConfiguration defaultDatabase="DEV" />
<connectionStrings>
    <add name="DEV" connectionString="Database=xxx;Server=xxx;Trusted_Connection=True" providerName="System.Data.SqlClient" />
    <add name="LIVE" connectionString="Database=xxx;Server=xxx;Trusted_Connection=True" providerName="System.Data.SqlClient" />
</connectionStrings>...

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

    public static string DefaultDatabase
    {
        get
        {
            SystemConfigurationSource scs = new SystemConfigurationSource();
            return DatabaseSettings.GetDatabaseSettings(scs).DefaultDatabase;
        }
    }

    public static string DefaultConnectionString
    {
        get
        {
            return ConfigurationManager.ConnectionStrings[Sql.DefaultDatabase].ConnectionString;
        }
    }
0 голосов
/ 10 июня 2010

Самый простой способ, вероятно, состоит в том, чтобы вместо сохранения строки соединения как есть, поместить заполнители для битов, которые вы хотите заменить другими значениями. Если вы используете {0}, {1} и т. Д., Вы можете просто использовать string.Format для вставки правильных значений во время выполнения.

...