Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正在连接到app.config中的connectionString_C#_Sql_Wpf_Ms Access_Database Connection - Fatal编程技术网

C# 正在连接到app.config中的connectionString

C# 正在连接到app.config中的connectionString,c#,sql,wpf,ms-access,database-connection,C#,Sql,Wpf,Ms Access,Database Connection,我的连接字符串存储在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

我的连接字符串存储在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" />
在搜索时,我在堆栈溢出上找到了答案,但有些人说要放入
var
,但当我键入
var
时,它无法识别,所以我使用
string
方法

当我进入type
cisconn.Open()时该选项不存在。我正在引用
System.configuation
System.Data.Sql
System.Data.SqlClient
System.Data.OleDb


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

连接字符串只是一个字符串,用于连接,因此您应该执行以下操作:

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超出了答案的范围,但请查看如何正确实现它。

我认为您不应该在字符串中使用“,”或“,”这是不正确的。应该是“Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\\server\file\CIS Data\Database\CIS_be.accdb;Jet-OLEDB:Database;Password=123”加上密码字段前的分号,看起来您遗漏了一个分号。这部分代码是在我将连接添加到db时由Visual Studio创建的-我没有手动输入。虽然我在写问题的时候可能会漏打一点。这就是为什么我不能理解为什么我不能做
cisconn.Open()哦!哈,是的,我错过了。连接字符串只是一个连接字符串,您仍然需要使用
OleDbConnection
来创建它,比如
OleDbConnection conn=new OleDbConnection(cisconn)然后您可以执行
conn.Open()
这也是我的想法,但当我这样做时,CISCON下出现了一个错误,说明:
字段初始值设定项不能引用非静态字段,方法或属性“CTaC\u Information\u System.StartMenu.cisconn”
我不知道该做什么。这是一个与连接字符串中的字符串完全不同的字符串,因此该错误必须来自其他地方,但除非您发布代码(编辑您的问题),否则我无法说出错误的位置。由于此错误而无法工作:
字段初始值设定项无法引用非静态字段、方法或属性“CTaC\u Information\u System.StartMenu.cisconn”
我编辑了答案,您不应该将OleDbConnection用作类中的字段,如果这样做,则必须以不同的方式对其进行初始化。这很有效。我遇到的问题是我把它放在了
公共部分类下,所以我把它移到了
private void
中,砰的一声,它成功了!谢谢你的帮助!我修改了答案,只是为了说明如果你真的想把它放在类的根下,该怎么做。我能把连接字符串和这个放在单独的类中,然后通过调用所说的类来访问它吗?
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
    }
}