C# Language
C#でSQLiteを使う
サーチ…
C#でSQLiteを使って簡単なCRUDを作成する
まず、アプリケーションにSQLiteサポートを追加する必要があります。それを行うには2つの方法があります
- SQLiteダウンロードページからあなたのシステムに合ったDLLをダウンロードし、プロジェクトに手動で追加してください
- NuGet経由でSQLite依存関係を追加する
私たちはそれを第2の方法でやります
最初にNuGetメニューを開きます
System.Data.SQLiteを検索し、それを選択してInstallを押します
パッケージマネージャコンソールからインストールすることもできます。
PM> Install-Package System.Data.SQLite
または、コア機能のみ
PM> Install-Package System.Data.SQLite.Core
それはダウンロード用ですので、コーディングに入ることができます。
まず、このテーブルを使って簡単なSQLiteデータベースを作成し、それをファイルとしてプロジェクトに追加します
CREATE TABLE User(
Id INTEGER PRIMARY KEY AUTOINCREMENT,
FirstName TEXT NOT NULL,
LastName TEXT NOT NULL
);
また、あなたのニーズに応じて常に 最新のコピーが あれば 、 コピーの出力ディレクトリプロパティをコピーに設定することを忘れないでください
Userというクラスを作成します。これはデータベースの基本エンティティになります
private class User
{
public string FirstName { get; set; }
public string Lastname { get; set; }
}
クエリの実行には、データベースに挿入、更新、または削除するための2つのメソッドを記述します
private int ExecuteWrite(string query, Dictionary<string, object> args)
{
int numberOfRowsAffected;
//setup the connection to the database
using (var con = new SQLiteConnection("Data Source=test.db"))
{
con.Open();
//open a new command
using (var cmd = new SQLiteCommand(query, con))
{
//set the arguments given in the query
foreach (var pair in args)
{
cmd.Parameters.AddWithValue(pair.Key, pair.Value);
}
//execute the query and get the number of row affected
numberOfRowsAffected = cmd.ExecuteNonQuery();
}
return numberOfRowsAffected;
}
}
もう1つはデータベースからの読み取り用です
private DataTable Execute(string query)
{
if (string.IsNullOrEmpty(query.Trim()))
return null;
using (var con = new SQLiteConnection("Data Source=test.db"))
{
con.Open();
using (var cmd = new SQLiteCommand(query, con))
{
foreach (KeyValuePair<string, object> entry in args)
{
cmd.Parameters.AddWithValue(entry.Key, entry.Value);
}
var da = new SQLiteDataAdapter(cmd);
var dt = new DataTable();
da.Fill(dt);
da.Dispose();
return dt;
}
}
}
CRUDメソッドに入る
ユーザーを追加する
private int AddUser(User user)
{
const string query = "INSERT INTO User(FirstName, LastName) VALUES(@firstName, @lastName)";
//here we are setting the parameter values that will be actually
//replaced in the query in Execute method
var args = new Dictionary<string, object>
{
{"@firstName", user.FirstName},
{"@lastName", user.Lastname}
};
return ExecuteWrite(query, args);
}
ユーザーの編集
private int EditUser(User user)
{
const string query = "UPDATE User SET FirstName = @firstName, LastName = @lastName WHERE Id = @id";
//here we are setting the parameter values that will be actually
//replaced in the query in Execute method
var args = new Dictionary<string, object>
{
{"@id", user.Id},
{"@firstName", user.FirstName},
{"@lastName", user.Lastname}
};
return ExecuteWrite(query, args);
}
ユーザーの削除
private int DeleteUser(User user)
{
const string query = "Delete from User WHERE Id = @id";
//here we are setting the parameter values that will be actually
//replaced in the query in Execute method
var args = new Dictionary<string, object>
{
{"@id", user.Id}
};
return ExecuteWrite(query, args);
}
Id
ユーザーを取得する
private User GetUserById(int id)
{
var query = "SELECT * FROM User WHERE Id = @id";
var args = new Dictionary<string, object>
{
{"@id", id}
};
DataTable dt = ExecuteRead(query, args);
if (dt == null || dt.Rows.Count == 0)
{
return null;
}
var user = new User
{
Id = Convert.ToInt32(dt.Rows[0]["Id"]),
FirstName = Convert.ToString(dt.Rows[0]["FirstName"]),
Lastname = Convert.ToString(dt.Rows[0]["LastName"])
};
return user;
}
クエリの実行
using (SQLiteConnection conn = new SQLiteConnection(@"Data Source=data.db;Pooling=true;FailIfMissing=false"))
{
conn.Open();
using (SQLiteCommand cmd = new SQLiteCommand(conn))
{
cmd.CommandText = "query";
using (SqlDataReader dr = cmd.ExecuteReader())
{
while(dr.Read())
{
//do stuff
}
}
}
}
注意 : FailIfMissing
をtrueに設定すると、 data.db
ファイルが作成されます。ただし、ファイルは空になります。したがって、必要なテーブルを再作成する必要があります。
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow