一部のプロジェクトでは、多くの場合、ボリュームを小さく呼び出すことができないデータを格納する必要がありますが、同時に、アプリケーションの展開の複雑さのためにDBMSを使用するには高すぎます。 そして、ここでSQLiteのような素晴らしいものが救いに来ます-コンパクトな組み込みデータベース。
.NETプラットフォームを使用して作成するユーザーにとって、可用性は楽しい瞬間です。 SQLiteを使用するための既製のADO.NETプロバイダー。http : //sqlite.phxsoftware.com/からダウンロードできます。 このプロバイダーを使用すると、LINQ、Entity Frameworkなど、最新バージョンの.NETのすべての追加機能を使用することもできます。
どこから始めるか
まず最初にすべきことは、アプリケーションの対象となるプラットフォームを選択することです。 SQLiteのプロバイダーの開発者に敬意を表する必要があります。SQLiteは、ほとんどすべての利用可能なプラットフォームをサポートしています。 必要なのは、正しいバージョンのSystem.Data.SQLite.dllアセンブリを選択することだけです。 アセンブリ自体は、さまざまなバリエーションでコンパイルされます。
- Managed Onlyは、WindowsおよびLinuxベースのオペレーティングシステムの両方で動作するアプリケーションを作成する場合に最適なオプションです。 この場合、アセンブリにはプロバイダーのマネージコードのみが含まれ、OSに応じて、SQLiteライブラリのネイティブバージョン(たとえば、Windowsのsqlite3.dll)が必要です。これはhttp://www.sqlite.orgから取得できます 。
- Compact Frameworkは、Windows CEを実行しているモバイルデバイスの.NET CF環境で作業するためのバージョンです。 アンマネージSQLiteライブラリのラッパーと必要なADO.NETインターフェイスの実装が含まれています。 Windows CE用のアンマネージSQLiteエンジンライブラリは、System.Data.SQLite.dllアセンブリと同じ場所にあります-これはSQLite.Interop.060.DLLファイルです。
- Itaniumは、Intel Itaniumプロセッサで動作するアダプターのバージョンです。 この場合、アプリケーションが機能するには、アンマネージSQLiteエンジンコードが既に含まれているSystem.Data.SQLite.dllアセンブリのみで十分です。
- x64は、x64アーキテクチャを備えたプラットフォームのバージョンです。 また、1つのアセンブリにマネージパーツとアンマネージパーツが含まれます。
- 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ページを作成します。 次に、アプリケーションの操作に必要な最も重要なポイントのみを示します。
- 最初のSqlDataSource1オブジェクトをセットアップします。 エディターでは、GridView1オブジェクトのデータソースとしてのみ使用されるため、データベースへの接続を設定する場合、CompanyWorkers.db3からデータを抽出するだけでよいことを示すだけで十分です。これは、SqlDataSource1設定ウィンドウで簡単に実行できます。
図 2.ワーカーテーブルのすべての列を選択します。
- SqlDataSource1をセットアップしたら、GridViewクラスのオブジェクトをフォームに追加する必要があります。これは、コントロールをツールボックスからapsxページにドラッグするだけで実行できます。 結果のGridView1オブジェクトについて、SqlDataSource1データソースを選択します。 GridView1の設定で、選択を有効にするオプションを有効にします。これは、目的の行を編集するときに必要になります。
- 次に、DetailsViewクラスの要素とSqlDataSourceクラスの別のオブジェクトをフォームに追加します。 DetailsView1は、workersテーブルのメインデータエディターになります。 まず、GridView1の対象ワーカーの反対側にある[選択]をクリックしたときに、DetailsView1のテーブルから目的のレコードを選択するようにSqlDataSource2を構成します。 これを行うには、データソース設定のWHEREに移動し、DetailsView1で現在のアイテムがどのように選択されるかを示します。
図 3.テーブルからのレコード選択をDataGrid1要素のSelectedValue値に関連付けます。
- 前のウィンドウに戻り、Advancedでテーブルにレコードを挿入、更新、削除するリクエストを生成するためのDawを配置します。
図 4.レコードを挿入、更新、削除するリクエストを作成します。
- DetailsView1のデータソースとしてSqlDataSource2を設定します。 一般に、アプリケーションの準備は整っていますが、DataGrid1のDetailsView1を使用して従業員を追加および削除する場合、データが更新されないため、これを修正するには、DataGrid1を接続するItemDeleted、ItemUpdatedおよびItemIsertedのイベントのDetailsView1にハンドラーを追加する必要があります更新されたデータ:
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バージョンを使用しました。