Exemplo n.º 1
0
            private void LoadData(NpgsqlDataReader reader)
            {
                Items = new List <OHResultItem>();

                while (reader.Read())
                {
                    OHResultItem item = new OHResultItem();

                    item.OperationID = int.Parse(reader["OperationID"].ToString());

                    item.PropertyName  = reader["PropertyName"].ToString();
                    item.PropertyValue = reader["PropertyValue"].ToString();
                    item.PropertyType  = reader["PropertyType"].ToString();

                    item.ObjectName = reader["ObjectName"].ToString();
                    item.ObjectType = reader["ObjectType"].ToString();

                    item.TimeStamp = DateTime.Parse(reader["LastModified"].ToString());
                    item.User      = reader["User"].ToString();
                    //                Guid.NewGuid().ToString();
                    item.Level = reader["Level"].ToString();

                    Items.Add(item);
                }
            }
Exemplo n.º 2
0
            public DataTable AsDataTable()
            {
                var table = new DataTable();

                var list       = AsList();
                var columns    = list.Select(p => p.PropertyName).Distinct();
                var operations = list.Select(p => p.OperationID).Distinct();

                foreach (var col in columns)
                {
                    table.Columns.Add(col, typeof(string));
                }
                table.Columns.Add("User", typeof(string));
                table.Columns.Add("TimeStamp", typeof(string));


                if (Merge)
                {
                    DataRow nrow = table.NewRow();
                    foreach (var property in columns)
                    {
                        nrow[property] = list.Find(p => p.PropertyName == property).PropertyValue;
                    }

                    OHResultItem tItem = list.Find(p => p.TimeStamp == list.Max(ml => ml.TimeStamp));
                    nrow ["User"]     = tItem.User;
                    nrow["TimeStamp"] = tItem.TimeStamp;

                    table.Rows.Add(nrow);
                }
                else
                {
                    foreach (var operation in operations)
                    {
                        DataRow nrow = table.NewRow();

                        var changes = list.FindAll(p => p.OperationID == operation).ToList();
                        foreach (var change in changes)
                        {
                            nrow[change.PropertyName] = change.PropertyValue;
                        }

                        OHResultItem tItem = list.Find(p => p.OperationID == operation);
                        nrow["User"]      = tItem.User;
                        nrow["TimeStamp"] = tItem.TimeStamp;

                        table.Rows.Add(nrow);
                    }
                }


                return(table);
            }
Exemplo n.º 3
0
        public override void SaveObject(OHInfo objInfo, OHTarget target)
        {
            OHSqlClient         sqlClient        = new OHSqlClient(target);
            var                 keyPropertyValue = objInfo.LoggableProperties.Find(p => p.Name.Equals(objInfo.KeyPropertyName)).Value;
            List <OHResultItem> lastVersion      = sqlClient.GetLastVersion(objInfo.ObjectType, keyPropertyValue).AsList();


            DbProviderFactory dbFact = DbProviderFactories.GetFactory(target.DbProviderInvariantName);
            NpgsqlConnection  conn   = new NpgsqlConnection(target.ConnectionString);


            NpgsqlCommand comm = new NpgsqlCommand();

            comm             = conn.CreateCommand();
            comm.CommandType = System.Data.CommandType.Text;

            string script = string.Empty;

            script += "DO $$ \n";
            script += @" DECLARE OperationID integer; ";
            script += @"DECLARE ObjectLogID integer; ";
            script += "BEGIN \n";
            script += @"INSERT INTO ""Operations""(""User"", ""Guid"", ""PcName"", ""TimeStamp"", ""KeyValue"") VALUES('YEK', '" + Guid.NewGuid() + "', '" + Dns.GetHostName() + "', now(), '" + keyPropertyValue + "') RETURNING \"OperaionID\" INTO OperationID; \n";
            script += @"ObjectLogID := (SELECT ""ObjectLogID"" FROM ""ObjectLogs"" WHERE ""Name"" LIKE '" + objInfo.ObjectName + "' AND \"ObjectType\" LIKE '" + objInfo.ObjectType.ToString() + "' LIMIT 1); \n";
            script += @"IF ObjectLogID ISNULL THEN ";


            script += @"INSERT INTO ""ObjectLogs""(""Name"", ""ObjectType"") VALUES('" + objInfo.ObjectName + "', '" + objInfo.SourceObject + "') RETURNING \"ObjectLogID\" INTO ObjectLogID; \n";
            script += "END IF; \n";
            script += "END $$; \n";


            bool hasChanges = false;

            foreach (var prop in objInfo.LoggableProperties)
            {
                OHResultItem LastVersionPropInfo = lastVersion.Find(p => p.PropertyName.Equals(prop.Name));
                string       oldValue            = LastVersionPropInfo == null ? null : LastVersionPropInfo.PropertyValue;
                string       newValue            = prop.Value;

                if (objInfo.AppendType == AppendTypes.Incremental || newValue != oldValue)
                {
                    hasChanges = true;
                    string dbValue = prop.Value == null ? "NULL" : string.Format("'{0}'", prop.Value);
                    script += @"INSERT INTO ""ObjectLogDetails"" (""ObjectLogID"" ,""OperationID"" ,""LevelID"" ,""PropertyName"" ,""PropertyValue"",""PropertyType"") VALUES ((Select ""ObjectLogID""  From ""ObjectLogs""  Where ""ObjectType""='" + objInfo.SourceObject + "'), (Select \"OperaionID\" From\"Operations\"  Order By \"OperaionID\" Desc LIMIT 1), (Select \"LevelID\" From \"Levels\" Order By \"LevelID\" Desc  LIMIT 1),'" + prop.Name + "', " + dbValue + ", '" + prop.Type + "');";
                }
            }

            if (!hasChanges)
            {
                return;
            }


            comm.CommandText = string.Format(script, target.DBTablesPrefix);


            comm.Parameters.Add(new NpgsqlParameter("@KeyValue", objInfo.LoggableProperties.Find(p => p.Name.Equals(objInfo.KeyPropertyName)).Value));
            comm.Parameters.Add(new NpgsqlParameter("@User", string.IsNullOrEmpty(objInfo.User) ? string.Empty : objInfo.User));
            comm.Parameters.Add(new NpgsqlParameter("@Guid", objInfo.Guid));
            comm.Parameters.Add(new NpgsqlParameter("@PcName", string.IsNullOrEmpty(objInfo.PcName) ? string.Empty : objInfo.PcName));
            comm.Parameters.Add(new NpgsqlParameter("@TimeStamp", objInfo.TimeStamp));
            comm.Parameters.Add(new NpgsqlParameter("@ObjectName", objInfo.ObjectName));
            comm.Parameters.Add(new NpgsqlParameter("@ObjectType", objInfo.ObjectType.ToString()));

            conn.Open();
            comm.ExecuteNonQuery();

            conn.Close();
        }