2016-07-25 5 views
1

私はsqlite + C#を使い始めようとしています。私はSQLite-libが標準ライブラリではないことを知ったので、私はそれをリファレンスごとに追加しました。カスタムDBConnectionクラスを使用したSQLiteConnectionのラップ

私はより頻繁にこのクラスを使用していますので、私はすべての世話をする独自のクラスを作成について考えました。

今、これは私の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'

これでSQLiteConnectionを継承する私のDBConnectionクラスを試しました。

class DBConnection : SQLiteConnectionでも、それは正しくありませんでした。私は自動的にDBを開き、コールを閉じて、例のようにオンデマンドでコマンドを作成するクラスを持っていたいと思います。何かアドバイス

+0

私はC#/ SQLite/NHiberate Webフォームプロジェクトを作成して接続問題を解決しました。私は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を公開あなたはSQLiteの接続であるためにあなたの接続を変更した場合、一般的にis an ADO.NET provider for 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); 
} 

にメソッドを追加する必要があります。それとも、「標準-LIB」が、私は彼らが彼らのnugetパッケージで提供したDbConnectionがIDbConnectionインターフェイスを実装してい理解したものとの意味を確認してください正確に何を注意

public DBConnection DB { get { return m_dbConnection;}} 
... 
    SQLiteCommand command = new SQLiteCommand(sql, myConn.DB); 
関連する問題