+++ /dev/null
-using System.Collections.Generic;\r
-using System.Data.SQLite;\r
-using com.andoutomo.kybernetes.control;\r
-\r
-namespace com.andoutomo.kybernetes.data.connection\r
-{\r
- delegate void TransitData(SQLiteDataReader reader);\r
-\r
- abstract class DBConnection\r
- {\r
- internal abstract string targetDbFile();\r
-\r
- /// <summary>\r
- /// データの参照を行う。\r
- /// </summary>\r
- /// <param name="sql">SQL</param>\r
- /// <param name="parameters">追加パラメータ</param>\r
- /// <param name="transition">delegateロジック。呼び出し元で参照結果を加工するメソッド</param>\r
- internal void selectData(string sql, List<object> parameters, TransitData transition)\r
- {\r
- KybernetesLogger.Log.debug("SQL:" + sql);\r
- try\r
- {\r
- using (var conn = new SQLiteConnection("Data Source=" + targetDbFile()))\r
- {\r
- conn.Open();\r
- using (SQLiteCommand command = conn.CreateCommand())\r
- {\r
- command.CommandText = sql;\r
- foreach (object arg in parameters)\r
- {\r
- SQLiteParameter param = command.CreateParameter();\r
- param.Value = arg;\r
- command.Parameters.Add(param);\r
- }\r
- using (SQLiteDataReader reader = command.ExecuteReader())\r
- {\r
- transition(reader);\r
- }\r
- }\r
- conn.Close();\r
- }\r
- }\r
- catch (SQLiteException se)\r
- {\r
- throw new KybernetesApplicationException(se);\r
-\r
- }\r
- }\r
- internal void selectData(string sql, TransitData transition)\r
- {\r
- selectData(sql,new List<object>(),transition);\r
- }\r
- \r
- /// <summary>\r
- /// データの更新を行う。\r
- /// </summary>\r
- /// <param name="sql">更新用SQL</param>\r
- /// <param name="parameters">更新パラメータ</param>\r
- /// <returns>成功すればtrue、失敗の場合はFalse</returns>\r
- internal bool updateData(string sql, List<object> parameters)\r
- {\r
- KybernetesLogger.Log.debug("SQL:" + sql);\r
- try\r
- {\r
- using (var conn = new SQLiteConnection("Data Source=" + targetDbFile()))\r
- {\r
- conn.Open();\r
- using (SQLiteTransaction sqlt = conn.BeginTransaction())\r
- {\r
- using (SQLiteCommand command = conn.CreateCommand())\r
- {\r
- command.CommandText = sql;\r
- foreach (object arg in parameters)\r
- {\r
- SQLiteParameter param = command.CreateParameter();\r
- param.Value = arg;\r
- command.Parameters.Add(param);\r
- }\r
- int result = command.ExecuteNonQuery();\r
- }\r
- sqlt.Commit();\r
- }\r
- conn.Close();\r
- }\r
- return true;\r
- }\r
- catch (SQLiteException se)\r
- {\r
- KybernetesLogger.Log.error(se.StackTrace);\r
- return false;\r
- }\r
- }\r
- internal bool updateData(string sql)\r
- {\r
- return updateData(sql, new List<object>());\r
- }\r
- /// <summary>\r
- /// データの更新を行う。リストを使用して一気に実施する。\r
- /// </summary>\r
- /// <param name="updateList">更新対象リスト</param>\r
- /// <returns></returns>\r
- internal bool updateData(List<MultiSQLRunnningBean> updateList)\r
- {\r
- try\r
- {\r
- using (var conn = new SQLiteConnection("Data Source=" + targetDbFile()))\r
- {\r
- conn.Open();\r
- using (SQLiteTransaction sqlt = conn.BeginTransaction())\r
- {\r
- foreach (MultiSQLRunnningBean bean in updateList)\r
- {\r
- KybernetesLogger.Log.debug("SQL:" + bean.SQL);\r
- using (SQLiteCommand command = conn.CreateCommand())\r
- {\r
- command.CommandText = bean.SQL;\r
- foreach (object arg in bean.Parameters)\r
- {\r
- SQLiteParameter param = command.CreateParameter();\r
- param.Value = arg;\r
- command.Parameters.Add(param);\r
- }\r
- int result = command.ExecuteNonQuery();\r
- }\r
- }\r
- sqlt.Commit();\r
- }\r
- conn.Close();\r
- }\r
- return true;\r
- }\r
- catch (SQLiteException se)\r
- {\r
- KybernetesLogger.Log.error(se.StackTrace);\r
- return false;\r
- }\r
- }\r
-\r
- }\r
- /// <summary>\r
- /// 複数連続SQL実行時に、同一トランザクション内で実施できるようにデータを複数格納する。\r
- /// </summary>\r
- internal class MultiSQLRunnningBean\r
- {\r
- private string sql;\r
- private List<object> parameters;\r
- internal string SQL\r
- {\r
- get { return sql; }\r
- }\r
- internal List<object> Parameters\r
- {\r
- get { return parameters; }\r
- }\r
-\r
- internal MultiSQLRunnningBean(string _sql, List<object> _parameters)\r
- {\r
- this.sql = _sql;\r
- this.parameters = _parameters;\r
- }\r
- }\r
-}\r