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; } }
次回はトランザクション処理を実装します。
コメント