2016-07-25 3 views
1

Я пытаюсь начать работу с sqlite + C#. Я узнал, что SQLite-lib не является стандартным lib, поэтому я добавил его для каждой ссылки.Обтекание SQLiteConnection с помощью специального класса DBConnection

Поскольку я чаще использую этот класс, я думал о создании собственного класса, который заботится обо всем.

Прямо сейчас, это мой DB-класс:

class DBConnection 
{ 

    public SQLiteConnection m_dbConnection; 

    public DBConnection() 
    { 
     Open(); 
    } 

    private void Open() 
    { 
     m_dbConnection = new SQLiteConnection("Data Source=Diary.sqlite;Version=3;"); 
     m_dbConnection.Open(); 
    } 

    public void Close() 
    { 
     m_dbConnection.Close(); 
    } 

} 

Теперь, в другом Form, я пытаюсь получить доступ к нему:

private void FrmLogin_Load(object sender, EventArgs e) 
    { 
     DBConnection DBConnection = new DBConnection(); 
     string sql = "SHOW TABLES"; 
     SQLiteCommand command = new SQLiteCommand(sql, DBConnection); 
     SQLiteDataReader reader = command.ExecuteReader(); 
     Console.WriteLine(reader); 
    } 

Это, однако, заканчивается в следующей ошибке :

Error CS1503 Argument 2: cannot convert from 'FFR2.DBConnection' to 'System.Data.SQLite.SQLiteConnection'

Я пытался в моем DBConnection класса наследовать SQLiteConnection с этим:

class DBConnection : SQLiteConnection, но это было неправильно. Я хотел бы иметь класс, который автоматически открывает БД, закрывает мой вызов и делает команды по требованию, как показано в примере.

Спасибо за любые советы

+0

Я создал проект C#/SQLite/NHiberate Web Forms, чтобы решить проблемы с подключением. У меня есть этот завершенный проект по Github по этой ссылке, который делает то, что вы просите. Добавленный элемент ORM/NHibernate https://github.com/RegencySoftware/SQLite-NHibernate-CSharp-Demo –

ответ

1

I'm working on a learning project and I'm trying to get started with sqlite + C#. I found out that the SQLite-lib isn't a standard-lib, so I added it per reference.

Примечание уверены, что именно вы имеете в виду «стандартный Пб», но от того, что я понимаю DBConnection они предоставляют в их NuGet пакете действительно реализует интерфейс IDbConnection и в общем is an ADO.NET provider for SQLite

, если вы измените свое соединение, чтобы быть SQLite соединение код должен работать

var DBConnection = new SQLiteConnection("Data Source=Diary.sqlite;Version=3;"); 
    string sql = "SHOW TABLES;"; 
    DBConnection.Open(); 
    SQLiteCommand command = new SQLiteCommand(sql, DBConnection); 
    SQLiteDataReader reader = command.ExecuteReader(); 

Примечание: вы должны утилизировать свои соединения, так же просто, как и перенос операторов с использованием соединения в оператор using.

using(var connection = new SQLiteConnection("Data Source=Diary.sqlite;Version=3;")) 
{ 
    connection.Open(); 
    var command = new SQLiteCommand(sql, DBConnection); 
    var reader = command.ExecuteReader(); 
    //do stuff 
} 

Это гарантирует, что ваше соединение будет закрыто сразу после выполнения блока.

+0

работает как charme! :) Спасибо – DasSaffe

0

вам необходимо либо добавить методы к вашему DB класс

public SQLIteCommand MakeCommand(string sql) 
{ 
    return new SqliteCommand(sql,m_dbConnection); 
} 

, например. Или выставить DBConnection к внешнему миру

public DBConnection DB { get { return m_dbConnection;}} 
... 
    SQLiteCommand command = new SQLiteCommand(sql, myConn.DB); 
Смежные вопросы