コード例 #1
0
ファイル: HomeController.cs プロジェクト: ttufekci/DashCore
        public async Task <IActionResult> AddDataPost(string connectionName, string tableName, IEnumerable <string> dataFields)
        {
            var tableDataVM = new TableDataVM
            {
                TableList      = await _util.GetTableList(connectionName),
                TableName      = tableName,
                ConnectionName = connectionName
            };

            tableDataVM.TableGroups = await _util.GetTableGroups(tableDataVM.TableList);

            var customConnection = await _context.CustomConnection.SingleOrDefaultAsync(x => x.Name == connectionName);

            var connectionString = Util.GetConnectionString(customConnection);

            var columnList    = new List <TableColumnInfo>();
            var tableDataDict = new PagedData {
                Data = new Dictionary <int, Row>()
            };

            columnList = await _util.GetColumnInfo(connectionName, tableName);

            var tablemetadata = await _util.GetTableMetadata(connectionName, tableName);

            tableDataVM.ColumnList    = columnList;
            tableDataVM.TableDataList = tableDataDict;
            tableDataVM.SequenceName  = tablemetadata.SequenceName;

            var columnListStmt = "";
            var builderColumn  = new System.Text.StringBuilder();

            builderColumn.Append(columnListStmt);

            foreach (var column in columnList)
            {
                builderColumn.Append(column.Name + ", ");
            }
            columnListStmt = builderColumn.ToString();

            columnListStmt = columnListStmt.TrimEnd(' ').TrimEnd(',');

            var valueListStmt = "";

            var dataFieldArray = dataFields.ToArray();
            var builder        = new System.Text.StringBuilder();

            builder.Append(valueListStmt);

            for (int i = 0; i < dataFieldArray.Count(); i++)
            {
                if (columnList[i].IsPrimaryKey && tableDataVM.SequenceName != "undefined")
                {
                    builder.Append(tablemetadata.SequenceName + ".NEXTVAL, ");
                }
                else
                {
                    if (columnList[i].DataType.Equals("DATE"))
                    {
                        builder.Append("TO_DATE('" + dataFieldArray[i] + "','dd.mm.yyyy HH24:MI:SS'), ");
                    }
                    else
                    {
                        builder.Append("'" + dataFieldArray[i] + "', ");
                    }
                }
            }

            valueListStmt = builder.ToString();

            valueListStmt = valueListStmt.TrimEnd(' ').TrimEnd(',');

            var insertSqlStmt = "insert into " + tableName + " (" + columnListStmt + ") values (" + valueListStmt + ")";

            var sessionHistorySql = new SessionSqlHistory
            {
                EventDate    = DateTime.Now,
                SqlText      = insertSqlStmt,
                BasicSqlText = insertSqlStmt
            };

            using (var oconn = new OracleConnection(connectionString))
            {
                oconn.Open();
                using (var cmd = new OracleCommand
                {
                    Connection = oconn,
                    CommandText = insertSqlStmt,
                    CommandType = CommandType.Text
                })
                {
                    var result = cmd.ExecuteNonQuery();
                }
            }

            await _context.SessionSqlHistory.AddAsync(sessionHistorySql);

            await _context.SaveChangesAsync();

            ViewBag.Message = "Added successfully";

            return(View("AddData", tableDataVM));
        }
