2.16.2018

SQL-Server - Audit-Trigger

Hier eine kleine Sammlung an nützlichen Links zum Thema Audit in SQL-Server:
Blogartikel dazu (SQL 2005)
Trigger

Suchworte:
update()
columns_updated()

Alternative zum Selberschreiben (ab 2008):
Track Data Changes (SQL Server)

1.24.2018

c# Liste generischer Klassen mit unterschiedlichen Typen

Ziel: Eine Liste von generischen Klassen (class) mit unterschiedlichen Typen (also unterschiedlichen T).

Vorarbeiten:
Nicht generische abstrakte BaseClass und generische Ableitung:
    public abstract class ReportFilter
    {
        public string Description { get; set; }
        public Type Type { get; set; }
    }

    public class ReportFilter : ReportFilter
    {
        public T Value { get; set; }
    }
 
Liste mit zwei Einträgen:
 var reportFilters = new List()
            {
                new ReportFilter<string> {Description="Name",Type=typeof(string),Value="Test"},
                new ReportFilter<bool> {Description="IsAktiv",Type=typeof(bool),Value=true}
            };
Auslesen:
 foreach (var reportFilter in reportFilters)
            {
                var type = typeof(ReportFilter<>).MakeGenericType(reportFilter.Type);
                var aktFilter = Convert.ChangeType(reportFilter, type);
                var propertyInfo = type.GetProperty("Value");
                if (propertyInfo != null)
                {
                    var val = propertyInfo.GetValue(aktFilter, null);
                }
            }
 
Kopierbare Version der Code-Schnipsel:
public abstract class ReportFilter { public string Description { get; set; } public Type Type { get; set; } } public class ReportFilter : ReportFilter { public T Value { get; set; } }

var reportFilters = new List() { new ReportFilter {Description="Name",Type=typeof(string),Value="Test"}, new ReportFilter {Description="IsAktiv",Type=typeof(bool),Value=true} }; foreach (var reportFilter in reportFilters) { var type = typeof(ReportFilter<>).MakeGenericType(reportFilter.Type); var aktFilter = Convert.ChangeType(reportFilter, type); var propertyInfo = type.GetProperty("Value"); if (propertyInfo != null) { var val = propertyInfo.GetValue(aktFilter, null); } }

1.18.2018

ReportViewer - lokale Reports in z.B. WPF

Damit der Report-Viewer problemlos funktioniert müssen alle ReportViewer-DLLS dieselbe Version haben und lokal kopiert werden.
Wenn dann der Fehler "Report-Definiton fehlerhaft" auftritt, hilft es die DLL "Microsoft.ReportViewer.ProcessingObjectModel.dll" ins Projekt auf zu nehmen.
Siehe eine Anleitung hier.