.NETアプリケーションでのSQLiteの使用





一部のプロジェクトでは、多くの場合、ボリュームを小さく呼び出すことができないデータを格納する必要がありますが、同時に、アプリケーションの展開の複雑さのためにDBMSを使用するには高すぎます。 そして、ここでSQLiteのような素晴らしいものが救いに来ます-コンパクトな組み込みデータベース。



.NETプラットフォームを使用して作成するユーザーにとって、可用性は楽しい瞬間です。 SQLiteを使用するための既製のADO.NETプロバイダー。http//sqlite.phxsoftware.com/からダウンロードできます。 このプロバイダーを使用すると、LINQ、Entity Frameworkなど、最新バージョンの.NETのすべての追加機能を使用することもできます。



どこから始めるか



まず最初にすべきことは、アプリケーションの対象となるプラットフォームを選択することです。 SQLiteのプロバイダーの開発者に敬意を表する必要があります。SQLiteは、ほとんどすべての利用可能なプラットフォームをサポートしています。 必要なのは、正しいバージョンのSystem.Data.SQLite.dllアセンブリを選択することだけです。 アセンブリ自体は、さまざまなバリエーションでコンパイルされます。

  1. Managed Onlyは、WindowsおよびLinuxベースのオペレーティングシステムの両方で動作するアプリケーションを作成する場合に最適なオプションです。 この場合、アセンブリにはプロバイダーのマネージコードのみが含まれ、OSに応じて、SQLiteライブラリのネイティブバージョン(たとえば、Windowsのsqlite3.dll)が必要です。これはhttp://www.sqlite.orgから取得できます
  2. Compact Frameworkは、Windows CEを実行しているモバイルデバイスの.NET CF環境で作業するためのバージョンです。 アンマネージSQLiteライブラリのラッパーと必要なADO.NETインターフェイスの実装が含まれています。 Windows CE用のアンマネージSQLiteエンジンライブラリは、System.Data.SQLite.dllアセンブリと同じ場所にあります-これはSQLite.Interop.060.DLLファイルです。
  3. Itaniumは、Intel Itaniumプロセッサで動作するアダプターのバージョンです。 この場合、アプリケーションが機能するには、アンマネージSQLiteエンジンコードが既に含まれているSystem.Data.SQLite.dllアセンブリのみで十分です。
  4. x64は、x64アーキテクチャを備えたプラットフォームのバージョンです。 また、1つのアセンブリにマネージパーツとアンマネージパーツが含まれます。
  5. x86は、x86アーキテクチャを備えたプラットフォーム用のバージョンです。 x64およびItaniumバージョンと同じ方法で配置され、SQLiteエンジンライブラリのアンマネージバージョンを必要としません。


3番目、4番目、5番目のオプションでは、マネージ拡張機能を備えたC ++の多くの特定の機能を使用します。これにより、ADO.NETのマネージ部分とSQLiteデータベースエンジン自体のアンマネージ部分を単一のアセンブリとしてコンパイルできます。 このため、アセンブリデータの使用はWindowsプラットフォームのみに制限されています。



Visual Studio開発環境(特にバージョン2008)を使用している場合、SQLite Designerも役立ちます。これにより、SQLiteデータベースを操作するためのビジュアルツール(クエリビルダー、テーブル編集、その他の多くの機能)を使用できます。



さて、すべてに加えて、プロバイダーライブラリには、LINQテクノロジへのアクセスを提供するSystem.Data.SQLite.Linq.dllアセンブリが含まれています。



SQLiteデータベースの作成



SQLiteデータベースは、プログラムによって、またはVisual Studioで利用可能なサーバーエクスプローラーを使用して作成できます。 ADO.NETプロバイダーを使用してデータベースを作成するプログラムによる方法を検討してください。 最も単純な例として、データベースと、抽象的な会社の労働者に関するデータが保存される1つのテーブルを作成します。



ADO.NETツールを使用してデータベースとテーブルを作成します。



using System;

using System.IO;

using System.Data;

using System.Data.Common;

using System.Data.SQLite;



class Program