コード例 #2
0
ファイル: EditController.cs プロジェクト: ttufekci/DashCore
        public async Task <IActionResult> EditDataPost(string connectionName, string tableName, IEnumerable <string> dataFields, IEnumerable <string> oldDataFields, string tableColumnInfosJson)
        {
            var tableDataVM = new TableDataVM
            {
                TableList      = await _util.GetTableList(connectionName),
                TableName      = tableName,
                ConnectionName = connectionName
            };

            var customConnection = await _context.CustomConnection.SingleOrDefaultAsync(x => x.Name == connectionName);

            var connectionString = Util.GetConnectionString(customConnection);

            tableDataVM.TableGroups = await _util.GetTableGroups(tableDataVM.TableList);

            var columnList    = new List <TableColumnInfo>();
            var tableDataDict = new PagedData {
                Data = new Dictionary <int, Row>()
            };

            columnList = await _util.GetColumnInfo(connectionName, tableName);

            var tablemetadata = await _util.GetTableMetadata(connectionName, tableName);

            tableDataVM.ColumnList    = columnList;
            tableDataVM.TableDataList = tableDataDict;
            tableDataVM.SequenceName  = tablemetadata.SequenceName;

            var dataFieldArray = dataFields.ToArray();

            var oldDataFieldArray = oldDataFields.ToArray();

            var primaryKey = GetPrimaryKey(columnList, dataFieldArray);

            var whereColumnListStmt = "";

            if (string.IsNullOrEmpty(primaryKey))
            {
                var oldColumnList = JsonConvert.DeserializeObject <List <TableColumnInfo> >(tableColumnInfosJson).ToArray();
                var builderWhere  = new System.Text.StringBuilder();
                builderWhere.Append(whereColumnListStmt);

                for (int j = 0; j < columnList.Count(); j++)
                {
                    builderWhere.Append(columnList[j].Name + "='" + oldColumnList[j].Value + "' and ");
                }
                whereColumnListStmt = builderWhere.ToString();

                whereColumnListStmt = whereColumnListStmt.TrimEnd(' ', 'd', 'n', 'a');
            }

            var columnListStmt = "";
            var builder        = new System.Text.StringBuilder();

            builder.Append(columnListStmt);

            for (int j = 0; j < columnList.Count(); j++)
            {
                if (columnList[j].IsPrimaryKey)
                {
                    continue;
                }

                if (columnList[j].DataType.Equals("DATE"))
                {
                    builder.Append(columnList[j].Name + "=TO_DATE('" + dataFieldArray[j] + "','dd.mm.yyyy HH24:MI:SS'), ");;
                }
                else
                {
                    builder.Append(columnList[j].Name + "='" + dataFieldArray[j] + "', ");;
                }
            }

            columnListStmt = builder.ToString();

            columnListStmt = columnListStmt.TrimEnd(' ').TrimEnd(',');

            var updateSqlStmt = "";

            var whereStmt = Util.FindUniqueRowWhereStmt(primaryKey, columnList);

            updateSqlStmt = string.IsNullOrEmpty(primaryKey) ? "update " + tableName + " set " + columnListStmt + " where " + whereColumnListStmt : "update " + tableName + " set " + columnListStmt + " where " + whereStmt;

            var sessionHistorySql = new SessionSqlHistory
            {
                EventDate    = DateTime.Now,
                SqlText      = updateSqlStmt,
                BasicSqlText = updateSqlStmt
            };

            using (var oconn = new OracleConnection(connectionString))
            {
                oconn.Open();
                using (var cmd = new OracleCommand
                {
                    Connection = oconn,
                    CommandText = updateSqlStmt,
                    CommandType = CommandType.Text
                })
                {
                    var result = cmd.ExecuteNonQuery();
                }
            }

            await _context.SessionSqlHistory.AddAsync(sessionHistorySql);

            await _context.SaveChangesAsync();

            var tableColumnInfos = new List <TableColumnInfo>();

            for (int j = 0; j < columnList.Count(); j++)
            {
                var tableColumnInfo = new TableColumnInfo
                {
                    DataType     = columnList[j].DataType,
                    IsPrimaryKey = columnList[j].IsPrimaryKey,
                    Name         = columnList[j].Name,
                    Value        = dataFieldArray[j],
                    OldValue     = columnList[j].OldValue
                };

                tableColumnInfos.Add(tableColumnInfo);
            }

            var newTableColumnInfosJson = JsonConvert.SerializeObject(tableColumnInfos);

            tableDataVM.RowData = await _util.GetRowData(connectionName, tableName, primaryKey, newTableColumnInfosJson);

            tableDataVM.TableColumnInfosJson = newTableColumnInfosJson;

            ViewBag.Message = "Successfully saved";

            return(View(nameof(EditData), tableDataVM));
        }
