【问题标题】:Connecting to connectionString in app.config连接到 app.config 中的 connectionString
【发布时间】:2015-04-30 03:27:38
【问题描述】:

我的连接字符串存储在 App.Config 中

<connectionStrings>
 <clear />
 <add name="CTaC_Information_System.Properties.Settings.CIS_beConn"
     connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=&quot;\\server\file\CIS Data\Database\CIS_be.accdb&quote;;Jet OLEDB:Database Password=123" 
     providerName="System.Data.OleDb" />

然后,当我转到 main.xaml.cs 时,我输入以下内容:

string cisconn = ConfigurationManager.ConnectionStrings["CTaC_Information_System.Properties.Settings.CIS_beConn"].ConnectionString;`

我在搜索时在 Stack Overflow 上找到了该答案,但有人说要输入 var,但当我输入 var 时,它无法识别它,所以我使用了 string 方法。

当我输入cisconn.Open(); 时,该选项不存在。我引用 System.Configuartion;,System.Data.Sql; System.Data.SqlClient;System.Data.OleDb;

有人可以告诉我如何从 c# 连接到数据库吗?我正在尝试在我的应用程序运行时测试连接,但我无法弄清楚。

【问题讨论】:

  • 我认为您不应该在字符串中使用 &quot(或 &quote,这是不正确的)。应该只是“Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\\server\file\CIS Data\Database\CIS_be.accdb;Jet OLEDB:Database;Password=123”加上看起来你错过了一个分号在密码字段之前。
  • 当我添加到数据库的连接时,这部分代码是由 Visual Studio 创建的——我没有手动输入。虽然我在问题中写它时可能错过了一点打字。这就是为什么我不知道为什么我不能做cisconn.Open();
  • 哦!哈,是的,我错过了。连接字符串只是一个连接字符串,你仍然需要使用OleDbConnection来创建它,比如OleDbConnection conn = new OleDbConnection(cisconn);然后你可以做conn.Open()
  • 我也是这么想的,但是当我这样做时,在 cisconn 下出现了一个错误,说明了这一点:A field initializer cannot reference the non-static field, method or property 'CTaC_Information_System.StartMenu.cisconn' 我不知道该怎么做。
  • 那是一个与连接字符串中的完全不同的字符串,因此该错误必须来自其他地方,但除非您发布代码,否则我不知道在哪里(编辑您的问题) .

标签: c# sql wpf ms-access database-connection


【解决方案1】:

连接字符串只是一个字符串,它意味着在你的连接中使用,所以你应该这样做:

public void DoSomeDatabaseOp()
{
    string cisconn = ConfigurationManager.ConnectionStrings["CTaC_Information_System.Properties.Settings.CIS_beConn"].ConnectionString;

    using (OleDbConnection conn = new OleDbConnection(cisconn))
    {
        conn.Open();
        //Create your commands or do your SQL here.
    }
}

您应该在使用它的方法内创建/销毁连接。不要在类对象的根目录中保留对它的引用。如果您不进行数据库操作,这可以保持连接清洁和打开。

如果你真的想这样做,你可以这样做:

class MyClass
{
    OleDbConnection _rootConn;
    string _connStr;

    public MyClass()
    {
        _connStr = string cisconn = ConfigurationManager.ConnectionStrings["CTaC_Information_System.Properties.Settings.CIS_beConn"].ConnectionString;
        _rootConn = new OleDbConnection(_connStr);
    }

    public void DoSomeDatabaseOp()
    {
        //Use _rootConn here
    }
}

但是该类应该实现 IDisposable 以便它可以正确处理连接!如何实现 IDisposable 超出了答案的范围,但请查看如何正确实现它。

【讨论】:

  • 由于此错误而无法工作:A field initializer cannot reference the non-static field, method or property 'CTaC_Information_System.StartMenu.cisconn'
  • 我编辑了答案,你不应该使用 OleDbConnection 作为类中的一个字段,如果你这样做了,那么它必须以不同的方式初始化。
  • 那行得通。我遇到的问题是我把它放在public partial class 下,所以我把它移到private void 并且它工作了!感谢您的帮助!
  • 我修改了答案只是为了展示如果你真的想要它在类的根目录下如何完成。
  • 我可以将连接字符串和它放在单独的类中,然后通过调用所述类来访问它吗?
猜你喜欢
  • 2015-01-06
  • 2012-08-15
  • 2011-04-08
  • 2013-03-19
  • 1970-01-01
  • 2017-05-06
  • 2017-07-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多