2011-02-09 75 views
0

ConnectionString的我有我已經添加了與SQL Server談到一個數據集類庫項目。此項目的輸出將從Web應用程序項目中消耗。所以我打算把我的連接字符串放入Web應用程序項目中。使用從web.config中,而不是app.config中

做了幾件事。爲了讓我的適配器使用不同的連接字符串,我遇到了this。但我終於找到了做以下便利:

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

然後我嘗試服用連接字符串從我的配置(app.config)中,以一種模擬。我用鑰匙「myconstr」手動添加了一個部分。我的想法是做類似的事情:

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

但我的智能感知不能檢測ConfigurationManager。所以必須添加適當的參考項目。

接下來,我通過設置設計師爲Web應用程序項目添加一個連接字符串。我給了上面的關鍵參考。但是上面的語句似乎會拋出一個空引用異常。

+0

你能張貼的web.config的副本,以及。 – 2011-02-09 13:08:52

+0

你可以在web.config中顯示'connectionStrings'部分嗎? – Egor4eg 2011-02-09 13:12:52

回答

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應用程序中的web.config文件或exe文件中的*myexe.exe*.config,其中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; 
    } 
} 

然後,在Web應用程序開始在Global.asax中,或其它地方:

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

從你的問題我覺得你構建一個n層應用程序。我認爲你比你提到的兩個選項更好。

你應該只創建一個基類爲您的DAL(數據訪問層),將有一個包含連接字符串的公共屬性的類。

BTW它會幫助你隱藏/保護,而不是將其存儲在可能被任何人誰擁有輕鬆讀取或得到你的主機訪問一個文件的連接字符串

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