コード例 #3
0
        public async Task <Row> GetRowData(string connectionName, string tableName, string primaryKey, string tableColumnInfosJson)
        {
            var customConnection = await _context.CustomConnection.SingleOrDefaultAsync(x => x.Name == connectionName);

            var connectionString = Util.GetConnectionString(customConnection);

            var columnList = await GetColumnInfo(connectionName, tableName);

            var sqlStmt = "";

            if (string.IsNullOrEmpty(primaryKey))
            {
                var whereColumnListStmt = "";

                var oldColumnList = JsonConvert.DeserializeObject <List <TableColumnInfo> >(tableColumnInfosJson).ToArray();
                var builder       = new System.Text.StringBuilder();
                builder.Append(whereColumnListStmt);

                for (int j = 0; j < columnList.Count(); j++)
                {
                    if (string.IsNullOrEmpty(oldColumnList[j].Value))
                    {
                        builder.Append(columnList[j].Name + " is null and ");
                    }
                    else
                    {
                        builder.Append(columnList[j].Name + "='" + oldColumnList[j].Value + "' and ");
                    }
                }
                whereColumnListStmt = builder.ToString();

                whereColumnListStmt = whereColumnListStmt.TrimEnd(' ', 'd', 'n', 'a');

                sqlStmt = "select * from " + tableName + " where " + whereColumnListStmt;
            }
            else
            {
                var whereStmt = FindUniqueRowWhereStmt(primaryKey, columnList);

                sqlStmt = "select * from " + tableName + " where " + whereStmt;
            }

            var sessionSqlHistory = new SessionSqlHistory
            {
                EventDate    = DateTime.Now,
                SqlText      = sqlStmt,
                BasicSqlText = sqlStmt
            };

            var row = new Row();

            using (var oconn = new OracleConnection(connectionString))
            {
                oconn.Open();

                using (var cmd = new OracleCommand
                {
                    Connection = oconn,
                    CommandText = sqlStmt,
                    CommandType = CommandType.Text
                })
                {
                    var dr = cmd.ExecuteReader();

                    while (dr.Read())
                    {
                        var rowData = new List <TableColumnInfo>();

                        for (int i = 0; i < columnList.Count; i++)
                        {
                            var columnInfo = columnList[i];

                            if (dr.GetValue(i) != DBNull.Value)
                            {
                                columnInfo.Value    = dr.GetValue(i).ToString();
                                columnInfo.OldValue = dr.GetValue(i).ToString();
                            }
                            else
                            {
                                columnInfo.Value = "";
                            }

                            if (columnInfo.IsPrimaryKey)
                            {
                                row.PrimaryKey = string.IsNullOrEmpty(row.PrimaryKey) ? columnInfo.Value : row.PrimaryKey + ";" + columnInfo.Value;
                            }

                            if (!string.IsNullOrEmpty(columnInfo.Value) && columnInfo.IsForeignKey)
                            {
                                var foreignTable      = columnInfo.ForeignTable;
                                var findForeignRowSql = "select * from " + foreignTable + " where " + columnInfo.ForeignTableKeyColumn + " = '" + columnInfo.Value + "'";
                                var foreignDesc       = await FindForeignDescription(oconn, connectionName, foreignTable, columnInfo.ForeignTableKeyColumn, columnInfo.Value);

                                columnInfo.ForeignDescription = foreignDesc.Trim();
                            }

                            rowData.Add(columnInfo);
                        }

                        row.TableColumnInfos = rowData;

                        break;
                    }
                }
            }

            await _context.SessionSqlHistory.AddAsync(sessionSqlHistory);

            await _context.SaveChangesAsync();

            return(row);
        }
コード例 #4
0
ファイル: EditController.cs プロジェクト: ttufekci/DashCore
        public async Task <JsonResult> DeleteRowAsync(string connectionName, string tableName, string id, int page, int tableRowIndx, string searchFields)
        {
            var customConnection = await _context.CustomConnection.SingleOrDefaultAsync(x => x.Name == connectionName);

            var connectionString = Util.GetConnectionString(customConnection);

            var tableDataDict = new PagedData {
                Data = new Dictionary <int, Row>()
            };

            var searchFieldsArray = JsonConvert.DeserializeObject <List <SearchFieldInfo> >(searchFields);

            var columnList = await _util.GetColumnInfo(connectionName, tableName);

            tableDataDict = searchFieldsArray.Any() ? await _util.GetTableDataListSearch(connectionName, tableName, 0, searchFieldsArray[0].Name, searchFieldsArray[0].Value) : await _util.GetTableDataList(columnList, connectionName, tableName, page);

            var row = tableDataDict.Data[tableRowIndx];
            var tableColumnInfosJson = row.TableColumnInfosJson;

            var whereStmt = Util.FindUniqueRowWhereStmt(id, columnList);

            var deleteSqlStmt = "delete " + tableName + " where " + whereStmt;

            if (string.IsNullOrEmpty(id))
            {
                var whereColumnListStmt = "";

                var oldColumnList = JsonConvert.DeserializeObject <List <TableColumnInfo> >(tableColumnInfosJson).ToArray();
                var builder       = new System.Text.StringBuilder();
                builder.Append(whereColumnListStmt);

                for (int j = 0; j < oldColumnList.Count(); j++)
                {
                    builder.Append(oldColumnList[j].Name + "='" + oldColumnList[j].Value + "' and ");
                }
                whereColumnListStmt = builder.ToString();

                whereColumnListStmt = whereColumnListStmt.TrimEnd(' ', 'd', 'n', 'a');

                deleteSqlStmt = "delete " + tableName + " where " + whereColumnListStmt;
            }

            var sessionHistorySql = new SessionSqlHistory
            {
                EventDate    = DateTime.Now,
                SqlText      = deleteSqlStmt,
                BasicSqlText = deleteSqlStmt
            };

            using (var oconn = new OracleConnection(connectionString))
            {
                oconn.Open();
                using (var cmd = new OracleCommand
                {
                    Connection = oconn,
                    CommandText = deleteSqlStmt,
                    CommandType = CommandType.Text
                })
                {
                    var result = cmd.ExecuteNonQuery();
                }
            }

            await _context.SessionSqlHistory.AddAsync(sessionHistorySql);

            await _context.SaveChangesAsync();

            return(Json(true));
        }
