.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バージョンを使用しました。

Source: https://habr.com/ru/post/J56694/


All Articles