【问题标题】:Connection String for a MS Access file?MS Access 文件的连接字符串?
【发布时间】:2011-09-17 05:29:23
【问题描述】:

我在项目中添加了一个 MS Access 文件,VS 为我创建了一个数据集。我对此非常满意,但现在我遇到了一个小问题:

我想在 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();

【问题讨论】:

  • 请显示配置文件中显示连接字符串的代码 sn-p (并在必要时从中删除敏感信息)。我问的原因是 .settings 文件和 .config 文件之间存在关系,我们也许可以更好地解释。此外,如果您可以在代码中找到您说使用 .Settings 字符串而不是 .config 字符串的位置,那将有所帮助。
  • 是否无法从设置文件中删除 conn 字符串,然后将考虑 app.config 中的字符串。以编程方式,您可以使用 conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; " + "Data Source=" + Server.MapPath("Pets/Pets.mdb"));
  • @David:我添加了一些代码 :) @Rahul:不,这是不可能的,如果我这样做,我在生成的代码中有编译错误,它找不到连接字符串。我可以在我的代码中的哪里指定此连接? (而且我不在服务器上,它是一个简单的客户端应用程序
  • 可能是……我只是好奇。无论如何,如果您想在代码中指定 conn 字符串,请查看此 MSDN post for MS Access。它还提供了一个示例,这将有所帮助。 msdn.microsoft.com/en-us/library/ms971485.aspx
  • 我查看了您的代码,但它没有使用 Visual Studio 自动生成的任何 DataSet。

标签: c# .net visual-studio-2010 ms-access dataset


【解决方案1】:

当 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 时手动设置连接

【讨论】:

  • 我有一个访问器来创建每个表适配器,所以我将直接使用它!谢谢!
【解决方案2】:

看看这是否有帮助:http://www.connectionstrings.com/

编辑

抱歉,第一次看错了。

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

这是你想要完成的吗?

【讨论】:

  • 这不是他想要的。
  • ....我想你没有阅读我的帖子...我确切地知道我要设置什么连接字符串,问题是我需要在我的 app.config 中有它文件,它使用 Settings.settings 文件中的那个。
  • 是的,我很抱歉,我在发布此内容后误读并发现了这一点。
  • @Jeff Sheldon:不,我希望应用程序使用我的 app.config 文件(由 Visual Studio 创建)中存在的连接字符串。因为我可以在没有视觉工作室的情况下对其进行编辑。
  • 我明白这一点。该代码应该允许您通过执行以下操作更改设置连接字符串: My.Settings.SetUserOverride("ConnectionString1", ConfigurationManager.ConnectionStrings("MyAppConnString"))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-28
  • 2011-12-11
  • 1970-01-01
  • 2022-11-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多