Saturday, July 30, 2011

LINQ und Datatables

allgemeine (untypisierte) Datatable
var res = from x in dt.AsEnumerable() select x.Field(c.ColumnName);

join zweier typisierter Datasets:
var rsInner = from s in dtSource
join c in dtComp on s.FullName equals c.FullName
where s.Nullable!=c.Nullable || s.MaxLength!=c.MaxLength || s.Type!=c.Type
select new { s.TableName, s.ColumnName,
s.Nullable, cNullAble = c.Nullable,
s.MaxLength, cMaxL = c.MaxLength,
s.Type, cType = c.Type};

Tuesday, July 26, 2011

typed Dataset Null Werte

Um Null Werte abzufragen verwendet man die IsXXXNull() Methode der typed Datarow Instanzen, um Null Werte zu schreiben die SetXXXNull() Methode , wobei XXX der Feldname ist.

z.b.:

DsCRM.tTextNmDataTable dtTextNm = new DsCRM.tTextNmDataTable();
DsCRM.tTextNmRow drTextNm = dtTextNm.NewtTextNmRow();
drTextNm.ChildId = dr.Id;
drTextNm.ParentId = (int)dt.ExtendedProperties[C.ParentId];
drTextNm.Created = DateTime.UtcNow;
drTextNm.CreatedBy = Data.WinUserName;
drTextNm.SetValidUntilNull();
drTextNm.IsValidUntilNull();

KeyCode zum Abfragen Return / Enter

private void cbBranche_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Return)
{

}
}

Wednesday, July 20, 2011

DD-WRT iptables

DD-WRT ist ja eine Linux variante, daher kann man das Port Forwarding auch per ssh mittels Iptables einstellen:

iptables --list
listet alle ketten und regeln auf

mit iptables -D Kettenname Regelnr
kann eine Regel aus einer Kette wieder gelöscht werden.

z.b.:
iptables -D FORWARD 5
löscht die 5. Zeile (siehe --list) aus der FORWARD Kette (FORWARD Kette ist eine Standard Kette, die Regeln zum Weiterleiten zusammenfasst)

sehr hilfreich, wenn man z.b. aufs Webinterface nicht mehr zugreifen kann, da man Port 80 wo anders hin verbogen hat mittels Port Forward ...


aus genaueres zu ipttables:

Regeln
Mit einer Regel wird entschieden was mit einem Paket passieren soll. Jede besitzt bestimmte Parameter nach denen sie überprüft ob die Informationen eines Paketes auf sie zutreffen. Wenn die Parameter zutreffend sind, wird das Paket meist an ein neues Ziel verwiesen oder es wird eine Methode angewandt. Für die Bearbeitung der Pakete gibt es mehrere Ziele und Methoden (policy). Häufig benutzte sind:

ACCEPT: das Paket kann passieren
REJECT: das Paket wird zurückgewiesen und ein Fehlerpaket wird gesendet
LOG: schreibt einen Eintrag in die syslog
DROP: das Paket wird ignoriert und keine Antwort gesendet
REDIRECT: die Ziel-Adresse des Paketes wird hiermit so verändert, dass es zum lokalen Rechner gesendet wird
MASQUERADE: die Quell-Adresse des Paketes wird durch die IP-Adresse der Schnittstelle ersetzt, auf dem es den Rechner verlässt

Regeln sind die Glieder der Kette.
Ketten
Die Ketten sind eine Sammlung von Regeln. D.h. das jede Kette mehrere Regeln besitzen kann um ein Paket durchzulassen oder zu blockieren. Es sind fünf Typen von Standardketten vorhanden. Manche dieser Ketten werden von allen Paketen und einige nur, je nachdem welches Ziel sie haben, durchlaufen. Die Regeln einer Kette werden nacheinander abgearbeitet und wenn eine zutrifft, ist die Bearbeitung in dieser Kette beendet (es gibt Ausnahmen):

PREROUTING: alle Pakete kommen hier durch bevor eine Routing-Entscheidung getroffen wird
FORWARD: für alle Pakete, die von der einen zu einer anderen Netzwerkschnittstelle weitergeleitet werden - also keine Pakete die an einen lokalen Dienst gerichtet sind
INPUT: für Pakete die über eine Schnittstelle hereinkommen und einen Dienst auf dem Rechner ansprechen
OUTPUT: für die über eine Schnittstelle herausgehenden Pakete, die von einem lokalen Dienst kommen
POSTROUTING: alle Pakete kommen am Ende der Verarbeitung hier durch

Die Ketten INPUT, FORWARD und OUTPUT besitzen immer eine Standardregel. Diese wird dann angewandt, wenn keine der in der jeweiligen Kette vorhandenen Regel zutrifft oder keine Regel vorhanden ist. In den Ketten PREROUTING und POSTROUTING können nur Pakete manipuliert (mangle und/oder nat), nicht jedoch gefiltert werden. Zu den vorhandenen Ketten kann man noch benutzerdefinierte Ketten erstellen. Dazu kommen wir jedoch erst später.

Tabellen
Die Art der Verarbeitung von Netzwerkpaketen ist in verschiedene Tabellen unterteilt. iptables besitzt standardmäßig drei Tabellen: mangle, nat und filter. Die Tabelle mangle (übersetzt: zerhauen) ermöglicht es dem Kernel, Daten im Paket-Header zu verändern. NAT wird benutzt um interne und externe IP-Adressen zu übersetzen (= Network Adress Translation). Regeln in dieser Tabelle ändern die IP und/oder den Port des Ziels. Die Tabelle filter prüft alle für die Firewall ankommenden Pakete und entscheidet ob sie durchgelassen oder geblockt werden.

