SQLには、データを取得するSELECT文、データを変更するINSERT/UPDATE/DELET文があります。
今回はデータ取得に特化したメソッドと、データ変更に特化したメソッドを作成します。
VB.NET 編
SQLiteでデータを取得するには、いくつか方法がありますが、データアダプタを使用したメソッドを作成することとします。
SQLiteのデータアダプタは、SQLiteDataAdapterクラスを使用します。
SQLDataAdapterを使用してデータを取得するには、最初にインスタンスを生成します。
SQLDataAdapterのコンストラクタには、実行するSQL文とコネクションオブジェクトを指定します。
また、実行したSQLのデータは Fillメソッドを使用して DataTableに格納します。
以下は、SELECT文を実行して データが収められた DataTableを返却する ExecuteQuery と名付けたメソッドです。
' SQL(SELECT)の実行
Protected Function ExecuteQuery(strSQL As String) As DataTable
Dim adapter = New SQLiteDataAdapter()
Dim dtTbl As New DataTable()
Try
If _conn.State <> ConnectionState.Open Then Return dtTbl
adapter = New SQLiteDataAdapter(strSQL, _conn)
'SQLを実行して結果をdtTblに保存
adapter.Fill(dtTbl)
Catch sqlex As SQLiteException
Throw New Exception(sqlex.Message)
Catch ex As Exception
Throw New Exception(ex.Message)
End Try
Return dtTbl
End Function
今度は、データを変更する INSERT/UPDATE/DELETEに対応するメソッドを作成します。
SQLiteでは、SQLiteCommandクラスが持つExecuteNonQueryメソッドを使用します。
以下は、 ExecuteNonQueryを実行するメソッドで、実行に成功すると変更のあったレコード件数を返却します。
_failureCount、_successCountは、これまでに実行して変更のあった件数を保持するクラスフィールドです。
' SQL(INSERT/UPDATE/DELETEの実行)
Protected Function ExecuteNonQuery(strSQL As String) As Integer
Dim count As Integer = -1
Try
If _conn.State <> ConnectionState.Open Then Return count
_cmd.CommandText = strSQL
count = _cmd.ExecuteNonQuery()
_successCount += count
Catch sqlex As SQLiteException
_failureCount += Math.Abs(count)
Throw New Exception(sqlex.Message)
Catch ex As Exception
Throw New Exception(ex.Message)
End Try
Return count
End Function
最後に、成功した総数と失敗した総数を取得できるプロパティを以下のように準備します。
' DataProcessing内で実行したSQL(INSERT/UPDATE/DELETE)の失敗総数
Public ReadOnly Property FailureCount() As Integer
Get
Return _failureCount
End Get
End Property
' DataProcessing内で実行したSQL(INSERT/UPDATE/DELETE)の成功総数
Public ReadOnly Property SuccessCount() As Integer
Get
Return _successCount
End Get
End Property
次回はトランザクション処理を実装します。
C# 編
SQLiteでデータを取得するには、いくつか方法がありますが、データアダプタを使用したメソッドを作成することとします。
SQLiteのデータアダプタは、SQLiteDataAdapterクラスを使用します。
SQLDataAdapterを使用してデータを取得するには、最初にインスタンスを生成します。
SQLDataAdapterのコンストラクタには、実行するSQL文とコネクションオブジェクトを指定します。
また、実行したSQLのデータは Fillメソッドを使用して DataTableに格納します。
以下は、SELECT文を実行して データが収められた DataTableを返却する ExecuteQuery と名付けたメソッドです。
// SQL(SELECT)の実行
protected DataTable ExecuteQuery(string strSQL)
{
SQLiteDataAdapter adapter = new SQLiteDataAdapter();
DataTable dtTbl = new DataTable();
try
{
if (_conn.State != ConnectionState.Open) return dtTbl;
adapter = new SQLiteDataAdapter(strSQL, _conn);
// SQLを実行して結果をdtTblに保存
adapter.Fill(dtTbl);
}
catch (SQLiteException sqlex)
{
}
catch (Exception ex)
{
}
return dtTbl;
}
今度は、データを変更する INSERT/UPDATE/DELETEに対応するメソッドを作成します。
SQLiteでは、SQLiteCommandクラスが持つExecuteNonQueryメソッドを使用します。
以下は、 ExecuteNonQueryを実行するメソッドで、実行に成功すると変更のあったレコード件数を返却します。
_failureCount、_successCountは、これまでに実行して変更のあった件数を保持するクラスフィールドです。
// ExecuteNonQueryの失敗総件数
private int _failureCount;
// ExecuteNonQueryの成功総件数
private int _successCount;
// SQL(INSERT/UPDATE/DELETEの実行)
protected int ExecuteNonQuery(string strSQL)
{
int count = -1;
try
{
if (_conn.State != System.Data.ConnectionState.Open) return count;
_cmd.CommandText = strSQL;
count = _cmd.ExecuteNonQuery();
_successCount += count;
}
catch (SQLiteException sqlex)
{
_failureCount += Math.Abs(count);
throw new Exception(sqlex.Message);
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
return count;
}
最後に、成功した総数と失敗した総数を取得できるプロパティを以下のように準備します。
// DataProcessing内で実行したSQL(INSERT/UPDATE/DELETE)の失敗総数
public int FailureCount
{
get { return _failureCount; }
}
// DataProcessing内で実行したSQL(INSERT/UPDATE/DELETE)の成功総数
public int SuccessCount
{
get { return _successCount; }
}
次回はトランザクション処理を実装します。

コメント