2015-04-30 2 views
0

Я моя строка соединения хранится в App.ConfigПодключение к ConnectionString в 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;` 

Я нашел ответ на переполнение стека при поиске, но некоторые сказали, что он положил var, но когда я набрал var, он не узнал бы его, поэтому я пошел с методом string.

Когда я перехожу к типу cisconn.Open();, опции там нет. Я ссылаюсь на System.Configuartion;, System.Data.Sql;System.Data.SqlClient; и System.Data.OleDb;.

Может кто-нибудь показать/рассказать мне, как я могу подключиться к базе данных из C#? Я пытаюсь проверить соединение, когда мое приложение работает, но я не могу понять это.

+0

Я не думаю, что вы должны использовать & quot (или & quote, which is wrong) в строке. должен быть просто «Provider = Microsoft.ACE.OLEDB.12.0; Источник данных = \\ сервер \ файл \ CIS Data \ Database \ CIS_be.accdb; Jet OLEDB: База данных; Пароль = 123" плюс выглядит так, как вы пропустили точку с запятой перед полем Пароль. –

+0

Эта часть кода была создана Visual Studio, когда я добавил подключение к db - я не вручную вводил это. Хотя я, возможно, пропустил набрав немного, когда писал это в вопросе. Вот почему я не могу понять, почему я просто не могу сделать 'cisconn.Open();' – Daedric

+2

Oh! Ха, да, я пропустил это. Строка подключения - это всего лишь строка соединения, вам все равно нужно использовать «OleDbConnection» для ее создания, например «OleDbConnection conn = new OleDbConnection (cisconn)»; тогда вы можете сделать «conn.Open()» –

ответ

0

Строка соединения это просто строка, его предполагается использовать в вашей связи, так что вы должны сделать:.

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 выходит за рамки ответа, но посмотрите, как его правильно реализовать.

+0

Не работает из-за этой ошибки: 'Инициализатор поля не может ссылаться на нестатические поля, метод или свойство 'CTaC_Information_System.StartMenu.cisconn'' – Daedric

+0

Я отредактировал ответ, вы не должны использовать OleDbConnection в качестве поля в классе, если вы это сделаете, то его нужно инициализировать по-другому. –

+0

Это сработало.Проблема, которую я имел, заключалась в том, что я использовал ее под «public partial class», поэтому я переместил ее в «private void» и bam работал! Спасибо за помощь! – Daedric

Смежные вопросы