Jede dieser Tabellen besitzt nun mehrere Ketten:

mangle (Paketmanipulationen): enthält alle Ketten
nat (Network Adress Translation): enthält die Ketten PREROUTING, OUTPUT und POSTROUTING
filter (Paketfilter): enthält die Ketten FORWARD, INPUT und OUTPUT

Monday, July 18, 2011

Allgemeines zu ProcMon Sysinternals

Buttonleiste:
Registry, File, Network und Threadbutton (ganz rechts) filtern die Erwignisse die angezeigt werden

Processtree:

wininit.exe
->services.exe hat alle Services gestartet
->lsass.exe ist der lokale Sicherheit-Authentifizierungsserver. Er überprüft die Gültigkeit der Benutzeranmeldung für Ihren PC oder Server.
->LSM.exe ist der lokale Sitzungs-Manager-Dienst in Microsoft Windows

Csrss ist kurz für Client/Server Run-Time Subsystem

winlogon.exe ermöglicht das An- und Abmelden von Benutzer und läuft deswegen ständig im Hintergrund mit. Es überprüft auch den Windows Aktivierungscode. http://www.neuber.com/taskmanager/deutsch/prozess/winlogon.exe.html

shstat.exe ist eine Anwendung, die McAfee Prozess-zuprozeß communications.

Thursday, July 14, 2011

für jede Tabelle im Sql Server etwas ausführen

z.b. Count(*)

EXEC SP_MSFOREACHTABLE 'select "?", count(*) from ?'

NameValueCollection in Dictionary konvertieren

static public Dictionary NamValCol2Dict(NameValueCollection nvc)
{
Dictionary temp = new Dictionary();
foreach (string key in nvc)
{
temp.Add(key, nvc[key]);
}
return temp;
}

mittels Reflection Name / Value Properties eines bel. Objektes zurückgeben

private Dictionary GetPropNameAndValuesAsDict(object o)
{
Dictionary d = new Dictionary();
foreach (PropertyInfo pi in o.GetType().GetProperties())
{
string s = "";
try
{
object oVal = pi.GetValue(o, null);
if (null != oVal) s = oVal.ToString();
}

catch (Exception ex)
{
s = ex.Message;
}
d.Add(pi.Name, s);
}
return d;
}

Umwandeln des obigen Dictonaries d in Stringliste:
List sl = (from de in d select de.Key + " = "+de.Value).ToList();

bzw. als Stringlist
private List GetPropNameAndValues(object o)
{
List sl = new List();
foreach (PropertyInfo pi in o.GetType().GetProperties())
{
string s = pi.Name;
try
{
object oVal = pi.GetValue(o, null);
if (null != oVal) s += "=" + oVal.ToString();
}

catch (Exception ex)
{
s += ":" + ex.Message;
}
sl.Add(s);
}
return sl;
}

Sql Server Datum und Sprache

select * from sys.syslanguages
set language 'English'
select @@Language
select GetDate()
set language 'Deutsch'
select @@Language
select GetDate()

Wednesday, July 13, 2011

Execute Rechte auf alle Stored Procedures / Execute privileg for all stored procedures

z.b. durch erzeugen einer Execute Rolle
for example create a role and assign exeute rights
CREATE ROLE db_execute
GRANT EXECUTE TO db_execute

=> jedes Mitglied der Rolle db_execute kann SPs usw. ausführen - hinzufügen z.b. mittels:

exec sp_addrolemember db_execute, username

IIS hostheader

Um mehrerer Websiten mit derselben IP und Port aber unterschiedlichem Hostname betreiben zu können muß man in den Bindings (IIS7) den hostname genauso eintragen, wie er später in der URL eingegeben wird. der DNS Server muß zunächst dafür sorgen, dass dieser hostname auch zum IIS Server geleitet wird (CNAME Einträge auf den Original DNS Eintrag des Servers - A Record), der IIS Server sucht dann in den Hostheaders die richtige Site raus ...

Monday, July 04, 2011

asp.net 4.0 deployment on IIS 7.0

Beim Versuch eine asp.net 4.0 app auf einen default configuriertem iis7 zu intallieren erhielt ich:

HTTP Error 404.17 - Not Found The requested content appears to be script and will not be served by the static file handler.

das Problem war, dass ASP.NET 4.0 Framework war zwar am Rechner installiert => daher konnte man in den AppPools auch einstellen, dass der AppPool unter 4.0 laufen soll, doch man muß es auch noch als (ehemals isapi) handler installieren, damit aspx seiten damit abgehandelt werden können mittels:http://www.blogger.com/img/blank.gif
c:\windows\microsoft.net\framework\v4.0….\aspnet_regiis –i

unter iis7.0 ist auch der server kern in asp.net entwickelt, daher sind keine isapi.dlls wie unter iis60 und 5.0 nötig, um bestimmte dateiarten wie aspx zu handeln, sondern das kann gleich im kern gehandelt werden.

iis7 architectur

Friday, July 01, 2011

logfile verkleinern

Um das Logfile zu verkleinern ist es günstig, ein Logbackup zu machen und dann zu shrinken:

USE [dbname]
GO
DBCC SHRINKFILE (N'logfilename logisch' , 1000)
GO

oder im ssms in Datenbank-Tasks auf Verkleinern, Files gehen

z.b.:
DBCC SHRINKFILE ('CRM_log',3000)