2011-02-09 2 views
0

У меня есть проект библиотеки классов, в котором я добавил набор данных, который ведет переговоры с сервером sql. Выход этого проекта должен потребляться из веб-приложения проект. Поэтому я намерен поместить строку подключения в проект веб-приложения.using connectionstring из web.config вместо app.config

Сделал пару вещей. Чтобы мой адаптер использовал другую строку подключения, я столкнулся с this. Но я, наконец, нашел, выполнив следующие действия удобно:

Dim adapter as New MyReqeustTableAdapter() 
adapter.Connection.ConnectionString = sMyConnectionString 

Затем я попытался принимая строку подключения из моей конфигурации (app.config) для рода имитации. Я добавил раздел вручную с ключом «myconstr». Мои идеи состояли в том, чтобы сделать что-то вроде:

sMyConnectionString = ConfigurationManager.ConnectionString("myconstr").ConnectionString 

Но мой intellisense не смог обнаружить ConfigurationManager. Поэтому пришлось добавить соответствующую ссылку на проект.

Далее я добавил строку подключения через конструктор параметров для проекта веб-приложения. Я дал вышеприведенный ключ для ссылки на него. Однако вышеприведенная заявка, похоже, исключает исключение для ссылки.

+0

Не могли бы вы опубликовать копию web.config, а также. –

+0

Можете ли вы показать раздел connectionStrings из вашего web.config? – Egor4eg

+0

вы не можете задавать вопрос и никогда не общаться с людьми, которые пытались вам помочь! – lKashef

ответ

1

Предположим, вы создали библиотеку классов. В нем вы определили свойство настройки, который идет как:

Properties.Settings.Default.ProjectName 

Visual Studio может автоматически генерировать некоторые конфигурации для вас следующим образом:

(app.config)

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
     <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" > 
      <section name="MyDllProject.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
     </sectionGroup> 
    </configSections> 
    <applicationSettings> 
     <MyDllProject.Properties.Settings> 
      <setting name="ProjectName" serializeAs="String"> 
       <value>MyDllproject</value> 
      </setting> 
     </MyDllProject.Properties.Settings> 
    </applicationSettings> 
</configuration> 

Теперь скажите, что вы добавляете эту сборку в проект. И вы получите доступ к своим настройкам, скорее всего, получите значение MyDllproject. Это несмотря на добавление какой-либо конфигурации. Зачем? Потому что, когда сборка была создана, она была написана в ней. И написанный код таков, что в отсутствие переопределения конфигурации используйте то, что было определено в app.config во время генерации.

Теперь в целевом проекте, вы просто добавить необходимые разделы в файле конфигурации в следующем шаблоне

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 

     <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" > 
      <!-- start: copied from app.config of class library --> 
      <section name="MyDllProject.Properties.Settings" 
       type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" 
       /> 
      <!-- end: copied from app.config of class library --> 

      <!-- other sections may follow --> 
     </sectionGroup> 

    </configSections> 

    <applicationSettings> 
     <!-- remember to maintain the same order as how it was defined in the sectionGroup --> 

     <!-- start: copied from app.config of class librarly --> 
     <MyDllProject.Properties.Settings> 
      <setting name="ProjectName" serializeAs="String"> 
       <value>ConsoleProjectB</value> 
      </setting> 
     </MyDllProject.Properties.Settings> 
     <!-- end: copied from app.config of class library --> 

     <!-- other configurations settings may follow --> 
    </applicationSettings> 
</configuration> 

это так.

Вот небольшой пример проекта я связан за то же самое: http://sdrv.ms/16ksPef

0

вы можете добавить ссылку на System.Web и использовать System.Web.Configuration.WebConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString) из проекта библиотеки классов

0

Файл конфигурации (app.config), которая определена в библиотеке проекте в классе не может быть - автоматически - потребляемая системой. Единственным конфигурационным файлом, который может быть использован, является файл web.config в веб-приложениях или *myexe.exe*.config в приложениях exe, где exe-файл равен *myexe.exe*.

Возможно, вы пытаетесь добавить app.config в библиотеку классов. Это не сработает.

Можно связать второй файл конфигурации с web.config, но этот probbaly не поможет вам.

0

В принципе, вам нужна возможность изменить глобальный параметр вашей библиотеки извне. Использование app.config само по себе не дает вам этой возможности сразу - вы еще не выставили свои внутренние настройки библиотеки. Имея это в виду, один очень простой способ добиться воздействия заключается в создании в вашей библиотеке назначателя для app.config.

public static class Setter 
{ 
    public static void Set(string name, string value) 
    { 
     Properties.Settings.Default[name] = value; 
    } 
} 

Затем на веб-приложения начать в global.asax, или в другом месте:

MyLibrary.Setter.Set("X", ConfigurationManager.ConnectionStrings["Y"].ConnectionString); 
-1

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

Вы должны просто создать базовый класс для классов DAL (Data Access Layer), которые будут иметь общедоступное свойство, которое содержит строку соединения.

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

public class DALBase 
{ 
    public static string connString 
    { 
     get { return "Data Source=localhost\\SqlExpress;Initial Catalog=theDb Integrated Security=True"; } 
    } 
} 
+0

Вы жестко кодируете строку conenction? –

Смежные вопросы