コード例 #5
0
        public async Task <PagedData> GetTableDataListSearch(string connectionName, string tableName, int page, int pageSize, List <SearchFieldInfo> searchFields, string sortColumn, string sortDir, string sortColumnDataType)
        {
            var customConnection = await _context.CustomConnection.SingleOrDefaultAsync(x => x.Name == connectionName);

            var connectionString = Util.GetConnectionString(customConnection);

            var columnList = await GetColumnInfo(connectionName, tableName);

            string whereStmt = "";

            foreach (var field in searchFields)
            {
                whereStmt += field.Name + " like '" + field.Value + "%' and ";
            }

            if (!string.IsNullOrEmpty(whereStmt))
            {
                whereStmt = " where " + whereStmt.TrimEnd(' ', 'a', 'n', 'd', ' ');
            }

            var orderStmt = "";

            if (!string.IsNullOrEmpty(sortColumn))
            {
                orderStmt = " order by " + sortColumn + " " + sortDir;
            }
            else
            {
                orderStmt = " order by ROWID ";
            }

            var tableDataListCountSql = @"select count(*) from " + tableName + whereStmt;

            var pagedData = new PagedData
            {
                Page     = page,
                PageSize = pageSize
            };

            decimal count = 0;

            var belowRowIndex = 1;
            var topRowIndex   = 1 * pagedData.PageSize;

            if (page > 0)
            {
                belowRowIndex = page * pagedData.PageSize + 1;
                topRowIndex   = (page + 1) * pagedData.PageSize;
            }

            var tableDataListSql = @"select * from ( " +
                                   "select mt.*, " +
                                   "row_number() over (" + orderStmt + ") rn " +
                                   "from " + tableName + @" mt " + whereStmt + ") " +
                                   "where rn between " + belowRowIndex + " and " + topRowIndex + (string.IsNullOrEmpty(orderStmt) ? " order by rn" : "");

            var sessionSqlHistory = new SessionSqlHistory
            {
                EventDate    = DateTime.Now,
                SqlText      = tableDataListSql,
                BasicSqlText = "select * from " + tableName + whereStmt + (string.IsNullOrEmpty(orderStmt) ? "" : orderStmt)
            };

            var myRowDict = new Dictionary <int, Row>();

            using (var oconn = new OracleConnection(connectionString))
            {
                oconn.Open();
                using (var cmdCount = new OracleCommand
                {
                    Connection = oconn,
                    CommandText = tableDataListCountSql,
                    CommandType = CommandType.Text
                })
                {
                    count = (decimal)cmdCount.ExecuteScalar();

                    oconn.Open();
                    using (var cmd = new OracleCommand
                    {
                        Connection = oconn,
                        CommandText = tableDataListSql,
                        CommandType = CommandType.Text
                    })
                    {
                        var dr = cmd.ExecuteReader();

                        var viewRowId = 0;

                        while (dr.Read())
                        {
                            var row = new Row();

                            var rowData = new List <TableColumnInfo>();

                            for (int i = 0; i < columnList.Count; i++)
                            {
                                var columnInfo = columnList[i];

                                var tableColumnInfo = new TableColumnInfo
                                {
                                    DataType     = columnInfo.DataType,
                                    IsPrimaryKey = columnInfo.IsPrimaryKey,
                                    Name         = columnInfo.Name
                                };

                                if (dr.GetValue(i) != DBNull.Value)
                                {
                                    tableColumnInfo.Value = dr.GetValue(i).ToString();
                                }
                                else
                                {
                                    tableColumnInfo.Value = "";
                                }

                                if (tableColumnInfo.IsPrimaryKey)
                                {
                                    row.PrimaryKey = string.IsNullOrEmpty(row.PrimaryKey) ? tableColumnInfo.Value : row.PrimaryKey + ";" + tableColumnInfo.Value;
                                }

                                rowData.Add(tableColumnInfo);
                            }

                            row.TableColumnInfos     = rowData;
                            row.TableColumnInfosJson = JsonConvert.SerializeObject(rowData);

                            myRowDict.Add(viewRowId++, row);
                        }
                    }
                }
            }

            await _context.SessionSqlHistory.AddAsync(sessionSqlHistory);

            await _context.SaveChangesAsync();

            pagedData.Data  = myRowDict;
            pagedData.Total = Convert.ToInt32(count);

            pagedData.PageCount = Convert.ToInt32(Math.Ceiling(Convert.ToDouble(count) / (Convert.ToDouble(pagedData.PageSize))));

            return(pagedData);
        }