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)
2.16.2018
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:
: 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);
}
}
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 ReportFilter1.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.
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.
10.26.2016
EF liefert falsche Werte aus View auf SQL-Server
Manchmal liefert das EF falsche Werte aus einer View, die sich auf dem SQL-Server befindet (eventuelle auch aus anderen DBs, keine Erfahrung).
Das Problem wird durch fehlende bzw. falsche Entitäts-Schlüssel verursacht. Wenn das EF keine PrimaryKeys erkennt - und manchmal erkennt es auch die vorhandenen Keys in einer View nicht - dann wird ein ComponentKey aus allen nicht nullable Properties gebildet. Und der ist sowohl inhaltlich beliebig falsch als das er auch zu falschen Daten führt.
Abhilfe schafft die manuelle Korrektur der Entitätschlüssel im EF-Diagramm.
Hier noch eine Möglichkeit, wenn die View eigentlich keinen Schlüssel bietet. Diese verwendet eine Zeilennummer als Key (isnull(ROW_NUMBER() OVER (ORDER BY xy),-1) as rId). Isnull ist notwendig, da sonst die Zeilennummer manchmal nullable ist.
Das Verhalten kann komplett vermieden werden, wenn man eine Stored Procedure zwischenschaltet. Diese erlaubt auch das Sortieren der Daten.
Das Problem wird durch fehlende bzw. falsche Entitäts-Schlüssel verursacht. Wenn das EF keine PrimaryKeys erkennt - und manchmal erkennt es auch die vorhandenen Keys in einer View nicht - dann wird ein ComponentKey aus allen nicht nullable Properties gebildet. Und der ist sowohl inhaltlich beliebig falsch als das er auch zu falschen Daten führt.
Abhilfe schafft die manuelle Korrektur der Entitätschlüssel im EF-Diagramm.
Hier noch eine Möglichkeit, wenn die View eigentlich keinen Schlüssel bietet. Diese verwendet eine Zeilennummer als Key (isnull(ROW_NUMBER() OVER (ORDER BY xy),-1) as rId). Isnull ist notwendig, da sonst die Zeilennummer manchmal nullable ist.
Das Verhalten kann komplett vermieden werden, wenn man eine Stored Procedure zwischenschaltet. Diese erlaubt auch das Sortieren der Daten.
9.20.2016
Sicherer Filename
VB:
Imports System.IO
Namespace Helper
Public Class FileNameHelper
Public Shared Function GetSafeFilename(filename As String) As String
Return String.Join("_", filename.Split(Path.GetInvalidFileNameChars()))
End Function
End Class
End NameSpace
Namespace Helper
Public Class FileNameHelper
Public Shared Function GetSafeFilename(filename As String) As String
Return String.Join("_", filename.Split(Path.GetInvalidFileNameChars()))
End Function
End Class
End NameSpace
c#
public string GetSafeFilename(string filename)
{
return string.Join("_", filename.Split(Path.GetInvalidFileNameChars()));
}
{
return string.Join("_", filename.Split(Path.GetInvalidFileNameChars()));
}
Kopierversionen:
Imports System.IO Namespace Helper Public Class FileNameHelper Public Shared Function GetSafeFilename(filename As String) As String Return String.Join("_", filename.Split(Path.GetInvalidFileNameChars())) End Function End Class End Namespacepublic string GetSafeFilename(string filename) { return string.Join("_", filename.Split(Path.GetInvalidFileNameChars())); }
8.18.2016
VS kopieren der Build-Ergebnisse in bestimmten Ordner
Relativ zur Solution:
Absolutes Ziel:
xcopy $(TargetDir)*.* $(SolutionDir)..\dlls\ /y
Absolutes Ziel:
xcopy $(TargetDir)*.* c:\dlls\ /y
8.10.2016
Abonnieren
Posts (Atom)