2011-06-17 73 views
1

我添加了一個MS Access文件到一個項目中,VS爲我創建了一個DataSet。我很高興,但現在我有一個小問題:MS Access文件的連接字符串?

我想要在app.config文件中的連接字符串,以允許客戶編輯它。我去app.config文件,我看到了這個連接字符串,「我認爲,」偉大「。

但似乎沒有使用。我發現使用的connectionString包含在Settings.settings文件中,我不能在運行時編輯它。

任何想法如何解決這個問題?我甚至可以根據需要以編程方式指定自己的連接字符串,但我沒有找到如何指定它。

非常感謝!

編輯:下面一個部分代碼:

生成的代碼的

一個例子,這似乎指Settings.settings文件:

[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 
     [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] 
     private void InitConnection() { 
      this._connection = new global::System.Data.OleDb.OleDbConnection(); 
      this._connection.ConnectionString = global::Infoteam.CliniqueLaSource.DocuShare.Communication.DatabaseAccess.Properties.Settings.Default.ClsConnectionString; 
     } 

我在我的app.config文件是什麼:

<connectionStrings> 
    <add name="Infoteam.CliniqueLaSource.DocuShare.DatabaseAccess.Properties.Settings.ClsConnectionString" 
     connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Workspace\CliniqueLaSource.CLS-DocuShare\Main\Resources\Cls.mdb;Persist Security Info=True" 
     providerName="System.Data.OleDb" /> 
    </connectionStrings> 

我已經在Settings.settings文件是什麼:

<?xml version='1.0' encoding='utf-8'?> 
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="Infoteam.CliniqueLaSource.DocuShare.DatabaseAccess.Properties" GeneratedClassName="Settings"> 
    <Profiles /> 
    <Settings> 
    <Setting Name="ClsConnectionString" Type="(Connection string)" Scope="Application"> 
     <DesignTimeValue Profile="(Default)"> 
     &lt;?xml version="1.0" encoding="utf-16"?&gt; 
     &lt;SerializableConnectionString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"&gt; 
     &lt;ConnectionString&gt;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\Cls.mdb;Persist Security Info=True&lt;/ConnectionString&gt; 
     &lt;ProviderName&gt;System.Data.OleDb&lt;/ProviderName&gt; 
     &lt;/SerializableConnectionString&gt; 
     </DesignTimeValue> 
     <Value Profile="(Default)">Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\Cls.mdb;Persist Security Info=True</Value> 
    </Setting> 
    </Settings> 
</SettingsFile> 

這是我做的是使用的一個小例子:

ClsDataSet dataSet = new ClsDataSet(); 
    DOCDOCUMENTSTableAdapter adapter = new DOCDOCUMENTSTableAdapter(); 
    adapter.Fill(dataSet.DOCDOCUMENTS); 
    return dataSet.DOCDOCUMENTS.ToList(); 
+0

請出示從配置文件中顯示連接字符串代碼段(和刪除如有必要,從它那裏獲取敏感信息)我問的原因是.settings文件和.config文件之間有關係,我們可能會更好地解釋。另外,如果您可以在代碼中找到使用.Settings字符串的位置,而不是.config字符串,那將有所幫助。 – David

+0

是否無法從設置文件中刪除連接字符串,然後將考慮app.config中的連接字符串。 編程方式可以使用 康恩=新的OleDbConnection( 「提供者= Microsoft.Jet.OLEDB.4.0;」 + 「數據源=」 +使用Server.Mappath( 「寵物/ Pets.mdb」)); – Rahul

+0

@David:我添加了一些代碼:) @Rahul:不,這是不可能的,如果我這樣做,我在編譯錯誤生成的代碼,它沒有找到連接字符串。在我的代碼中,我可以指定這個連接? (並且我不在服務器上,它是一個簡單的客戶端應用程序 – J4N

回答

2

當VS爲您創建一個強類型DataSet時,它還會創建圍繞DataAdapters的強類型包裝以填充您的DataSet並更新數據庫。

這些強類型包裝或TableAdapters可以配置爲使用任何你想要的連接。只需將Connection屬性設置爲一個使用您希望的連接字符串初始化的連接,並且您都已設置。

如果每次創建新的TableAdapter時設置連接過於繁瑣,您還可以利用它們作爲partial類。這意味着您可以添加另一個代碼文件,每次DataSet設計器工具更新基礎代碼時都不會被覆蓋,並重載DataTable構造函數,以便它使用連接字符串或連接實例,並在構造函數中相應地設置屬性:

public partial class MyTableTableAdapter 
{ 
    public MyTableTableAdapter(OleDbConnection connection) 
    { 
      if (connection == null) 
       throw new ArgumentNullException("connection"); 

      base.Connection = connection; 
    } 

    public MyTableTableAdapter(string connectionString) 
    { 
      base.Connection = new OleDbConnection(connectionString); 
    } 
} 

如果你有很多TableAdapters這可能是一個孔和你最好每次實例化時只設置手動連接TableAdapter

+0

我有一個訪問器,它創建每個表適配器,所以我會直接使用這個!謝謝! – J4N

+0

對我來說工作得非常好! – Marcel

1

看看這有助於:http://www.connectionstrings.com/

編輯

對不起,通過誤讀的第一次。

http://www.codeproject.com/KB/vb/PersistConnectionStrings.aspx

這是你想要完成什麼?

+0

這不是他要求的 – SLaks

+0

....我認爲你沒有閱讀我的文章......我確切地知道我要設置什麼連接字符串,問題是我需要在我的app.config文件中有它,它使用Settings.settings文件中的那個 – J4N

+0

是的,我很抱歉,我發佈了這個之後,我誤讀了,並且發現了這個。 –