public object ExecuteScalar(SqlTemplate sqlTemplate) { lock (_dbLocker) { SqliteSqlTemplate wrapper = GetSqliteSqlTemplate(sqlTemplate); string sqlExpression = wrapper.SqlExpression; using (var conn = new SQLiteConnection(_connectionString)) { conn.SetPassword(_password); conn.Open(); using (SQLiteCommand cmd = new SQLiteCommand(sqlExpression, conn)) { if (wrapper.Params != null && wrapper.Params.Length > 0) { cmd.Parameters.AddRange(wrapper.Params.ToArray()); } return(cmd.ExecuteScalar()); } } } }
private SqliteSqlTemplate GetSqliteSqlTemplate(SqlTemplate sqlTemplate) { if (sqlTemplate == null || string.IsNullOrWhiteSpace(sqlTemplate.SqlExpression)) { // no need to execute value return(null); } SqliteSqlTemplate result = new SqliteSqlTemplate(); result.SqlExpression = sqlTemplate.SqlExpression; List <SQLiteParameter> newParams = new List <SQLiteParameter>(); if (string.IsNullOrWhiteSpace(sqlTemplate.SqlExpression) || sqlTemplate.Params == null || sqlTemplate.Params.Length == 0) { return(result); } string sqlExpression = sqlTemplate.SqlExpression; String[] sqlPieces = sqlExpression.Split('?'); sqlExpression = string.Join("", sqlPieces.Select((d, i) => d + (i == sqlPieces.Length - 1 ? "" : "{" + i + "}"))); for (int i = 0; i < sqlTemplate.Params.Length; i++) { object value = sqlTemplate.Params[i]; string name = string.Format("p{0}", i); SQLiteParameter sQLiteParameter = new SQLiteParameter(name, value); newParams.Add(sQLiteParameter); sqlExpression = sqlExpression.Replace("{" + i + "}", "@" + name); } result.SqlExpression = sqlExpression; result.Params = newParams.ToArray(); return(result); }