{

static void Main( string [] args)

{

string baseName = "CompanyWorkers.db3" ;



SQLiteConnection.CreateFile(baseName);



SQLiteFactory factory = (SQLiteFactory)DbProviderFactories.GetFactory( "System.Data.SQLite" );

using (SQLiteConnection connection = (SQLiteConnection)factory.CreateConnection())

{

connection.ConnectionString = "Data Source = " + baseName;

connection.Open();



using (SQLiteCommand command = new SQLiteCommand(connection))

{

command.CommandText = @"CREATE TABLE [workers] (

[id] integer PRIMARY KEY AUTOINCREMENT NOT NULL,

[name] char(100) NOT NULL,

[family] char(100) NOT NULL,

[age] int NOT NULL,

[profession] char(100) NOT NULL

);"
;

command.CommandType = CommandType.Text;

command.ExecuteNonQuery();

}

}

}

}



* This source code was highlighted with Source Code Highlighter .








この例では、SQLiteFactory、SQLiteConnection、SQLiteCommandクラスを使用します。これらのクラスは、データベースファイルの作成、データソースへの接続、SQLクエリの実行を提供します。 これらのクラスは、ADO.NETの基本抽象クラスを継承することでADO.NETインターフェイスのサポートを実装します。これは、オブジェクトブラウザーでプロトタイプを見るとわかります。 それらのいくつかを次に示します。



public sealed class SQLiteFactory : DbProviderFactory, IServiceProvider

public sealed class SQLiteConnection : DbConnection, ICloneable











そのため、SQLiteFactoryクラスはDbProviderFactory機能を実装し、SQLiteConnectionはDbConnectionを実装します。 DbProviderFactoryクラスとDbConnectionクラスは、標準のADO.NET抽象クラスの一部であり、そのインターフェイスは、使用されるDBMSに関係なく、統一されたデータアクセスを提供します。



データベースファイルへの接続を作成するだけで、既に説明したサーバーエクスプローラーを使用して、データベースが実際に作成されたことを確認できます。







図 1.サーバーエクスプローラーでCompanyWorkersデータベースを表示する



一般に、SQLiteのプロバイダーは、ADO.NETの接続レベルと無関係なレベルの両方でデータベースを操作するために必要なすべての機能を実装します。



SQLiteデータベースの編集



例として、最も単純なWebフォームアプリケーションを使用したデータベース編集を検討します。 一般に、この場合のSQLiteでの作業は、ADO.NETインターフェイスの使用により、他のDBMSでの作業とほとんど変わりません。



GridView、DetailsViewコントロール、およびCompanyWorkers.db3データベースへのアクセスを提供する2つのSqlDataSourceオブジェクトを使用する単純なASP.NETページを作成します。 次に、アプリケーションの操作に必要な最も重要なポイントのみを示します。





図 2.ワーカーテーブルのすべての列を選択します。





図 3.テーブルからのレコード選択をDataGrid1要素のSelectedValue値に関連付けます。





図 4.レコードを挿入、更新、削除するリクエストを作成します。



using System;

using System.Collections;

using System.Configuration;

using System.Data;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.HtmlControls;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using DataEditor.CompanyWorkersTableAdaptersTableAdapters;



namespace DataEditor

{

public partial class _Default : System.Web.UI. Page

{

private void GridViewDataBind()

{

// GridView1

this .GridView1.DataBind();

}



protected void DetailsView1_ItemDeleted( object sender, DetailsViewDeletedEventArgs e)

{

GridViewDataBind();

}



protected void DetailsView1_ItemUpdated( object sender, DetailsViewUpdatedEventArgs e)

{

GridViewDataBind();

}



protected void DetailsView1_ItemInserted( object sender, DetailsViewInsertedEventArgs e)

{

GridViewDataBind();

}

}

}











これで、アプリケーションを完全に使用する準備が整いました。 CompanyWorkers.db3データベースからworkerテーブルを編集するためのエディターの最終ビュー:





図 5.編集者、準備完了。



SQLiteを使用したおかげで、データベースを操作するためのサービスを展開する必要がありませんでした。



おわりに



SQLiteは、幅広いタスクに十分対応できると思います。 同時に、このDBMSはこれを目的としていないため、非常に大量のデータと多数のユーザーがいる深刻なプロジェクトでは使用しないでください:マルチプロセッシングのサポートがなく、トランザクションの分離レベルが制限されています。 一般に、小規模企業のデータベースや電話帳などの中規模プロジェクトの場合、最適なツールです。



PS:私の例では、System.Data.SQLite.dllアセンブリのx86バージョンを使用しました。



All Articles