Строка подключения для файла MS Access? - PullRequest
1 голос
/ 17 июня 2011

Я добавил файл MS Access в проект, и VS создал мне DataSet.Я был очень доволен этим, но теперь у меня есть небольшая проблема:

Я хочу иметь строку подключения в файле app.config, чтобы позволить клиенту редактировать ее.Я захожу в файл app.config и вижу эту строку подключения: «БОЛЬШОЙ», - подумал я.

Но, похоже, это не используется.Я обнаружил, что используемая строка подключения содержится в файле 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();

Ответы [ 2 ]

2 голосов
/ 17 июня 2011

Когда 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

1 голос
/ 17 июня 2011

Посмотрите, поможет ли это: http://www.connectionstrings.com/

РЕДАКТИРОВАТЬ

Извините, неправильно прочитал в первый раз.

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

Это то, что вы пытаетесь достичь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...