CRTL SHIFT SPACE ... Intellisense Tooltip für aktuellen Parameter
meine Sys/Db admin & Developper Notitzen - wer Rechtschreibfehler findet darf sie behalten ... my Sys/Db Admin and developper notes - I don't care about typos
Tuesday, August 07, 2012
Windows7 Aktivierungsfehler / Activation
einfach denselben Productkey nochmals eingeben (Systemsteuerung / System / Windows aktivieren ganz unten)
renter the same product key (system / activate windows)
renter the same product key (system / activate windows)
Windows 7 Ruhezustand
In Energioptionen, Erweiterte Eiunstellungen, Energiesparen, Hybridmodus zulassen "Nein"
Macros for Build Commands and Properties
Im Visual Studio, Projekteigenschaften, Build Events sind folgende Markeos nützlich (Variablen für diverse Pfade, Directories und Files):
Macros for Build Commands and Properties
z.b. $(ProjectDir) $(SolutionDir)
leider lassen sich diese nicht im Working Directory unter Debug verwenden ...
Monday, July 30, 2012
The name 'components' is already used by another object
Windows Forms Designer Fehlermeldung:
The name 'components' is already used by another object
Ursache: doppelte Zeile
this.components = new System.ComponentModel.Container();
in
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.components = new System.ComponentModel.Container();
einfach löschen dann gehts wieder
Sunday, July 22, 2012
windows form textbox.text threadsicher setzten
/// used To set Text Box Threadsave (Invoked by this MoneyManagerForm)
///
/// Textbox to set text
/// text is set to Textbox
private delegate void DelegateSetTbText(TextBox tb, string s);
/// threadsave set of Text of Textbox
///
/// Text of this Textbox is set
/// new text for textbox
private void SetText(TextBox tb, string text)
{
// InvokeRequired required compares the thread ID of the
// calling thread to the thread ID of the creating thread.
// If these threads are different, it returns true.
if (this.InvokeRequired)
{
DelegateSetTbText d = new DelegateSetTbText(SetText);
this.Invoke(d, new object[] { tb, text });
}
else
{
tb.Text = text;
tb.Enabled = true;
}
}
Monday, July 16, 2012
Fehler HRESULT 0x8007052E
Bei Reporting Services trat nach Passwortänderung des WindowsDienst- und Execution Kontos folgender Fehler auf:
Fehler bei der Berichtsverarbeitung. (rsProcessingAborted)
Der Berichtsserver-Windows-Dienst 'ReportServer' wird nicht ausgeführt. Dieser Dienst muss ausgeführt werden, damit der Berichtsserver verwendet werden kann. (rsReportServerServiceUnavailable)
=> Aktualisierung des Paswortes des WIndows Dienst SqlServer Reporting Services und start des Dienstes hatte zum Erfolg, dass der Reportmanager wieder bedienbar war (Navigation durch die Ordner, Eigenschaften von Berichten änderun usw. ging wieder) aber beim Ausführen des Reports trat folgender Fehler auf:
Fehler bei der Anmeldung. (rsLogonFailed)
Anmeldung fehlgeschlagen: unbekannter Benutzername oder falsches Kennwort. (Ausnahme von HRESULT: 0x8007052E)
dieser konnte durch aktualisierung mit dem neuen Passwort im Konfigurationmanager unter Ausführungskonto (ganz unten links) behoben werden
Monday, July 09, 2012
sql reporting services slow startup
Der erste Aufruf von Reporting Services ist meist sehr langsam, weil die Seite inwzischen recyceld wurde. Man kann das Recycle Intervall verlängern, sodass bei wenig frequentierten Berichtsservern trotzdem ein schneller Respond erfolgt:
In
C:\Programme\Microsoft SQL Server\MSRS10.CRM\Reporting Services\ReportServer\rsreportserver.config
72000
von 720 erhöhen
Wednesday, July 04, 2012
sql server logins dbuser connection
Auf Sql Server Ebene gibt es Logins (die auch einer WIndows Gruppe, einem WIndowws User zugeordnet sein können) - auf Datenbankebene gibt es die DAtenbank Rollen und Benutzer.
Damit ein Login auf eine Datenbank Zugreifen kann muß es mit einem Datenbankuser dort verbunden sein.
Über das SSMS kann bei den Eigenschaften des SqlServerLogins unter Usermapping ein Login mit einer Datenbank verbunden werden, indem dort ein DbUser mit demselben Namen wie das sqlserverLogin erzeugt wird. Gibt es diesen User schon, erfolgt ein Fehler und man muß den User und das Login mittels der Stored Procedure sp_change_users_login verbinden:
z.b. exec sp_change_users_login 'Auto_Fix','DbUserName'
exec sp_change_users_login 'Report' listet die unverbundenen DB User auf.
Um festzustellen welcehr Dbuser mit welchem Login verbunden ist:
select u.name as dbusername,l.name as loginname from sys.sysusers u join sys.syslogins l on l.sid=u.sid
Tuesday, July 03, 2012
typed Dataset Contrain Exception
Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints.
Unfortunatly, there is no hint which Constraint(s) causes the exeption =>
try
1) set Allwo DBNull to true
2) Length of String ok ? (Set to max)
3) double key ?
or try to load same rowset into a untyped dataset and copy each row and each field into the typed one
Friday, June 22, 2012
Click Once empty Error Message
if you try running Setup from Click Once and an empty errorbox appears, delete the suo file of your solution and publish again
Click Once Prerequisites
Click Once Prerequisites are located in
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bootstrapper\Packages
there you can add your own packeges
Tuesday, June 12, 2012
Auto Update Statistics Async
Beim Synchronen Update, werden sobald der Query Optimizer das Erignis Statistiken veraltert wirft, dieseaktualisiert und erst danach die Query ausgeführt. Beim Asynchronen AutoUpdate wird die Query noch mit den veralterten Stat. Ausgeführt, im Hintergrund aber ein Task zum Updaten derselben gestartet, und wenn dieser fertig sit, werden alle Queries mit den neuen Statistiken geliefert.
Thursday, May 31, 2012
Click Once adding files to publish / missing .confing.deploy
1) to add Files for publishing: every File in Project with Property Build Action Content is added
2) app.config -> app.config.deploy but the setup says missing *.exe.config.deploy => add a *.exe.config file and the Pubsliher makes a .deploy from it
Friday, May 25, 2012
regex in Vs und SSMS
Im Visual Studio oder im Sql Management Studio (SSMS) muß man statt den normalen regex quantifiers {n} ^n verwenden
Friday, April 13, 2012
oracle psql <-> sqlserver tsql
sql sever - oracle
| sql sever | oracle |
|---|---|
| IsNull(feld,NullErsetzWert) | NVL(Fld,NullReplWert) |
| select * into dest from source | create dest as select * from source |
| select top 10 * from x | select * from x where rownum<=10 |
c#<->vb.net
| c# | vb.net |
|---|---|
| using namespace | imports namespace |
| string s="Hallo" | dim s as String="Hallo" |
| this | me |
| And, or kurzschluss auswertung | andalso, orelse |
Wednesday, January 25, 2012
Trigger on all server
alter TRIGGER [trgDatabaseCreated]
ON ALL SERVER
with execute as 'sa'
FOR CREATE_DATABASE
AS
declare @data XML
declare @message XML
SET @data=EVENTDATA()
declare @msg as nvarchar(max)
set @msg = 'Databasecreated' + @data.value('(/EVENT_INSTANCE/EventType)[1]','nvarchar(100)') + @data.value('(/EVENT_INSTANCE/TSQLCommand)[1]','nvarchar(2000)')
INSERT INTO [InterneVerwaltung].[dbo].[AllgLog] ([name],[description],xmldesc)
VALUES ('trgDatabaseCreated',@msg,@data)
--INSERT INTO InterneVerwaltung.dbo.AllgLog
--(DB_User,Event,TSQL)
--VALUES
--(GETDATE(),
--CONVERT(nvarchar(100),CURRENT_USER),
--@data.value('(/EVENT_INSTANCE/EventType)[1]','nvarchar(100)'),
--@data.value('(/EVENT_INSTANCE/TSQLCommand)[1]','nvarchar(2000)'))
exec msdb.dbo.sysmail_start_sp
Execute msdb.dbo.sp_send_dbmail
@profile_name='sqlcl1DbMail',
@recipients='erich.geierlehner@ecs.steyr.com',
@subject='databasewascreated',
@body=@msg,
@query='select top 1 * from [InterneVerwaltung].[dbo].[AllgLog] with (NOLOCK) order by created DESC';
ON ALL SERVER
with execute as 'sa'
FOR CREATE_DATABASE
AS
declare @data XML
declare @message XML
SET @data=EVENTDATA()
declare @msg as nvarchar(max)
set @msg = 'Databasecreated' + @data.value('(/EVENT_INSTANCE/EventType)[1]','nvarchar(100)') + @data.value('(/EVENT_INSTANCE/TSQLCommand)[1]','nvarchar(2000)')
INSERT INTO [InterneVerwaltung].[dbo].[AllgLog] ([name],[description],xmldesc)
VALUES ('trgDatabaseCreated',@msg,@data)
--INSERT INTO InterneVerwaltung.dbo.AllgLog
--(DB_User,Event,TSQL)
--VALUES
--(GETDATE(),
--CONVERT(nvarchar(100),CURRENT_USER),
--@data.value('(/EVENT_INSTANCE/EventType)[1]','nvarchar(100)'),
--@data.value('(/EVENT_INSTANCE/TSQLCommand)[1]','nvarchar(2000)'))
exec msdb.dbo.sysmail_start_sp
Execute msdb.dbo.sp_send_dbmail
@profile_name='sqlcl1DbMail',
@recipients='erich.geierlehner@ecs.steyr.com',
@subject='databasewascreated',
@body=@msg,
@query='select top 1 * from [InterneVerwaltung].[dbo].[AllgLog] with (NOLOCK) order by created DESC';
Thursday, August 11, 2011
asp.net Apps tracen
in der Web.config im Abschnitt system.web folgenden xml Tag (spitze Klammern hinzu)
trace enabled="true" pageOutput="true" requestLimit="20" traceMode="SortByTime" localOnly="true"
einfügen, an jeder Seite sollte nun ein Trace Abschnitt angehängt werden, eine Übersicht über alle Traces bekommt man indem man im hauptdir der Anwendung
trace.axd
aufruft (die gibt es physikalisch nicht, wird aber von asp.net für jede Anwendung bereitgestellt)
Monday, August 08, 2011
check sql agent running with tsql
if 0<(select count(*) from sysprocesses where program_name like 'SQLAgent%')
begin
print 'sql agent is running'
end
else
begin
print 'sql agent is not running'
end
begin
print 'sql agent is running'
end
else
begin
print 'sql agent is not running'
end
Friday, August 05, 2011
Datagridview auf Bindingsource an Datatable
Ereignisreihenfolge beim Hinzufügen einer neuen Zeile:
1) Bindingsource_ADddingNEw
2) Datatable_TableNewRow
3) Datagridview_UserAddedRow
wenn jemand im Datagridview auf die neue Zeile klickt, wird nicht unbedingt schon eine neue Row hinzugefügt, erst wenn jemand verscuht einen Wert einzutragen => mit Bindingsource.AddNEw() kann man händisch eine neue Row hinzufügen
1) Bindingsource_ADddingNEw
2) Datatable_TableNewRow
3) Datagridview_UserAddedRow
wenn jemand im Datagridview auf die neue Zeile klickt, wird nicht unbedingt schon eine neue Row hinzugefügt, erst wenn jemand verscuht einen Wert einzutragen => mit Bindingsource.AddNEw() kann man händisch eine neue Row hinzufügen
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};
var res = from x in dt.AsEnumerable() select x.Field
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();
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)
{
}
}
{
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
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.
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 ?'
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;
}
{
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;
}
{
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
bzw. als Stringlist
private List
{
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()
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
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
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
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)
Tuesday, June 28, 2011
SqlAgentAliveJob
Verwendung von sp_send_dbmail um sich vom SqlAgent mittels täglichem Job eine Alive Mail schicken zu lassen:
declare @x as nvarchar(max)
set @x=@@SERVERNAME +' sql agent is alive at '+CONVERT(nvarchar(max),GETDATE(),121)
--select @x
exec msdb.dbo.sp_send_dbmail
@profile_name='dbm',
@recipients='x@y.z',
@subject=@x,
@body='Diese Nachricht wurde von Sql Agent Job SqlAgentIsAliveMail generiert - bitte nicht beantworten'
declare @x as nvarchar(max)
set @x=@@SERVERNAME +' sql agent is alive at '+CONVERT(nvarchar(max),GETDATE(),121)
--select @x
exec msdb.dbo.sp_send_dbmail
@profile_name='dbm',
@recipients='x@y.z',
@subject=@x,
@body='Diese Nachricht wurde von Sql Agent Job SqlAgentIsAliveMail generiert - bitte nicht beantworten'
Monday, June 27, 2011
nützliche SqlServerAlerts
folgendes Script erzeugt im SqlAgent unter Alerts für alle genützen Severities Alerts - wenn man einen Operator definiert kann dieser dann benachrichtigt werden (Properties, Response). Vorraussetzung unter SqlAgentProperties ist unter AlertSystem EnableMailProfile eingestellt ...
@include_event_description_in=1 => alert text wird in emails mitgeschickt
Gleich dannach ist ein Script, dass Email Notifications für alle mit Script 1 erzeugten Alerts erstellt, wobei der Operatorname ganz am Anfang des Scripts im Set richtig eingestellt werden muss - kann man aber auch direkt beim Operator im ssms einstellen
USE [msdb]
GO
/****** Object: Alert [001misc] Script Date: 06/27/2011 16:10:04 ******/
EXEC msdb.dbo.sp_add_alert @name=N'001misc',
@message_id=0,
@severity=1,
@enabled=1,
@delay_between_responses=3600,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO
/****** 2-6 Reserved *****************************/
/****** Object: Alert [007notifyStatus] Script Date: 06/27/2011 16:12:16 ******/
EXEC msdb.dbo.sp_add_alert @name=N'007notifyStatus',
@message_id=0,
@severity=7,
@enabled=1,
@delay_between_responses=0,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO
/****** Object: Alert [008UserInterventionRequired] Script Date: 06/27/2011 16:27:57 ******/
EXEC msdb.dbo.sp_add_alert @name=N'008UserInterventionRequired',
@message_id=0,
@severity=8,
@enabled=1,
@delay_between_responses=3600,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO
/****** Object: Alert [009UserDefined] Script Date: 06/27/2011 16:27:57 ******/
EXEC msdb.dbo.sp_add_alert @name=N'009UserDefined',
@message_id=0,
@severity=9,
@enabled=1,
@delay_between_responses=3600,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO
/****** Object: Alert [010Info] Script Date: 06/27/2011 16:13:02 ******/
EXEC msdb.dbo.sp_add_alert @name=N'010Info',
@message_id=0,
@severity=10,
@enabled=1,
@delay_between_responses=3600,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO
/****** Object: Alert [011DbObjectNotFound] Script Date: 06/27/2011 16:13:02 ******/
EXEC msdb.dbo.sp_add_alert @name=N'011DbObjectNotFound',
@message_id=0,
@severity=11,
@enabled=1,
@delay_between_responses=3600,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO
/** 12 unused ******/
/****** Object: Alert [013UserTransactionSyntaxError] Script Date: 06/27/2011 16:13:02 ******/
EXEC msdb.dbo.sp_add_alert @name=N'013UserTransactionSyntaxError',
@message_id=0,
@severity=13,
@enabled=1,
@delay_between_responses=3600,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO
/****** Object: Alert [014lowPermission] Script Date: 06/27/2011 16:25:21 ******/
EXEC msdb.dbo.sp_add_alert @name=N'014lowPermission',
@message_id=0,
@severity=14,
@enabled=1,
@delay_between_responses=0,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@job_id=N'00000000-0000-0000-0000-000000000000'
/****** Object: Alert [015SqlSyntaxError] Script Date: 06/27/2011 16:13:02 ******/
EXEC msdb.dbo.sp_add_alert @name=N'015SqlSyntaxError',
@message_id=0,
@severity=15,
@enabled=1,
@delay_between_responses=3600,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO
/****** Object: Alert [016MiscUserError] Script Date: 06/27/2011 16:13:02 ******/
EXEC msdb.dbo.sp_add_alert @name=N'016MiscUserError',
@message_id=0,
@severity=16,
@enabled=1,
@delay_between_responses=3600,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO
/****** Object: Alert [017LowResources] Script Date: 06/27/2011 16:12:49 ******/
EXEC msdb.dbo.sp_add_alert @name=N'017LowResources',
@message_id=0,
@severity=17,
@enabled=1,
@delay_between_responses=3600,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO
/****** Object: Alert [018InternalError] Script Date: 06/27/2011 16:10:21 ******/
EXEC msdb.dbo.sp_add_alert @name=N'018InternalError',
@message_id=0,
@severity=18,
@enabled=1,
@delay_between_responses=3600,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO
/****** Object: Alert [019FatalResource] Script Date: 06/27/2011 16:10:21 ******/
EXEC msdb.dbo.sp_add_alert @name=N'019FatalResource',
@message_id=0,
@severity=19,
@enabled=1,
@delay_between_responses=3600,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO
/****** Object: Alert [020FatalCurProc] Script Date: 06/27/2011 16:10:21 ******/
EXEC msdb.dbo.sp_add_alert @name=N'020FatalCurProc',
@message_id=0,
@severity=20,
@enabled=1,
@delay_between_responses=3600,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO
/****** Object: Alert [021FatalDbProc] Script Date: 06/27/2011 16:10:21 ******/
EXEC msdb.dbo.sp_add_alert @name=N'021FatalDbProc',
@message_id=0,
@severity=21,
@enabled=1,
@delay_between_responses=3600,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO
/****** Object: Alert [022FatalTableIntegr] Script Date: 06/27/2011 16:10:21 ******/
EXEC msdb.dbo.sp_add_alert @name=N'022FatalTableIntegr',
@message_id=0,
@severity=22,
@enabled=1,
@delay_between_responses=3600,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO
/****** Object: Alert [023FatalDbIntegr] Script Date: 06/27/2011 16:10:21 ******/
EXEC msdb.dbo.sp_add_alert @name=N'023FatalDbIntegr',
@message_id=0,
@severity=23,
@enabled=1,
@delay_between_responses=3600,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO
/****** Object: Alert [024FatalHardwareError] Script Date: 06/27/2011 16:10:21 ******/
EXEC msdb.dbo.sp_add_alert @name=N'024FatalHardwareError',
@message_id=0,
@severity=24,
@enabled=1,
@delay_between_responses=3600,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO
/****** Object: Alert [025FatalError] Script Date: 06/27/2011 16:10:21 ******/
EXEC msdb.dbo.sp_add_alert @name=N'025FatalError',
@message_id=0,
@severity=25,
@enabled=1,
@delay_between_responses=3600,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO
/**************************** UND NOTIFICATIONS EINSTELLEN, OPERATOR NAME RICHTIGSTELLEN !!!! ****************************************************************
USE [msdb]
GO
DECLARE @Operator as nvarchar(MAX)
SET @Operator='operatorname';
EXEC dbo.sp_add_notification @alert_name = N'011DbObjectNotFound',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email
/****** Object: Alert [001misc] Script Date: 06/27/2011 16:10:04 ******/
EXEC dbo.sp_add_notification @alert_name = N'001misc',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email
/****** 2-6 Reserved *****************************/
/****** Object: Alert [007notifyStatus] Script Date: 06/27/2011 16:12:16 ******/
EXEC dbo.sp_add_notification @alert_name =N'007notifyStatus',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email
/****** Object: Alert [008UserInterventionRequired] Script Date: 06/27/2011 16:27:57 ******/
EXEC dbo.sp_add_notification @alert_name =N'008UserInterventionRequired',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email
/****** Object: Alert [009UserDefined] Script Date: 06/27/2011 16:27:57 ******/
EXEC dbo.sp_add_notification @alert_name =N'009UserDefined',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email
/****** Object: Alert [010Info] Script Date: 06/27/2011 16:13:02 ******/
EXEC dbo.sp_add_notification @alert_name =N'010Info',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email
/****** Object: Alert [011DbObjectNotFound] Script Date: 06/27/2011 16:13:02 ******/
EXEC dbo.sp_add_notification @alert_name =N'011DbObjectNotFound',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email
/** 12 unused ******/
/****** Object: Alert [013UserTransactionSyntaxError] Script Date: 06/27/2011 16:13:02 ******/
EXEC dbo.sp_add_notification @alert_name =N'013UserTransactionSyntaxError',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email
/****** Object: Alert [014lowPermission] Script Date: 06/27/2011 16:25:21 ******/
EXEC dbo.sp_add_notification @alert_name =N'014lowPermission',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email
/****** Object: Alert [015SqlSyntaxError] Script Date: 06/27/2011 16:13:02 ******/
EXEC dbo.sp_add_notification @alert_name =N'015SqlSyntaxError',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email
/****** Object: Alert [016MiscUserError] Script Date: 06/27/2011 16:13:02 ******/
EXEC dbo.sp_add_notification @alert_name =N'016MiscUserError',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email
/****** Object: Alert [017LowResources] Script Date: 06/27/2011 16:12:49 ******/
EXEC dbo.sp_add_notification @alert_name =N'017LowResources',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email
/****** Object: Alert [018InternalError] Script Date: 06/27/2011 16:10:21 ******/
EXEC dbo.sp_add_notification @alert_name =N'018InternalError',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email
/****** Object: Alert [019FatalResource] Script Date: 06/27/2011 16:10:21 ******/
EXEC dbo.sp_add_notification @alert_name =N'019FatalResource',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email
/****** Object: Alert [020FatalCurProc] Script Date: 06/27/2011 16:10:21 ******/
EXEC dbo.sp_add_notification @alert_name =N'020FatalCurProc',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email
/****** Object: Alert [021FatalDbProc] Script Date: 06/27/2011 16:10:21 ******/
EXEC dbo.sp_add_notification @alert_name =N'021FatalDbProc',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email
/****** Object: Alert [022FatalTableIntegr] Script Date: 06/27/2011 16:10:21 ******/
EXEC dbo.sp_add_notification @alert_name =N'022FatalTableIntegr',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email
/****** Object: Alert [023FatalDbIntegr] Script Date: 06/27/2011 16:10:21 ******/
EXEC dbo.sp_add_notification @alert_name =N'023FatalDbIntegr',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email
/****** Object: Alert [024FatalHardwareError] Script Date: 06/27/2011 16:10:21 ******/
EXEC dbo.sp_add_notification @alert_name =N'024FatalHardwareError',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email
/****** Object: Alert [025FatalError] Script Date: 06/27/2011 16:10:21 ******/
EXEC dbo.sp_add_notification @alert_name =N'025FatalError',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email
GO
@include_event_description_in=1 => alert text wird in emails mitgeschickt
Gleich dannach ist ein Script, dass Email Notifications für alle mit Script 1 erzeugten Alerts erstellt, wobei der Operatorname ganz am Anfang des Scripts im Set richtig eingestellt werden muss - kann man aber auch direkt beim Operator im ssms einstellen
USE [msdb]
GO
/****** Object: Alert [001misc] Script Date: 06/27/2011 16:10:04 ******/
EXEC msdb.dbo.sp_add_alert @name=N'001misc',
@message_id=0,
@severity=1,
@enabled=1,
@delay_between_responses=3600,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO
/****** 2-6 Reserved *****************************/
/****** Object: Alert [007notifyStatus] Script Date: 06/27/2011 16:12:16 ******/
EXEC msdb.dbo.sp_add_alert @name=N'007notifyStatus',
@message_id=0,
@severity=7,
@enabled=1,
@delay_between_responses=0,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO
/****** Object: Alert [008UserInterventionRequired] Script Date: 06/27/2011 16:27:57 ******/
EXEC msdb.dbo.sp_add_alert @name=N'008UserInterventionRequired',
@message_id=0,
@severity=8,
@enabled=1,
@delay_between_responses=3600,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO
/****** Object: Alert [009UserDefined] Script Date: 06/27/2011 16:27:57 ******/
EXEC msdb.dbo.sp_add_alert @name=N'009UserDefined',
@message_id=0,
@severity=9,
@enabled=1,
@delay_between_responses=3600,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO
/****** Object: Alert [010Info] Script Date: 06/27/2011 16:13:02 ******/
EXEC msdb.dbo.sp_add_alert @name=N'010Info',
@message_id=0,
@severity=10,
@enabled=1,
@delay_between_responses=3600,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO
/****** Object: Alert [011DbObjectNotFound] Script Date: 06/27/2011 16:13:02 ******/
EXEC msdb.dbo.sp_add_alert @name=N'011DbObjectNotFound',
@message_id=0,
@severity=11,
@enabled=1,
@delay_between_responses=3600,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO
/** 12 unused ******/
/****** Object: Alert [013UserTransactionSyntaxError] Script Date: 06/27/2011 16:13:02 ******/
EXEC msdb.dbo.sp_add_alert @name=N'013UserTransactionSyntaxError',
@message_id=0,
@severity=13,
@enabled=1,
@delay_between_responses=3600,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO
/****** Object: Alert [014lowPermission] Script Date: 06/27/2011 16:25:21 ******/
EXEC msdb.dbo.sp_add_alert @name=N'014lowPermission',
@message_id=0,
@severity=14,
@enabled=1,
@delay_between_responses=0,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@job_id=N'00000000-0000-0000-0000-000000000000'
/****** Object: Alert [015SqlSyntaxError] Script Date: 06/27/2011 16:13:02 ******/
EXEC msdb.dbo.sp_add_alert @name=N'015SqlSyntaxError',
@message_id=0,
@severity=15,
@enabled=1,
@delay_between_responses=3600,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO
/****** Object: Alert [016MiscUserError] Script Date: 06/27/2011 16:13:02 ******/
EXEC msdb.dbo.sp_add_alert @name=N'016MiscUserError',
@message_id=0,
@severity=16,
@enabled=1,
@delay_between_responses=3600,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO
/****** Object: Alert [017LowResources] Script Date: 06/27/2011 16:12:49 ******/
EXEC msdb.dbo.sp_add_alert @name=N'017LowResources',
@message_id=0,
@severity=17,
@enabled=1,
@delay_between_responses=3600,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO
/****** Object: Alert [018InternalError] Script Date: 06/27/2011 16:10:21 ******/
EXEC msdb.dbo.sp_add_alert @name=N'018InternalError',
@message_id=0,
@severity=18,
@enabled=1,
@delay_between_responses=3600,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO
/****** Object: Alert [019FatalResource] Script Date: 06/27/2011 16:10:21 ******/
EXEC msdb.dbo.sp_add_alert @name=N'019FatalResource',
@message_id=0,
@severity=19,
@enabled=1,
@delay_between_responses=3600,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO
/****** Object: Alert [020FatalCurProc] Script Date: 06/27/2011 16:10:21 ******/
EXEC msdb.dbo.sp_add_alert @name=N'020FatalCurProc',
@message_id=0,
@severity=20,
@enabled=1,
@delay_between_responses=3600,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO
/****** Object: Alert [021FatalDbProc] Script Date: 06/27/2011 16:10:21 ******/
EXEC msdb.dbo.sp_add_alert @name=N'021FatalDbProc',
@message_id=0,
@severity=21,
@enabled=1,
@delay_between_responses=3600,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO
/****** Object: Alert [022FatalTableIntegr] Script Date: 06/27/2011 16:10:21 ******/
EXEC msdb.dbo.sp_add_alert @name=N'022FatalTableIntegr',
@message_id=0,
@severity=22,
@enabled=1,
@delay_between_responses=3600,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO
/****** Object: Alert [023FatalDbIntegr] Script Date: 06/27/2011 16:10:21 ******/
EXEC msdb.dbo.sp_add_alert @name=N'023FatalDbIntegr',
@message_id=0,
@severity=23,
@enabled=1,
@delay_between_responses=3600,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO
/****** Object: Alert [024FatalHardwareError] Script Date: 06/27/2011 16:10:21 ******/
EXEC msdb.dbo.sp_add_alert @name=N'024FatalHardwareError',
@message_id=0,
@severity=24,
@enabled=1,
@delay_between_responses=3600,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO
/****** Object: Alert [025FatalError] Script Date: 06/27/2011 16:10:21 ******/
EXEC msdb.dbo.sp_add_alert @name=N'025FatalError',
@message_id=0,
@severity=25,
@enabled=1,
@delay_between_responses=3600,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO
/**************************** UND NOTIFICATIONS EINSTELLEN, OPERATOR NAME RICHTIGSTELLEN !!!! ****************************************************************
USE [msdb]
GO
DECLARE @Operator as nvarchar(MAX)
SET @Operator='operatorname';
EXEC dbo.sp_add_notification @alert_name = N'011DbObjectNotFound',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email
/****** Object: Alert [001misc] Script Date: 06/27/2011 16:10:04 ******/
EXEC dbo.sp_add_notification @alert_name = N'001misc',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email
/****** 2-6 Reserved *****************************/
/****** Object: Alert [007notifyStatus] Script Date: 06/27/2011 16:12:16 ******/
EXEC dbo.sp_add_notification @alert_name =N'007notifyStatus',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email
/****** Object: Alert [008UserInterventionRequired] Script Date: 06/27/2011 16:27:57 ******/
EXEC dbo.sp_add_notification @alert_name =N'008UserInterventionRequired',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email
/****** Object: Alert [009UserDefined] Script Date: 06/27/2011 16:27:57 ******/
EXEC dbo.sp_add_notification @alert_name =N'009UserDefined',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email
/****** Object: Alert [010Info] Script Date: 06/27/2011 16:13:02 ******/
EXEC dbo.sp_add_notification @alert_name =N'010Info',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email
/****** Object: Alert [011DbObjectNotFound] Script Date: 06/27/2011 16:13:02 ******/
EXEC dbo.sp_add_notification @alert_name =N'011DbObjectNotFound',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email
/** 12 unused ******/
/****** Object: Alert [013UserTransactionSyntaxError] Script Date: 06/27/2011 16:13:02 ******/
EXEC dbo.sp_add_notification @alert_name =N'013UserTransactionSyntaxError',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email
/****** Object: Alert [014lowPermission] Script Date: 06/27/2011 16:25:21 ******/
EXEC dbo.sp_add_notification @alert_name =N'014lowPermission',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email
/****** Object: Alert [015SqlSyntaxError] Script Date: 06/27/2011 16:13:02 ******/
EXEC dbo.sp_add_notification @alert_name =N'015SqlSyntaxError',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email
/****** Object: Alert [016MiscUserError] Script Date: 06/27/2011 16:13:02 ******/
EXEC dbo.sp_add_notification @alert_name =N'016MiscUserError',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email
/****** Object: Alert [017LowResources] Script Date: 06/27/2011 16:12:49 ******/
EXEC dbo.sp_add_notification @alert_name =N'017LowResources',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email
/****** Object: Alert [018InternalError] Script Date: 06/27/2011 16:10:21 ******/
EXEC dbo.sp_add_notification @alert_name =N'018InternalError',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email
/****** Object: Alert [019FatalResource] Script Date: 06/27/2011 16:10:21 ******/
EXEC dbo.sp_add_notification @alert_name =N'019FatalResource',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email
/****** Object: Alert [020FatalCurProc] Script Date: 06/27/2011 16:10:21 ******/
EXEC dbo.sp_add_notification @alert_name =N'020FatalCurProc',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email
/****** Object: Alert [021FatalDbProc] Script Date: 06/27/2011 16:10:21 ******/
EXEC dbo.sp_add_notification @alert_name =N'021FatalDbProc',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email
/****** Object: Alert [022FatalTableIntegr] Script Date: 06/27/2011 16:10:21 ******/
EXEC dbo.sp_add_notification @alert_name =N'022FatalTableIntegr',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email
/****** Object: Alert [023FatalDbIntegr] Script Date: 06/27/2011 16:10:21 ******/
EXEC dbo.sp_add_notification @alert_name =N'023FatalDbIntegr',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email
/****** Object: Alert [024FatalHardwareError] Script Date: 06/27/2011 16:10:21 ******/
EXEC dbo.sp_add_notification @alert_name =N'024FatalHardwareError',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email
/****** Object: Alert [025FatalError] Script Date: 06/27/2011 16:10:21 ******/
EXEC dbo.sp_add_notification @alert_name =N'025FatalError',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email
GO
Thursday, May 19, 2011
COM
Komponenten werden mit regsvr32.exe registriert => in der Registry wird unter HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{8.......-AE99-4A26-A9A8-B847F8C70629}\InprocServer32
der Pfad zum Executeable abgelegt.
unter HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{8......-AA99-4A26-A9A8-B847F8C70629}\VersionIndependentProgID wird der eindeutige COM NAme abgelegt, unter dem dann z.b. mittels vbs:
Set oChecker=CreateObject("eindeutiger Name") das Objekt kreiert werden kann.
OLECHAR* BSTR : hat Längeninfo in den ersten zwei bytes und end marke ! _> daher immer mit SysAllocString initialisieren, da wird die richtige Länge gleich eingetragen
der Pfad zum Executeable abgelegt.
unter HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{8......-AA99-4A26-A9A8-B847F8C70629}\VersionIndependentProgID wird der eindeutige COM NAme abgelegt, unter dem dann z.b. mittels vbs:
Set oChecker=CreateObject("eindeutiger Name") das Objekt kreiert werden kann.
OLECHAR* BSTR : hat Längeninfo in den ersten zwei bytes und end marke ! _> daher immer mit SysAllocString initialisieren, da wird die richtige Länge gleich eingetragen
Wednesday, April 06, 2011
Database Snapshot erstellen
Ein Snapshot (Read only Kopie eines Datenbankstandes) kann nicht aus dem SSMS per Menü erstellt werden sondern nur über TSQL:
CREATE DATABASE SnapshotDbName ON
( NAME = originalDbFileNameLogisch, FILENAME = 'Pfad zu neu zu erstellender Snapshot Datei' )
AS SNAPSHOT OF OrignialDbName;
GO
beim erstellen des Snapshots ist der logische Filename nicht frei wählbar, sondern der logische Name des Datenfiles in der Original Db,sonst erhält man:
Msg 5014, Level 16, State 3, Line 1
The file 'TestSS20110404_Data' does not exist in database 'Test'.
Wichtig: die Original Datenbank darf nicht im No Recovery Mode sein sonst erhält man:
Msg 1822, Level 16, State 1, Line 1
The database must be online to have a database snapshot.
z.b.:
CREATE DATABASE TestSS20110406 ON
( NAME = Test, FILENAME = 'E:\SqlDbs\TestSS20110406.ss' )
AS SNAPSHOT OF Test;
GO
erstellt unter Datenbanken\Snapshots eine readonly Kopie der Datenbank Test, die nur ein physikalisches Datenfile mit logischem Namen Test hat (siehe DatenbankProperties\Files)
CREATE DATABASE SnapshotDbName ON
( NAME = originalDbFileNameLogisch, FILENAME = 'Pfad zu neu zu erstellender Snapshot Datei' )
AS SNAPSHOT OF OrignialDbName;
GO
beim erstellen des Snapshots ist der logische Filename nicht frei wählbar, sondern der logische Name des Datenfiles in der Original Db,sonst erhält man:
Msg 5014, Level 16, State 3, Line 1
The file 'TestSS20110404_Data' does not exist in database 'Test'.
Wichtig: die Original Datenbank darf nicht im No Recovery Mode sein sonst erhält man:
Msg 1822, Level 16, State 1, Line 1
The database must be online to have a database snapshot.
z.b.:
CREATE DATABASE TestSS20110406 ON
( NAME = Test, FILENAME = 'E:\SqlDbs\TestSS20110406.ss' )
AS SNAPSHOT OF Test;
GO
erstellt unter Datenbanken\Snapshots eine readonly Kopie der Datenbank Test, die nur ein physikalisches Datenfile mit logischem Namen Test hat (siehe DatenbankProperties\Files)
Tuesday, April 05, 2011
Monday, April 04, 2011
Sql Server Replikation / Log Shipping 2005->2008R2
Replikation Sql Server 2005 SP3-> 2008R2:
=========================================
generell: wenn man vom SSMS (Sql Server Management Studio) Replikation einrichten will, muß man sich mit dem Netzwerknamen des Servers einloggen, nicht mit localhost, IP Adressen oder sonstigen Aliasen, sonst erhält man die irreführende Fehlermeldung: MMSM is unable to access replication components because replication is not installed on this instance of SQL Server.
Für die Publikation ist ein Distributer nötig (rechte Maustaste auf Replikations Knoten im SSMS)
Snapshot:
---------
geht ohne Probleme
Transactional:
-------------
geht, die zu replizierenden Tabellen müssen einen primary key haben, sonst erhält man: Database 'DB_NAME' contains no objects that can be replicated with the selected publication type. Click Back to choose another database or change the publication type, Performance: Distributor auf eigenem server
Merge:
------
Fehlermeldung "For merge Publications, the version of the Subscriber must not exceed the version of the Publisher."
LogShipping:
============
geht nur im "No Recovery Mode" und nicht im Standby Mode
=========================================
generell: wenn man vom SSMS (Sql Server Management Studio) Replikation einrichten will, muß man sich mit dem Netzwerknamen des Servers einloggen, nicht mit localhost, IP Adressen oder sonstigen Aliasen, sonst erhält man die irreführende Fehlermeldung: MMSM is unable to access replication components because replication is not installed on this instance of SQL Server.
Für die Publikation ist ein Distributer nötig (rechte Maustaste auf Replikations Knoten im SSMS)
Snapshot:
---------
geht ohne Probleme
Transactional:
-------------
geht, die zu replizierenden Tabellen müssen einen primary key haben, sonst erhält man: Database 'DB_NAME' contains no objects that can be replicated with the selected publication type. Click Back to choose another database or change the publication type, Performance: Distributor auf eigenem server
Merge:
------
Fehlermeldung "For merge Publications, the version of the Subscriber must not exceed the version of the Publisher."
LogShipping:
============
geht nur im "No Recovery Mode" und nicht im Standby Mode
Tuesday, March 29, 2011
RunDLL und RunDLL32
Zitat: "RunDLL ruft Funktionen auf, die entweder aus 16bit-DLLs (RunDLL.exe) oder 32bit-DLLs (RunDLL32.exe) exportiert werden. RunDLL unterstützt diese Funktionalität nur für solche DLLs, die diese Aufruf-Möglichkeit explizit unterstützen - so können beispielsweise die System-DLLs des API nicht genutzt werden." Source/Quelle: BasicPro
Die generelle Syntax für die Nutzung von RunDLL:
RUNDLL.EXE, [opt. Argumente]
bzw.
RUNDLL32.EXE, [opt. Argumente]
Bei Ausfürung ist die Groß/Kleinschreibung zu beachten!
Oder sind Sie speziell auf der Suche nach Druckersteuerung per Kommandzeile?
--------------------------------------------------------------------------------
Praktische Anwendungsmöglichkeiten
Allgemein:
rundll32.exe shell32.dll,Control_RunDLL
Zeigt die Systemsteuerung in Explorer-Stil an.
Eingabehilfen: (Modul: access.cpl)
rundll32.exe shell32.dll,Control_RunDLL access.cpl,,1
Zeigt die Tastatur-Eigenschaften für die Eingabehilfen an.
rundll32.exe shell32.dll,Control_RunDLL access.cpl,,2
Zeigt die Audio-Eigenschaften für die Eingabehilfen an.
rundll32.exe shell32.dll,Control_RunDLL access.cpl,,3
Zeigt die Anzeige-Eigenschaften für die Eingabehilfen an.
rundll32.exe shell32.dll,Control_RunDLL access.cpl,,4
Zeigt die Maus-Eigenschaften für die Eingabehilfen an.
rundll32.exe shell32.dll,Control_RunDLL access.cpl,,5
Zeigt die generellen Eigenschaften für die Eingabehilfen an.
Anzeige: (Modul: desk.cpl)
rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,0
Zeigt "Eigenschaften von Anzeige - Hintergrund" an.
rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,1
Zeigt "Eigenschaften von Anzeige - Bildschirmschoner" an.
rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,2
Zeigt "Eigenschaften von Anzeige - Darstellung" an.
rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,3
Zeigt "Eigenschaften von Anzeige - Einstellungen" an.
Grundeinstellungen: (Modul: main.cpl)
rundll32.exe shell32.dll,Control_RunDLL main.cpl @0
Zeigt "Eigenschaften von Maus - Tasten" an.
rundll32.exe shell32.dll,Control_RunDLL main.cpl @1
Zeigt "Eigenschaften von Tastatur - Geschwindigkeit" an.
rundll32.exe shell32.dll,Control_RunDLL main.cpl @1,1
Zeigt "Eigenschaften von Tastatur - Sprache" an.
rundll32.exe shell32.dll,Control_RunDLL main.cpl @1,2
Zeigt "Eigenschaften von Tastatur - Allgemein" an.
rundll32.exe shell32.dll,Control_RunDLL main.cpl @2
Zeigt den Drucker-Ordner im Explorer-Stil an.
rundll32.exe shell32.dll,Control_RunDLL main.cpl @3
Zeigt den Schriftarten-Ordner im Explorer-Stil an.
rundll32.exe shell32.dll,Control_RunDLL main.cpl @4
Zeigt die Energiesparfunktionen an.
Multimedia: (Modul: mmsys.cpl)
rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,0
Zeigt "Eigenschaften von Multimedia - Audio" an.
rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,1 Zeigt "Eigenschaften von Multimedia - Video" an.
rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,2
Zeigt "Eigenschaften von Multimedia - MIDI" an.
rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,3
Zeigt "Eigenschaften von Multimedia - Musik-CD" an.
rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,4
Zeigt "Eigenschaften von Multimedia - Erweitert" an.
rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl @1
Zeigt den Dialog "Akustische Signale" an.
Ländereinstellungen:(Modul: intl.cpl)
rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,0
Zeigt "Eigenschaften von Ländereinstellungen - Gebietsschema" an.
rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,1
Zeigt "Eigenschaften von Ländereinstellungen - Zahlen" an.
rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,2
Zeigt "Ländereinstellungen - Währung" an.
rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,3
Zeigt "Ländereinstellungen - Uhrzeit" an.
rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,4
Zeigt "Ländereinstellungen - Datum" an.
System:(Modul: sysdm.cpl)
rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,0
Zeigt "Eigenschaften für System - Allgemein" an.
rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,1
Zeigt "Eigenschaften für System - Geräte-Manager" an.
rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,2
Zeigt "Eigenschaften für System - Hardwareprofile" an.
rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,3
Zeigt "Eigenschaften für System - Leistungsmerkmale" an.
rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl @1
Zeigt den Hardware-Assistenten zur Installation neuer Hardware-Komponenten an.
Netzwerk: (Modul: netcpl.cpl)
rundll32.exe shell32.dll,Control_RunDLL netcpl.cpl
Zeigt die "Netzwerk - Konfiguration" an.
Kennwörter: (Modul: password.cpl)
rundll32.exe shell32.dll,Control_RunDLL password.cpl
Zeigt "Eigenschaften von Kennwörter - Kennwörter ändern" an.
Datum/Uhrzeit: (Modul: timedate.cpl)
rundll32.exe shell32.dll,Control_RunDLL timedate.cpl
Zeigt "Eigenschaften von Datum/Uhrzeit- Datum und Uhrzeit" an.
rundll32.exe shell32.dll,Control_RunDLL timedate.cpl,,1
Zeigt "Eigenschaften von Datum/Uhrzeit- Zeitzone" an.
Joystick: (Modul: joy.cpl)
rundll32.exe shell32.dll,Control_RunDLL joy.cpl
Zeigt "Eigenschaften von Joystick- Joystick" an.
Modems: (Modul: modem.cpl)
rundll32.exe shell32.dll,Control_RunDLL modem.cpl
Zeigt "Eigenschaften für Modems - Allgemein" an.
rundll32.exe shell32.dll,Control_RunDLL modem.cpl,,add
Zeigt den Wizard "Neus Modem installieren" an.
Software: (Modul: appwiz.cpl)
rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl
Zeigt "Eigenschaften von Software - Installieren/Deinstallieren" an.
rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,2
Zeigt "Eigenschaften von Software - Windows-Setup" an.
rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,3
Zeigt "Eigenschaften von Software - Startdiskette" an.
rundll32.exe appwiz.cpl,NewLinkHere c:\temp
Startet den Verknüpfungs-Assistenten und legt im angegebenen Verzeichnis die vom Benutzer angegebene Verknüpfung an
Sonstiges:
rundll32.exe shell32.dll,Control_FillCache_RunDLL
Läßt Windows die Systemsteuerung neu einrichten.
rundll32.exe shell32.dll,Control_RunDLL wgpocpl.cpl
Zeigt den Administrator-Dialog für ein Microsoft Workgroup-Postoffice an.
rundll32.exe shell32.dll,OpenAs_RunDLL c:\datei.asd
Zeigt den "Öffnen mit"-Dialog an und assoziiert (bei entsprechend aktivierter Dialog-Option) bei Anwendungsauswahl die Dateiendung (hier: .asd) mit der ausgewählten Anwendung.
rundll32.exe shell32.dll,SHFormatDrive
Zeigt den "Diskette formatieren"-Dialog an.
rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL AddPrinter
Ruft den Assistenten für die Druckerinstallation auf.
rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL PrintTestPage
Druckt eine Testseite auf dem aktuellen Drucker.
rundll32.exe rnaui.dll,RnaWizard
Ruft den Assistenten für eine DFÜ-Netzwerkverbindung auf (mit vorheriger Erklärung).
rundll32.exe rnaui.dll,RnaWizard @1
Ruft den Assistenten für eine DFÜ-Netzwerkverbindung auf (ohne Erklärung).
rundll32.exe rnaui.dll,RnaDial Internet
Ruft den Assistenten "Verbinden mit" mit dem angegebenen Verbindungsnamen auf.
rundll32.exe syncui.dll,Briefcase_Intro
Zeigt ein Informationsfenster zum Windows-Aktenkoffer an.
rundll32.exe syncui.dll,Briefcase_Create
Legt einen neuen Aktenkoffer an (nähere Verwendung noch unklar).
rundll32.exe diskcopy.dll,DiskCopyRunDll
Ruft den Dialog "Diskette kopieren" auf.
rundll32.exe sysdm.cpl,DMFistTimeSetup
Ruft den (alleine recht sinnfreien) Dialog "Hardwarekonfiguration" mit einer Meldung "Die Konfiguration des Computers wird vervollständigt" auf.
rundll32.exe url.dll,FileProtocolHandler http://masterbootrecord.de
Ruft die angegebene Datei oder Adresse in der assoziierten Anwendung auf.
rundll32.exe url.dll,TelnetProtocolHandler 194.45.127.79
Stellt eine Telnet-Verbindung zum angegebenen Rechner her.
rundll32.exe url.dll,MailToProtocolHandler webmaster@masterbootrecord.de
Ruft das Standard-Mailprogramm auf.
rundll32.exe url.dll,NewsProtocolHandler de.prog.perl
Ruft den Standard-Newsreader auf.
rundll32.exe shell32.dll,Control_RunDLL mlcfg32.cpl
Zeigt die Eigenschaftsseite des Microsoft-Exchange-Profils an.
rundll32.exe desk.cpl,InstallScreenSaver c:\windows\system\ssaver.scr
Installiert einen vorhandenen Bildschirmschoner.
rundll32.exe shell32.dll,Control_RunDLL inetcpl.cpl @1
Zeigt (bei installiertem Internet Explorer) den Dialog "Benutzereinstellungen - Benutzerliste" an.
rundll32.exe shell32.dll,Control_RunDLL inetcpl.cpl,,0
Zeigt (bei installiertem Internet Explorer) den Dialog "Eigenschaften von Internet - Allgemein" an.
Rundll32.exe user,ExitWindows
Beendet Windows.
Rundll32.exe user,ExitWindowsExec
Startet Windows neu.
Rundll32.exe krnl386.exe,exitkernel
Beendet Windows auf eine unsanfte Art...
Rundll32.exe user,disableoemlayer
Lässt Windows die grafische Oberfläche deaktivieren. Man sieht nur noch einen Blinkenden Cursor... Netter Gag.
Rundll32.exe user,repaintscreen
Aktualisiert die Anzeige (F5).
Rundll32.exe user,setcursorpos
Setzt den Mauscursor in die linke obere Ecke.
Rundll32.exe user,swapmousebutton
Vertauscht bis zum nächsten Neustart die beiden Maustasten.
Rundll32.exe keyboard,disable
Deaktiviert bis zum nächsten Neustart die Tastatur.
Rundll32.exe mouse,disable
Deaktiviert bis zum nächsten Neustart die Maus.
Die generelle Syntax für die Nutzung von RunDLL:
RUNDLL.EXE
bzw.
RUNDLL32.EXE
Bei Ausfürung ist die Groß/Kleinschreibung zu beachten!
Oder sind Sie speziell auf der Suche nach Druckersteuerung per Kommandzeile?
--------------------------------------------------------------------------------
Praktische Anwendungsmöglichkeiten
Allgemein:
rundll32.exe shell32.dll,Control_RunDLL
Zeigt die Systemsteuerung in Explorer-Stil an.
Eingabehilfen: (Modul: access.cpl)
rundll32.exe shell32.dll,Control_RunDLL access.cpl,,1
Zeigt die Tastatur-Eigenschaften für die Eingabehilfen an.
rundll32.exe shell32.dll,Control_RunDLL access.cpl,,2
Zeigt die Audio-Eigenschaften für die Eingabehilfen an.
rundll32.exe shell32.dll,Control_RunDLL access.cpl,,3
Zeigt die Anzeige-Eigenschaften für die Eingabehilfen an.
rundll32.exe shell32.dll,Control_RunDLL access.cpl,,4
Zeigt die Maus-Eigenschaften für die Eingabehilfen an.
rundll32.exe shell32.dll,Control_RunDLL access.cpl,,5
Zeigt die generellen Eigenschaften für die Eingabehilfen an.
Anzeige: (Modul: desk.cpl)
rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,0
Zeigt "Eigenschaften von Anzeige - Hintergrund" an.
rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,1
Zeigt "Eigenschaften von Anzeige - Bildschirmschoner" an.
rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,2
Zeigt "Eigenschaften von Anzeige - Darstellung" an.
rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,3
Zeigt "Eigenschaften von Anzeige - Einstellungen" an.
Grundeinstellungen: (Modul: main.cpl)
rundll32.exe shell32.dll,Control_RunDLL main.cpl @0
Zeigt "Eigenschaften von Maus - Tasten" an.
rundll32.exe shell32.dll,Control_RunDLL main.cpl @1
Zeigt "Eigenschaften von Tastatur - Geschwindigkeit" an.
rundll32.exe shell32.dll,Control_RunDLL main.cpl @1,1
Zeigt "Eigenschaften von Tastatur - Sprache" an.
rundll32.exe shell32.dll,Control_RunDLL main.cpl @1,2
Zeigt "Eigenschaften von Tastatur - Allgemein" an.
rundll32.exe shell32.dll,Control_RunDLL main.cpl @2
Zeigt den Drucker-Ordner im Explorer-Stil an.
rundll32.exe shell32.dll,Control_RunDLL main.cpl @3
Zeigt den Schriftarten-Ordner im Explorer-Stil an.
rundll32.exe shell32.dll,Control_RunDLL main.cpl @4
Zeigt die Energiesparfunktionen an.
Multimedia: (Modul: mmsys.cpl)
rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,0
Zeigt "Eigenschaften von Multimedia - Audio" an.
rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,1 Zeigt "Eigenschaften von Multimedia - Video" an.
rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,2
Zeigt "Eigenschaften von Multimedia - MIDI" an.
rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,3
Zeigt "Eigenschaften von Multimedia - Musik-CD" an.
rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,4
Zeigt "Eigenschaften von Multimedia - Erweitert" an.
rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl @1
Zeigt den Dialog "Akustische Signale" an.
Ländereinstellungen:(Modul: intl.cpl)
rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,0
Zeigt "Eigenschaften von Ländereinstellungen - Gebietsschema" an.
rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,1
Zeigt "Eigenschaften von Ländereinstellungen - Zahlen" an.
rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,2
Zeigt "Ländereinstellungen - Währung" an.
rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,3
Zeigt "Ländereinstellungen - Uhrzeit" an.
rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,4
Zeigt "Ländereinstellungen - Datum" an.
System:(Modul: sysdm.cpl)
rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,0
Zeigt "Eigenschaften für System - Allgemein" an.
rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,1
Zeigt "Eigenschaften für System - Geräte-Manager" an.
rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,2
Zeigt "Eigenschaften für System - Hardwareprofile" an.
rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,3
Zeigt "Eigenschaften für System - Leistungsmerkmale" an.
rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl @1
Zeigt den Hardware-Assistenten zur Installation neuer Hardware-Komponenten an.
Netzwerk: (Modul: netcpl.cpl)
rundll32.exe shell32.dll,Control_RunDLL netcpl.cpl
Zeigt die "Netzwerk - Konfiguration" an.
Kennwörter: (Modul: password.cpl)
rundll32.exe shell32.dll,Control_RunDLL password.cpl
Zeigt "Eigenschaften von Kennwörter - Kennwörter ändern" an.
Datum/Uhrzeit: (Modul: timedate.cpl)
rundll32.exe shell32.dll,Control_RunDLL timedate.cpl
Zeigt "Eigenschaften von Datum/Uhrzeit- Datum und Uhrzeit" an.
rundll32.exe shell32.dll,Control_RunDLL timedate.cpl,,1
Zeigt "Eigenschaften von Datum/Uhrzeit- Zeitzone" an.
Joystick: (Modul: joy.cpl)
rundll32.exe shell32.dll,Control_RunDLL joy.cpl
Zeigt "Eigenschaften von Joystick- Joystick" an.
Modems: (Modul: modem.cpl)
rundll32.exe shell32.dll,Control_RunDLL modem.cpl
Zeigt "Eigenschaften für Modems - Allgemein" an.
rundll32.exe shell32.dll,Control_RunDLL modem.cpl,,add
Zeigt den Wizard "Neus Modem installieren" an.
Software: (Modul: appwiz.cpl)
rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl
Zeigt "Eigenschaften von Software - Installieren/Deinstallieren" an.
rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,2
Zeigt "Eigenschaften von Software - Windows-Setup" an.
rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,3
Zeigt "Eigenschaften von Software - Startdiskette" an.
rundll32.exe appwiz.cpl,NewLinkHere c:\temp
Startet den Verknüpfungs-Assistenten und legt im angegebenen Verzeichnis die vom Benutzer angegebene Verknüpfung an
Sonstiges:
rundll32.exe shell32.dll,Control_FillCache_RunDLL
Läßt Windows die Systemsteuerung neu einrichten.
rundll32.exe shell32.dll,Control_RunDLL wgpocpl.cpl
Zeigt den Administrator-Dialog für ein Microsoft Workgroup-Postoffice an.
rundll32.exe shell32.dll,OpenAs_RunDLL c:\datei.asd
Zeigt den "Öffnen mit"-Dialog an und assoziiert (bei entsprechend aktivierter Dialog-Option) bei Anwendungsauswahl die Dateiendung (hier: .asd) mit der ausgewählten Anwendung.
rundll32.exe shell32.dll,SHFormatDrive
Zeigt den "Diskette formatieren"-Dialog an.
rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL AddPrinter
Ruft den Assistenten für die Druckerinstallation auf.
rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL PrintTestPage
Druckt eine Testseite auf dem aktuellen Drucker.
rundll32.exe rnaui.dll,RnaWizard
Ruft den Assistenten für eine DFÜ-Netzwerkverbindung auf (mit vorheriger Erklärung).
rundll32.exe rnaui.dll,RnaWizard @1
Ruft den Assistenten für eine DFÜ-Netzwerkverbindung auf (ohne Erklärung).
rundll32.exe rnaui.dll,RnaDial Internet
Ruft den Assistenten "Verbinden mit" mit dem angegebenen Verbindungsnamen auf.
rundll32.exe syncui.dll,Briefcase_Intro
Zeigt ein Informationsfenster zum Windows-Aktenkoffer an.
rundll32.exe syncui.dll,Briefcase_Create
Legt einen neuen Aktenkoffer an (nähere Verwendung noch unklar).
rundll32.exe diskcopy.dll,DiskCopyRunDll
Ruft den Dialog "Diskette kopieren" auf.
rundll32.exe sysdm.cpl,DMFistTimeSetup
Ruft den (alleine recht sinnfreien) Dialog "Hardwarekonfiguration" mit einer Meldung "Die Konfiguration des Computers wird vervollständigt" auf.
rundll32.exe url.dll,FileProtocolHandler http://masterbootrecord.de
Ruft die angegebene Datei oder Adresse in der assoziierten Anwendung auf.
rundll32.exe url.dll,TelnetProtocolHandler 194.45.127.79
Stellt eine Telnet-Verbindung zum angegebenen Rechner her.
rundll32.exe url.dll,MailToProtocolHandler webmaster@masterbootrecord.de
Ruft das Standard-Mailprogramm auf.
rundll32.exe url.dll,NewsProtocolHandler de.prog.perl
Ruft den Standard-Newsreader auf.
rundll32.exe shell32.dll,Control_RunDLL mlcfg32.cpl
Zeigt die Eigenschaftsseite des Microsoft-Exchange-Profils an.
rundll32.exe desk.cpl,InstallScreenSaver c:\windows\system\ssaver.scr
Installiert einen vorhandenen Bildschirmschoner.
rundll32.exe shell32.dll,Control_RunDLL inetcpl.cpl @1
Zeigt (bei installiertem Internet Explorer) den Dialog "Benutzereinstellungen - Benutzerliste" an.
rundll32.exe shell32.dll,Control_RunDLL inetcpl.cpl,,0
Zeigt (bei installiertem Internet Explorer) den Dialog "Eigenschaften von Internet - Allgemein" an.
Rundll32.exe user,ExitWindows
Beendet Windows.
Rundll32.exe user,ExitWindowsExec
Startet Windows neu.
Rundll32.exe krnl386.exe,exitkernel
Beendet Windows auf eine unsanfte Art...
Rundll32.exe user,disableoemlayer
Lässt Windows die grafische Oberfläche deaktivieren. Man sieht nur noch einen Blinkenden Cursor... Netter Gag.
Rundll32.exe user,repaintscreen
Aktualisiert die Anzeige (F5).
Rundll32.exe user,setcursorpos
Setzt den Mauscursor in die linke obere Ecke.
Rundll32.exe user,swapmousebutton
Vertauscht bis zum nächsten Neustart die beiden Maustasten.
Rundll32.exe keyboard,disable
Deaktiviert bis zum nächsten Neustart die Tastatur.
Rundll32.exe mouse,disable
Deaktiviert bis zum nächsten Neustart die Maus.
Thursday, January 27, 2011
Default Value bei Stored Procedure TSQl
ALTER PROCEDURE testRaiseError
@Severity int =18
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
Raiserror('Test Raiserrror',@Severity,10)
END
@Severity int =18
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
Raiserror('Test Raiserrror',@Severity,10)
END
Transaktionen und Fehlerbehandlung in TSQL
Beispiel Insert und Update in einer Transaktion, wenn eines fehlschlägt wird zurückgerollt und der Fehler weitergegeben
BEGIN TRAN T1
BEGIN TRY
--write all values to mcit.auditrail (@UserId)
INSERT INTO [AuditTrail] ([ActionType],[ObjectType],[ObjectId],[OldValues],[NewValues],[UserId])
SELECT 'Update','Products',Id,CONVERT(Nvarchar(MAX),Price),CONVERT(Nvarchar(MAX),Price*@PriceFact),@UserId
from product where [year]=@Year and SupplierGroupId=@SupplierGroupId and IsDeleted=0
update mcit.product set Price=Price*@PriceFact where [year]=@Year and SupplierGroupId=@SupplierGroupId and IsDeleted=0
END TRY
BEGIN CATCH
print 'Fehler in Transaktion aufgetreten - Rolle zurück'
ROLLBACK TRAN T1
DECLARE @MSG NVARCHAR(MAX) SET @MSG=ERROR_MESSAGE()
DECLARE @SEV INT SET @SEV=ERROR_SEVERITY()
DECLARE @STA INT SET @STA=ERROR_STATE()
RAISERROR (@MSG,@SEV,@STA)
RETURN
END CATCH
COMMIT TRAN T1
END
BEGIN TRAN T1
BEGIN TRY
--write all values to mcit.auditrail (@UserId)
INSERT INTO [AuditTrail] ([ActionType],[ObjectType],[ObjectId],[OldValues],[NewValues],[UserId])
SELECT 'Update','Products',Id,CONVERT(Nvarchar(MAX),Price),CONVERT(Nvarchar(MAX),Price*@PriceFact),@UserId
from product where [year]=@Year and SupplierGroupId=@SupplierGroupId and IsDeleted=0
update mcit.product set Price=Price*@PriceFact where [year]=@Year and SupplierGroupId=@SupplierGroupId and IsDeleted=0
END TRY
BEGIN CATCH
print 'Fehler in Transaktion aufgetreten - Rolle zurück'
ROLLBACK TRAN T1
DECLARE @MSG NVARCHAR(MAX) SET @MSG=ERROR_MESSAGE()
DECLARE @SEV INT SET @SEV=ERROR_SEVERITY()
DECLARE @STA INT SET @STA=ERROR_STATE()
RAISERROR (@MSG,@SEV,@STA)
RETURN
END CATCH
COMMIT TRAN T1
END
Monday, January 24, 2011
MSI entpacken mittels MSIEXEC
msiexec /a DATEINAME.msi /qn TARGETDIR="PFAD"
wichtig: Rargetidrpfad muss nicht existieren, darf aber nicht das msi file enthalten
wichtig: Rargetidrpfad muss nicht existieren, darf aber nicht das msi file enthalten
Monday, December 27, 2010
sqlserver managementstuido spaltenüberschriften in abfrageergebnis Copy
Tuesday, December 21, 2010
COM (OLE) Server in C#
Com Überblick:
OLE Automation dient dem Zugriff auf Com Objekten con Script Sprachen aus, diese benötigen ein Late Binding, da ja kein Compiler vorhanden ist, der das Binding vor der Laufzeit macht. Daher gibt es das IDispatch Interface, alle OLE Server müssen dieses Implementieren.
In c# erledigt die ganze Interfacedefinition usw. die Attributierung der Klasse, die COM zur Verfügung gestellt werden soll - wichtig: in VS2008 und VS2010 muss man ComVisible(true) explizit angeben, früher war dies im Attribut ClassInterface enthalten ... im Projekt vom Typ Class Library sollte unter Properties/Build/Output register for Com interop angehackt sein, das registriert den OLE Server gleich und generiert die Type Librarty, die für Script Sprachen die vorhandenen Methoden zur Verfügung stellt. Man kann dies aber auch mit regasm oder tlbexp Ole6.dll /out:Ole5.tlb machen
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace Ole6
{
[Guid("9C78E2DB-E664-47BE-A2C2-213AA2005078"),
ClassInterface(ClassInterfaceType.AutoDual),
ComVisible(true)]
public class Ole6
{
public Ole6() { }
public string Test()
{
return "Test";
}
}
}
OLE Automation dient dem Zugriff auf Com Objekten con Script Sprachen aus, diese benötigen ein Late Binding, da ja kein Compiler vorhanden ist, der das Binding vor der Laufzeit macht. Daher gibt es das IDispatch Interface, alle OLE Server müssen dieses Implementieren.
In c# erledigt die ganze Interfacedefinition usw. die Attributierung der Klasse, die COM zur Verfügung gestellt werden soll - wichtig: in VS2008 und VS2010 muss man ComVisible(true) explizit angeben, früher war dies im Attribut ClassInterface enthalten ... im Projekt vom Typ Class Library sollte unter Properties/Build/Output register for Com interop angehackt sein, das registriert den OLE Server gleich und generiert die Type Librarty, die für Script Sprachen die vorhandenen Methoden zur Verfügung stellt. Man kann dies aber auch mit regasm oder tlbexp Ole6.dll /out:Ole5.tlb machen
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace Ole6
{
[Guid("9C78E2DB-E664-47BE-A2C2-213AA2005078"),
ClassInterface(ClassInterfaceType.AutoDual),
ComVisible(true)]
public class Ole6
{
public Ole6() { }
public string Test()
{
return "Test";
}
}
}
Sunday, December 19, 2010
.net TextfileTracelistener adden
ins app.config File einfügen:
system.diagnostics
trace autoflush="true" indentsize="2"
listeners
add name="textfilelistener" type="System.Diagnostics.TextWriterTraceListener" initializeData="Log.txt"
listeners
trace
system.diagnostics
im code verwenden:
Trace.TraceInformation(Application.ExecutablePath + " started at " + DateTime.Now.ToString());
system.diagnostics
trace autoflush="true" indentsize="2"
listeners
add name="textfilelistener" type="System.Diagnostics.TextWriterTraceListener" initializeData="Log.txt"
listeners
trace
system.diagnostics
im code verwenden:
Trace.TraceInformation(Application.ExecutablePath + " started at " + DateTime.Now.ToString());
windows forms anzeige refrehsen während hintergrundtask im selben thread läuft
eigentlich ist es ja nicht schön, einen längerdauernden task im GUI Thread laufen zu lassen, aber bei quick & dirty testforms macht es ab und zu sinn. Wenn man den status des länger dauernden tasks dann anzeigen will, ist es sinnvoll nicht nur
this.refresh(); aufs formular in der langdauernden schleife aufzurufen sondern auch
Application.DoEvents(); ... dann werden die ganzen Windwos Messages abgearbeitte, die z.b. durch progressbar.PerformStep() ausgelöst werden ...
this.refresh(); aufs formular in der langdauernden schleife aufzurufen sondern auch
Application.DoEvents(); ... dann werden die ganzen Windwos Messages abgearbeitte, die z.b. durch progressbar.PerformStep() ausgelöst werden ...
Thursday, December 02, 2010
eigene config klasse
muss von ConfigurationSection abgeleitet sein, braucht eine Property SectionName, anbei der Code zum lesen und Schreiben, bei Fehlersuche ist es ratsam im Visual Studio unter Debug/Exceptions bei CLR Exceptions das Häckchen bei Thrown anzuhacken, da Fehler sonst vom Configurationmanager unterdrückt werden. Aktiviert man aber dass die Ausführung bei thrown Exceptions unterbricht,bekommt man die Orignal Fehlermeldung des Configurationmanagers.
private string _SectionName;
public string Name
{
get
{
return this.SectionInformation.Name;
}
}
public string SectionName
{
get
{
return _SectionName;
}
set
{
_SectionName = value;
}
}
public static List GetSectionsFromConfig()
{
Configuration c = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
ConfigurationSectionGroup csg = c.GetSectionGroup("DataContextParams");
List ldcp = new List();
foreach (DataContextParams dcp in csg.Sections)
{
ldcp.Add(dcp);
}
return ldcp;
}
///
/// schreibt dieses Objekt in die Config
///
/// wenn null wird in die execonfig geschrieben
public void SaveSectionToConfig(string configfile)
{
ExeConfigurationFileMap oConfigFile = new ExeConfigurationFileMap();
Configuration oConfiguration;
if (null == configfile)
{
oConfiguration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
}
else
{
oConfigFile.ExeConfigFilename = configfile;
oConfiguration = ConfigurationManager.OpenMappedExeConfiguration(oConfigFile, ConfigurationUserLevel.None);
}
//Add it to the configuration's sections
oConfiguration.Sections.Add(SectionName, this);
//Save the given section in the configuration file
this.SectionInformation.ForceSave = true;
oConfiguration.Save(ConfigurationSaveMode.Full);
}
private string _SectionName;
public string Name
{
get
{
return this.SectionInformation.Name;
}
}
public string SectionName
{
get
{
return _SectionName;
}
set
{
_SectionName = value;
}
}
public static List
{
Configuration c = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
ConfigurationSectionGroup csg = c.GetSectionGroup("DataContextParams");
List
foreach (DataContextParams dcp in csg.Sections)
{
ldcp.Add(dcp);
}
return ldcp;
}
///
/// schreibt dieses Objekt in die Config
///
/// wenn null wird in die execonfig geschrieben
public void SaveSectionToConfig(string configfile)
{
ExeConfigurationFileMap oConfigFile = new ExeConfigurationFileMap();
Configuration oConfiguration;
if (null == configfile)
{
oConfiguration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
}
else
{
oConfigFile.ExeConfigFilename = configfile;
oConfiguration = ConfigurationManager.OpenMappedExeConfiguration(oConfigFile, ConfigurationUserLevel.None);
}
//Add it to the configuration's sections
oConfiguration.Sections.Add(SectionName, this);
//Save the given section in the configuration file
this.SectionInformation.ForceSave = true;
oConfiguration.Save(ConfigurationSaveMode.Full);
}
schreiben in app.config
Configuration configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
configuration.AppSettings.Settings.Remove("Test");
configuration.AppSettings.Settings.Add("Test","meinTestWert");
configuration.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings");
configuration.AppSettings.Settings.Remove("Test");
configuration.AppSettings.Settings.Add("Test","meinTestWert");
configuration.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings");
Tuesday, November 16, 2010
PostgresSql
einspieln von sql scripts:
-h host
--username=...
-f file
-d datenbank
psql -h localhost --username=s2010_admin -f c:\sql\test.sql -d s2010
autoincrement=bigserial (=8byte integer), zusätzlich primary key angeben !
create table Einnahmeform ( javascript:void(0)
ID BIGSERIAL CONSTRAINT PK PRIMARY KEY,
Einnahmeform varchar(80)
);
alle tabellen in einem schema
SELECT table_name FROM information_schema.tables where table_schema='schemaname'
-h host
--username=...
-f file
-d datenbank
psql -h localhost --username=s2010_admin -f c:\sql\test.sql -d s2010
autoincrement=bigserial (=8byte integer), zusätzlich primary key angeben !
create table Einnahmeform ( javascript:void(0)
ID BIGSERIAL CONSTRAINT PK PRIMARY KEY,
Einnahmeform varchar(80)
);
alle tabellen in einem schema
SELECT table_name FROM information_schema.tables where table_schema='schemaname'
Thursday, October 21, 2010
delagtes Übersicht
delegate void TestDelegate(string s);
TestDelegate testDelA = new TestDelegate(M); //C#1.0 explicite Method M must me declared
TestDelegate testDelB = delegate(string s) { Console.WriteLine(s); }; //C#2.0 inline "anonymos method
TestDelegate testDelC = (x) => { Console.WriteLine(x); }; // C# 3.0. lambda expr.
Action TestDelegate; //C#4.0 DelegateDefinition einfacher //C# 4.0 Actions
In Windows Forms muss eine anonyme Methode noch zu einem MethodInvoker konvertiert werden:
this.Invoke(new MethodInvoker(delegate() { pgbStatus.Minimum = 0; }));
In Wpf zu einer Action:
Application.Current.Dispatcher.Invoke((Action)delegate
{
SetButtonsEnabled(true);
}, null);
TestDelegate testDelA = new TestDelegate(M); //C#1.0 explicite Method M must me declared
TestDelegate testDelB = delegate(string s) { Console.WriteLine(s); }; //C#2.0 inline "anonymos method
TestDelegate testDelC = (x) => { Console.WriteLine(x); }; // C# 3.0. lambda expr.
Action
In Windows Forms muss eine anonyme Methode noch zu einem MethodInvoker konvertiert werden:
this.Invoke(new MethodInvoker(delegate() { pgbStatus.Minimum = 0; }));
In Wpf zu einer Action:
Application.Current.Dispatcher.Invoke((Action)delegate
{
SetButtonsEnabled(true);
}, null);
Sql Server 2008 Resource Governator
Resource Governtor steuert CPU und Memory Consumption von Connections. Eine ResourceGovernorClassifier Funktion wird verwendet um LoginName zu einer Workloadgruppe zuzuordnen, die ihrerseits wieder einem ResourcePool zugeordnet ist. Ein Resourcepool kann mehrere Workloadgruppen haben, die sich auch in Resourcezuordnung unterscheiden können, also ein 2 stufiges Resourcevergabeschema.
Funktion zum Zuordnen der Logins zu den Workloadgruppen (setzt Vorraus dass diese existieren):
Alter Function dbo.fn_ResourceGovernorClassifier()
Returns sysname
WITH Schemabinding
as
BEGIN
DECLARE @group sysname
IF SUSER_SNAME()='Executive' SET @group='ExecutivesWL'
ELSE IF SUSER_SNAME()='Customer' SET @group='CustomersWL'
ELSE IF SUSER_SNAME()='Report' SET @group='ReportWG'
ELSE SET @group='default'
RETURN @group
END
GO
ALTER RESOURCE GOVERNOR WITH (Classifier_Function = dbo.fn_ResourceGovernorClassifier)
GO
ALTER RESOURCE GOVERNOR RECONFIGURE
GO
Create Login Executive with password='pwd'
Create Login Customer with password='pwd'
Create Login Report with password='pwd'
SELECT b.name,a.login_name, a.session_id
from sys.dm_exec_sessions a inner join sys.dm_resource_governor_workload_groups b on a.group_id=b.group_id
where b.name<>'internal'
Funktion zum Zuordnen der Logins zu den Workloadgruppen (setzt Vorraus dass diese existieren):
Alter Function dbo.fn_ResourceGovernorClassifier()
Returns sysname
WITH Schemabinding
as
BEGIN
DECLARE @group sysname
IF SUSER_SNAME()='Executive' SET @group='ExecutivesWL'
ELSE IF SUSER_SNAME()='Customer' SET @group='CustomersWL'
ELSE IF SUSER_SNAME()='Report' SET @group='ReportWG'
ELSE SET @group='default'
RETURN @group
END
GO
ALTER RESOURCE GOVERNOR WITH (Classifier_Function = dbo.fn_ResourceGovernorClassifier)
GO
ALTER RESOURCE GOVERNOR RECONFIGURE
GO
Create Login Executive with password='pwd'
Create Login Customer with password='pwd'
Create Login Report with password='pwd'
SELECT b.name,a.login_name, a.session_id
from sys.dm_exec_sessions a inner join sys.dm_resource_governor_workload_groups b on a.group_id=b.group_id
where b.name<>'internal'
Thursday, October 14, 2010
Outlook Autovervollständigungen in 2010 importieren
bis outlook 2007 wurden die AUtovervollständigungen in AppData/Roaming/Microsoft/Outlook/Profilname.nk2 gespeichert. In 2010 werden diese am Exchange Server gespeichert. Daher Nk2 Datei in obiges Verzeichnis mit Profilnamen kopieren, dann Outlook.exe /importnk2 ausführen ...
Friday, September 10, 2010
Clustering
Windows Server Clustering:
==========================
Standard Clustering: eine Quorum Datenbank = Single Point of Failure
Majority: jede node eine Kopie der Quorum Datenbank \\%NodeName%\%ResourceGUID%$ share auf Quorum Db in %SystemRoot%\Cluster\QuN.
%ResourceGUID%$\%ResourceGUID%\MSCS
ClusterAccount muss locale Admin Rechte haben
Disk:
-----
keine dyn. Disk unterstütz, SCSI oder Fibre HD
MS DTC Disk
Antivirus software: Database Dirs ausnehmen, da sonst failover zu lange dauert
Network:
--------
2 Netwerkkarten: internes Netzwerk (Cluster Netzwerk) über dieses wird ping looksalive gesendet, wenn keine Antwort failover process
gestartet, öffentliches Netzwek
RPC wird benötigt
beim failover wird der netzwerkname des clusterst vom DNS unregisterded, dann wird die cluster Ip auf die netzwerkkarte des anderen
nodes geslegt und neu im dns registriert
SQLServerClustering:
====================
jede SQL Server Instanz bruacht einen eigenen Drive Letter, Transaktionen werden zurückgerollt beim Failover, es gibt kein Load Balancing bei SQL Server
Security Grouppe für jedes SQL Service als Domain Gruppe
Wichtig: Es können nach der Installation keine weiteren Features mehr hinzugefügt werden => Analysis Services z.b. gelich hinzufügen !
==========================
Standard Clustering: eine Quorum Datenbank = Single Point of Failure
Majority: jede node eine Kopie der Quorum Datenbank \\%NodeName%\%ResourceGUID%$ share auf Quorum Db in %SystemRoot%\Cluster\QuN.
%ResourceGUID%$\%ResourceGUID%\MSCS
ClusterAccount muss locale Admin Rechte haben
Disk:
-----
keine dyn. Disk unterstütz, SCSI oder Fibre HD
MS DTC Disk
Antivirus software: Database Dirs ausnehmen, da sonst failover zu lange dauert
Network:
--------
2 Netwerkkarten: internes Netzwerk (Cluster Netzwerk) über dieses wird ping looksalive gesendet, wenn keine Antwort failover process
gestartet, öffentliches Netzwek
RPC wird benötigt
beim failover wird der netzwerkname des clusterst vom DNS unregisterded, dann wird die cluster Ip auf die netzwerkkarte des anderen
nodes geslegt und neu im dns registriert
SQLServerClustering:
====================
jede SQL Server Instanz bruacht einen eigenen Drive Letter, Transaktionen werden zurückgerollt beim Failover, es gibt kein Load Balancing bei SQL Server
Security Grouppe für jedes SQL Service als Domain Gruppe
Wichtig: Es können nach der Installation keine weiteren Features mehr hinzugefügt werden => Analysis Services z.b. gelich hinzufügen !
Tuesday, September 07, 2010
DateTimePicker an Dataset gebunden: Out of range exception
bei Dataset.Clear() ...
woraround: clear des tableadaptes verwenden, sodass das dataset gleich wieder gefüllt wird
woraround: clear des tableadaptes verwenden, sodass das dataset gleich wieder gefüllt wird
Monday, September 06, 2010
ASP.Net C# Inline Markup
Mit spitzer Klammer auf, Prozent Zeichen wird ein c# inline Markup eingeleitet:
InlineDemo1: <%Response.Write("Date="+DateTime.Now); %>
config werte direkt in control properties schreiben (geht auch mit Resourcen):
InlineConfigValue: < asp:Literal runat="server" Text="<% $ AppSettings: test%>" />"
http://translate.google.at/translate?hl=de&langpair=en%7Cde&u=http://msdn.microsoft.com/en-us/library/d5bd1tad.aspx
InlineDemo1: <%Response.Write("Date="+DateTime.Now); %>
config werte direkt in control properties schreiben (geht auch mit Resourcen):
InlineConfigValue: < asp:Literal runat="server" Text="<% $ AppSettings: test%>" />"
http://translate.google.at/translate?hl=de&langpair=en%7Cde&u=http://msdn.microsoft.com/en-us/library/d5bd1tad.aspx
Thursday, September 02, 2010
Rapid GUI Development mit VS2008 & Datasets
Vorgehensweise:
===============
1) fertiges Datenbank Design
2) Vs2008/Menü Data / Add New Datasource / Tabeeln, Views Functions 6 Stored Proc. aussuchen
3) einstellen ob Tabellen / Detailansicht und mittels Drag & Drop die Datatabels aus dem Dataset in den Windows Forms Designer ziehen
4) Namen der generierten Tableadapter, BindingSource eventuell anpassen, Shortcut für Datatables erstellen
5) Spalten der Datagrids Formatieren
6) anpassen des generierten Codes
Was wird generiert ?
====================
1) Datenbankobjekte -> Dataset ziehen:
generiert Tableadapter und Datatable pro Tabelle / SotredProc oder Function
2) Datatables aus dem Dataset -> Formular ziehen:
genereirt Instanz des Datasets, Tableadapter+tableAdapterManager, Bindingsource, bindingsourceNavigator, toolstrip + Datagridview / einzelne Controls für Felder
Was bringt das ?
================
Der Columndesigner des Datasets erspart viel Tipparbeit, die generierten Datenzugriffselemente müssen meist händisch angepasst werden ...
===============
1) fertiges Datenbank Design
2) Vs2008/Menü Data / Add New Datasource / Tabeeln, Views Functions 6 Stored Proc. aussuchen
3) einstellen ob Tabellen / Detailansicht und mittels Drag & Drop die Datatabels aus dem Dataset in den Windows Forms Designer ziehen
4) Namen der generierten Tableadapter, BindingSource eventuell anpassen, Shortcut für Datatables erstellen
5) Spalten der Datagrids Formatieren
6) anpassen des generierten Codes
Was wird generiert ?
====================
1) Datenbankobjekte -> Dataset ziehen:
generiert Tableadapter und Datatable pro Tabelle / SotredProc oder Function
2) Datatables aus dem Dataset -> Formular ziehen:
genereirt Instanz des Datasets, Tableadapter+tableAdapterManager, Bindingsource, bindingsourceNavigator, toolstrip + Datagridview / einzelne Controls für Felder
Was bringt das ?
================
Der Columndesigner des Datasets erspart viel Tipparbeit, die generierten Datenzugriffselemente müssen meist händisch angepasst werden ...
Wednesday, September 01, 2010
Dataset und TableAdapter generieren und updaten
Um Datasets von einer bestehenden Datenbank zu erzeugen, einfach im Visual Studio im Menü Data "Create New Datasource" auswählen. Ein Wizard frägt die Datenbankverbindung ab, dann kann man auswählen welcehe Tabellen, Views und Functions/StoredProcedures man im Dataset haben möchte (bei Lightswitch gehen nur Tabellen und Views derzeit).
Dann werden für die ausgewählten Einträge DataTables und TableAdapter (zum Befüllen) erzeugt. bei Auswahl von Tabellen kann der Dataadapter auch Updates und Deletes sowie INserts machen. bei StoredProc usw. nur Select.
ändert sich an der Definition des Datenbankobjektes etwas, so kann man das im Dataset Designer mit rechter Maustaste auf die Datatable und Configure anpassen. Wenn Tabellendefinitionen geändert werden, ist es wichtig auch alle table valued functions, die darauf passieren anzupassen. Hinzufügen von Feldern ist dem Dataset egal, da es das SQL REsultset und die Dataset Spalten per Name mapped.
Wichtig: Constraint Fehlerkönnen sich sowohl auf Schlüsselverletzungen aber auch Feldconstraint (nicht null, Länge) beziehen, da ist die Fehlermeldung der Tableadapter.Fill Methode sehr unaussagekräftig.
Dann werden für die ausgewählten Einträge DataTables und TableAdapter (zum Befüllen) erzeugt. bei Auswahl von Tabellen kann der Dataadapter auch Updates und Deletes sowie INserts machen. bei StoredProc usw. nur Select.
ändert sich an der Definition des Datenbankobjektes etwas, so kann man das im Dataset Designer mit rechter Maustaste auf die Datatable und Configure anpassen. Wenn Tabellendefinitionen geändert werden, ist es wichtig auch alle table valued functions, die darauf passieren anzupassen. Hinzufügen von Feldern ist dem Dataset egal, da es das SQL REsultset und die Dataset Spalten per Name mapped.
Wichtig: Constraint Fehlerkönnen sich sowohl auf Schlüsselverletzungen aber auch Feldconstraint (nicht null, Länge) beziehen, da ist die Fehlermeldung der Tableadapter.Fill Methode sehr unaussagekräftig.
Tuesday, August 31, 2010
javascript debugging
Im Firefox gibts das Plugin Firebug, und dann kann man mit
console.log("my trace"); im consolen Fenster logs erzeugen - internet explorer 8 bricht das javascript ab wenn copnsole.log erscheint
console.log("my trace"); im consolen Fenster logs erzeugen - internet explorer 8 bricht das javascript ab wenn copnsole.log erscheint
Friday, August 20, 2010
Properties / Settings in C#
Wenn man in einem Windows Forms Projekt Settings hinzufügt (über Projekteigenschaften Settings oder Ordner Porperties Settings.settings)
wird in der App.config ein je nach Einstellung ApplicationSettings bzw. UserSettings Abschnitt erzeugt. Ist dieser nciht vorhanden, oder fehlen Settings darus, ist auch die Klasse dann im c# Code nicht über den Namespace Properties.Settings zu erreichen. Weiters werden Connectionstrings, also Settings vom Typ Connectionstings in die appconfigsection Connectionsstrings geschrieben (werden z.b. beim Anlegen eines Datasets über den Datasource Wizard erzeugt).
User Settings lassen sich über die Save Methode abspeichern (in den AppData Ordner des jeweiligen Benutzers in user.config), appsettings sind schreibgeschützt
testSettingValue
userTestValue
wird in der App.config ein je nach Einstellung ApplicationSettings bzw. UserSettings Abschnitt erzeugt. Ist dieser nciht vorhanden, oder fehlen Settings darus, ist auch die Klasse dann im c# Code nicht über den Namespace Properties.Settings zu erreichen. Weiters werden Connectionstrings, also Settings vom Typ Connectionstings in die appconfigsection Connectionsstrings geschrieben (werden z.b. beim Anlegen eines Datasets über den Datasource Wizard erzeugt).
User Settings lassen sich über die Save Methode abspeichern (in den AppData Ordner des jeweiligen Benutzers in user.config), appsettings sind schreibgeschützt
XPATH & Namespace
Sobald man mit XPATH Elemente mit Namespace finden will, braucht man ja nach verwendeter XPath Implementierung, eine Möglichkeit Namespaces und dazugehörige Prefixe zu übergeben.
//test sucht alle Elemente, die den Namen test und KEINEN NAMESPACE haben.
//pref:test sucht alle Elemente, die den Namen test und den Namespace, der dem prefix pref zugeordnet ist haben.
in .Net braucht man den XmlNamespaceManager:
XmlNode ret= ret = listService.UpdateListItems(strListID, batchElement);
XmlNamespaceManager xmlNsM = new XmlNamespaceManager(ret.OwnerDocument.NameTable);
xmlNsM.AddNamespace("z","#RowsetSchema");
sharepointGUID = ret.SelectSingleNode("//z:row/@ows_GUID", xmlNsM).Value;
siehe auch
//test sucht alle Elemente, die den Namen test und KEINEN NAMESPACE haben.
//pref:test sucht alle Elemente, die den Namen test und den Namespace, der dem prefix pref zugeordnet ist haben.
in .Net braucht man den XmlNamespaceManager:
XmlNode ret= ret = listService.UpdateListItems(strListID, batchElement);
XmlNamespaceManager xmlNsM = new XmlNamespaceManager(ret.OwnerDocument.NameTable);
xmlNsM.AddNamespace("z","#RowsetSchema");
sharepointGUID = ret.SelectSingleNode("//z:row/@ows_GUID", xmlNsM).Value;
siehe auch
Thursday, August 19, 2010
log4net config für Rolling file, Datenbank und smtp
appender schreiben die messages in files, mails, datenbanken; die messages werden mit den loggern erzeugt, wobei es eine logger hirachie gibt an deren SSpitze der root logger steht, der auch alle messages die in von anderen loggern erzeugt wurden loggt (also an seine appender weitergibt). So ist es möglich mit einem logger z.b. alle log messages eines namespaces (+subnamespaces) zu loggen, also einfaches Beispiel:
im Code:
public class Myclass
{
protected static ILog log = log4net.LogManager.GetLogger("System.Windows.Forms");
public static void TestLog()
{
log.Info("UpdateStockValues"+DateTime.Now);
}
}
in App.config:
nach Level filtern im Appender (loggt keine Info und Debug)
Levels:
•ALL
•DEBUG
•INFO
•WARN
•ERROR
•FATAL
•OFF
Beispiel für config die mittels root logger alles loggt in 3 Appender: file, datenbank und email:
im Code:
public class Myclass
{
protected static ILog log = log4net.LogManager.GetLogger("System.Windows.Forms");
public static void TestLog()
{
log.Info("UpdateStockValues"+DateTime.Now);
}
}
in App.config:
nach Level filtern im Appender (loggt keine Info und Debug)
Levels:
•ALL
•DEBUG
•INFO
•WARN
•ERROR
•FATAL
•OFF
Beispiel für config die mittels root logger alles loggt in 3 Appender: file, datenbank und email:
Tuesday, August 17, 2010
Windwos VPN Server
einfach Routing und access services mit wizard konfigurieren, wichtig: benutzer müssen einwahlrechte haben (Eigenscahften des Benutzers, Einwählen)
Protokolle: VPN Server: Routing und Acess, rechte Maustaste Eigenschaften, letzetses Tab Protokolle
Im System Protokoll findet man IP des Client von dem aus versucht wurde einzuloggen
PPTP: 1723 Port
Protokolle: VPN Server: Routing und Acess, rechte Maustaste Eigenschaften, letzetses Tab Protokolle
Im System Protokoll findet man IP des Client von dem aus versucht wurde einzuloggen
PPTP: 1723 Port
Tuesday, August 10, 2010
W2008 Server WOL
Bei Windwos Server 2008 konnte ich WOL (Wake on LAN) zwar über den Gerätemanager, nicht aber über Netzwerkverbindungen Verwalten konfigurieren. Dort steht unter Eigenschaften der Verbindung, Konfigurieren,
Energieverwaltung, Der Computer kann das Gerät ausschalten um Energie zu sparen, Das Gerät kann den Computer aus dem Ruhezustand aktivieren usw. komplett etwas anderes als eben im Gerätemanger unter derselben Netzwerkkarte. Auch merkt er sich die dort geänderten Einstellungen nciht, wohl aber wenn ich das im Gerätemanager ändere. EIn Bug im Treiber der Realtek PCIe FE Family Controller oder in W2008 ??? Habe leider keinen gleichen Server mit anderer NEtzwerkkarte um zu testen ...
Energieverwaltung, Der Computer kann das Gerät ausschalten um Energie zu sparen, Das Gerät kann den Computer aus dem Ruhezustand aktivieren usw. komplett etwas anderes als eben im Gerätemanger unter derselben Netzwerkkarte. Auch merkt er sich die dort geänderten Einstellungen nciht, wohl aber wenn ich das im Gerätemanager ändere. EIn Bug im Treiber der Realtek PCIe FE Family Controller oder in W2008 ??? Habe leider keinen gleichen Server mit anderer NEtzwerkkarte um zu testen ...
Thursday, July 29, 2010
javascrip: suchen nach Id
GetElementById funktioniert auf manchen objekten nciht, und wenn man relativ suchen möchte bleibt einem nur jquery oder:
function FindChild(par, childid) {
for (i = 0; i < par.childNodes.length; i++) {
x = par.childNodes[i];
if (childid == x.id) return x;
f = FindChild(x, childid);
if (null != f) return f;
}
return null;
}
function FindChild(par, childid) {
for (i = 0; i < par.childNodes.length; i++) {
x = par.childNodes[i];
if (childid == x.id) return x;
f = FindChild(x, childid);
if (null != f) return f;
}
return null;
}
Wednesday, July 28, 2010
Identy von INSERT INTO zurückbekommen
ADO Commandtext "INSERT INTO tbl (test) VALUES (@test);" und SQLOut Parameter @@IDENTITY liefert Fehler "incorrect syntax near @@IDENTITY"
auch "INSERT INTO tbl (test) VALUES (@test);Select @@Identity as @Id" und SQLOut Parameter @Id liefert Fehler "incorrect syntax near @Id"
Lösung:
SET NOCOUNT ON; INSERT INTO tbl (test) VALUES (@test); SELECT @@IDENTITY as Id; mit ExecuteScalar ausführen, gibt object zurück mit Id als decimal
auch "INSERT INTO tbl (test) VALUES (@test);Select @@Identity as @Id" und SQLOut Parameter @Id liefert Fehler "incorrect syntax near @Id"
Lösung:
SET NOCOUNT ON; INSERT INTO tbl (test) VALUES (@test); SELECT @@IDENTITY as Id; mit ExecuteScalar ausführen, gibt object zurück mit Id als decimal
Wednesday, July 21, 2010
Sql Server Änderungs Verfolgungs Technologien:
Trigger
SqlDependency … .net Callback (Query Notification OnChange), aber viele Einschränkungen im Select
CDC … ChangeDataCapture …Inhalt der geänderten Spalten in Tabelle_CT (pro Tabelle die man verfolgt eine Änderungstabelle)
CT Change Tracking … nur Primary Key der geänderten Zeilen
SqlTrace … loggt in Files
Notify … Depricated, Notifikationen auf SMS, EMail, http usw.
CT einschalten:
ALTER DATABASE NotificationTest SET CHANGE_TRACKING = ON (CHANGE_RETENTION = 3 DAYS, AUTO_CLEANUP = ON)
SELECT * FROM sys.change_tracking_databases
ALTER DATABASE NotificationTest SET ALLOW_SNAPSHOT_ISOLATION ON;
ALTER TABLE dbo.Tasks ENABLE CHANGE_TRACKING WITH(TRACK_COLUMNS_UPDATED = ON)
SELECT * FROM sys.change_tracking_tables
--Änderungen abfragen
SELECT * FROM CHANGETABLE (CHANGES dbo.Tasks,0) as CT
CDC einschalten:
EXEC sys.sp_cdc_enable_db
EXEC sys.sp_cdc_enable_table
@source_schema = N'dbo',
@source_name = N'Tasks',
@role_name = NULL,
@supports_net_changes = 1
select * from cdc.captured_columns
select * from cdc.change_tables
select * from cdc.dbo_Tasks_CT --- History (alle Datensätze vorher, Nachher)
SqlDependency … .net Callback (Query Notification OnChange), aber viele Einschränkungen im Select
CDC … ChangeDataCapture …Inhalt der geänderten Spalten in Tabelle_CT (pro Tabelle die man verfolgt eine Änderungstabelle)
CT Change Tracking … nur Primary Key der geänderten Zeilen
SqlTrace … loggt in Files
Notify … Depricated, Notifikationen auf SMS, EMail, http usw.
CT einschalten:
ALTER DATABASE NotificationTest SET CHANGE_TRACKING = ON (CHANGE_RETENTION = 3 DAYS, AUTO_CLEANUP = ON)
SELECT * FROM sys.change_tracking_databases
ALTER DATABASE NotificationTest SET ALLOW_SNAPSHOT_ISOLATION ON;
ALTER TABLE dbo.Tasks ENABLE CHANGE_TRACKING WITH(TRACK_COLUMNS_UPDATED = ON)
SELECT * FROM sys.change_tracking_tables
--Änderungen abfragen
SELECT * FROM CHANGETABLE (CHANGES dbo.Tasks,0) as CT
CDC einschalten:
EXEC sys.sp_cdc_enable_db
EXEC sys.sp_cdc_enable_table
@source_schema = N'dbo',
@source_name = N'Tasks',
@role_name = NULL,
@supports_net_changes = 1
select * from cdc.captured_columns
select * from cdc.change_tables
select * from cdc.dbo_Tasks_CT --- History (alle Datensätze vorher, Nachher)
Web Controls Dynamisch Erzeugen / Web Page Lebenszyklus
Controls immer in PreInit erzeugen (vorher werden die durch den aspx html angegebenen controls erzeugt), dannach werden sie in Init initialisiert (also z.b. Viewstate=Value reingeschrieben ...)
Ein Beispiel mit DropDowns:
public partial class _Default : System.Web.UI.Page
{
//Lebenszyklus: http://msdn.microsoft.com/en-us/library/ms178472.aspx
//Page_PreInit
//Page_Init
//Page_InitComplete
//Page_Load
const int ddlMax=9;
DropDownList[] ddls = new DropDownList[ddlMax];
protected void Page_PreInit(object sender, EventArgs e)
{
/*
Raised after the start stage is complete and before the initialization stage begins.
Use this event for the following:
Check the IsPostBack property to determine whether this is the first time the page is being processed. The IsCallback and IsCrossPagePostBack properties have also been set at this time.
Create or re-create dynamic controls.
Set a master page dynamically.
Set the Theme property dynamically.
Read or set profile property values.
Note
If the request is a postback, the values of the controls have not yet been restored from view state. If you set a control property at this stage, its value might be overwritten in the next event.
*/
for (int i = 0; i < ddlMax; i++)
{
DropDownList ddlx = new DropDownList();
ddlx.ID = "ddl"+i.ToString();
for (int item = 0; item < i; item++)
{
ddlx.Items.Add(ddlx.ID + item.ToString());
}
form1.Controls.Add(ddlx);
ddls[i] = ddlx;
//panDDLs.Controls.Add(ddlx);
}
}
protected void Page_Init(object sender, EventArgs e)
{
/*
* Raised after all controls have been initialized and any skin settings have been applied. The Init event of individual controls occurs before the Init event of the page.
Use this event to read or initialize control properties.
*/
}
protected void Page_InitComplete(object sender, EventArgs e)
{
}
protected void Page_PreLoad(object sender, EventArgs e)
{
}
protected void Page_Load(object sender, EventArgs e)
{
Response.Write("
DropDownValues
");
for (int i = 0; i < ddlMax; i++)
{
Response.Write("ddl Nr.:" + i.ToString() + " value=" + ddls[i].SelectedValue+"
");
}
}
// ------------------ Control Events -------------------
protected void Page_LoadComplete(object sender, EventArgs e)
{
}
protected void Page_PreRender(object sender, EventArgs e)
{
}
protected void Page_PreRenderComplete(object sender, EventArgs e)
{
}
protected void Page_SaveStateComplete(object sender, EventArgs e)
{
}
protected void Page_Render(object sender, EventArgs e)
{
}
protected void Page_Unload(object sender, EventArgs e)
{
}
}
Ein Beispiel mit DropDowns:
public partial class _Default : System.Web.UI.Page
{
//Lebenszyklus: http://msdn.microsoft.com/en-us/library/ms178472.aspx
//Page_PreInit
//Page_Init
//Page_InitComplete
//Page_Load
const int ddlMax=9;
DropDownList[] ddls = new DropDownList[ddlMax];
protected void Page_PreInit(object sender, EventArgs e)
{
/*
Raised after the start stage is complete and before the initialization stage begins.
Use this event for the following:
Check the IsPostBack property to determine whether this is the first time the page is being processed. The IsCallback and IsCrossPagePostBack properties have also been set at this time.
Create or re-create dynamic controls.
Set a master page dynamically.
Set the Theme property dynamically.
Read or set profile property values.
Note
If the request is a postback, the values of the controls have not yet been restored from view state. If you set a control property at this stage, its value might be overwritten in the next event.
*/
for (int i = 0; i < ddlMax; i++)
{
DropDownList ddlx = new DropDownList();
ddlx.ID = "ddl"+i.ToString();
for (int item = 0; item < i; item++)
{
ddlx.Items.Add(ddlx.ID + item.ToString());
}
form1.Controls.Add(ddlx);
ddls[i] = ddlx;
//panDDLs.Controls.Add(ddlx);
}
}
protected void Page_Init(object sender, EventArgs e)
{
/*
* Raised after all controls have been initialized and any skin settings have been applied. The Init event of individual controls occurs before the Init event of the page.
Use this event to read or initialize control properties.
*/
}
protected void Page_InitComplete(object sender, EventArgs e)
{
}
protected void Page_PreLoad(object sender, EventArgs e)
{
}
protected void Page_Load(object sender, EventArgs e)
{
Response.Write("
DropDownValues
");
for (int i = 0; i < ddlMax; i++)
{
Response.Write("ddl Nr.:" + i.ToString() + " value=" + ddls[i].SelectedValue+"
");
}
}
// ------------------ Control Events -------------------
protected void Page_LoadComplete(object sender, EventArgs e)
{
}
protected void Page_PreRender(object sender, EventArgs e)
{
}
protected void Page_PreRenderComplete(object sender, EventArgs e)
{
}
protected void Page_SaveStateComplete(object sender, EventArgs e)
{
}
protected void Page_Render(object sender, EventArgs e)
{
}
protected void Page_Unload(object sender, EventArgs e)
{
}
}
Thursday, July 08, 2010
Installationsprobleme bei SQL 2005
Das SQL 2005 Installationsprogramm prüft immer genau, ob bereits eine andere Installation vorhanden ist. So muss man z.b. wenn SQLExpress bereits installiert ist, entweder deinstallieren oder mit spezieller Option das Setup Programm einer anderen Version aufrufen.
Wenn man ein Service Pack installiert hat, können nur mehr über "Add and Remove Programms" Komponenten hinzugefügt werden.
Wenn man ein Service Pack installiert hat, können nur mehr über "Add and Remove Programms" Komponenten hinzugefügt werden.
Wednesday, July 07, 2010
Sharepoint integrated reporting services
benötig SQL Server SP2;
0) WICHTIG: ssrs (Reporting Service) nicht unter Local System account installieren, da dieser keinen Zugriff auf die Sharepoint Datenbank hat. Wichitg: wenn man bereits unter Local System installiert hat, unbedingt den DatabaseKey sichern, bevor man den Account wechselt, sonst hat man keinen Zugriff mehr auf die ReportServer DB und muß diese löschen und neu erzeugen
1) Reporting Services Configuration: Datenbank auf Sharepoint Integrierten Modus umstellen (wichtig geht nur mit SP2) => eine neue Datenbank wird erzeugt, diverse Rechte gesetz. Der ReportManager (http://server/Reports) funktioniert dann nicht mehr und liefert: Der -Vorgang wird auf einem Berichtsserver, der für die Ausführung im integrierten SharePoint-Modus konfiguriert ist, nicht unterstützt. (rsOperationNotSupportedSharePointMode) 2) Reporting Services-Add für Sharepoint Server installieren
die Reportserver WebAnwendung funktioniert aber nach wie vor http://server/Reportserver)
2) In der Sharepoint Central Administration unter Application Management / Reporting Services die ReportServer Url eintragen und die Datenbank Rechte vergeben, wichtig ist dass:
der Reporting Service User ssrs genannt, der den apppool der Report Server Anwendung betreibt, auf die Document Library am sharepoint Zugriff hat
Sharepoint sendet Request an Report Server Webapp, diese möchte sich Report Definition File rdl vom Sharepoint runterladen, das Windows Service,sollte Zugriff auf Sharepoint Dbs haben
3) erzeugen einer Documentlibrary ohne default typ, raufladen eines rdl files (am besten ohne shared datasource zum ausprobieren, mit Sql Server Credentials , man kann Datasource mit rechte Maustaste auf Report bearbeiten (Mangae Datasources), testen ob der Report funktioniert
4) Troubleshooting:
Integration service logs:
C:\Program Files\Microsoft SQL Server\MSSQL.2\Reporting Services\LogFiles
sowie in Report Datenbank Tabelle Execution Log
0) WICHTIG: ssrs (Reporting Service) nicht unter Local System account installieren, da dieser keinen Zugriff auf die Sharepoint Datenbank hat. Wichitg: wenn man bereits unter Local System installiert hat, unbedingt den DatabaseKey sichern, bevor man den Account wechselt, sonst hat man keinen Zugriff mehr auf die ReportServer DB und muß diese löschen und neu erzeugen
1) Reporting Services Configuration: Datenbank auf Sharepoint Integrierten Modus umstellen (wichtig geht nur mit SP2) => eine neue Datenbank wird erzeugt, diverse Rechte gesetz. Der ReportManager (http://server/Reports) funktioniert dann nicht mehr und liefert: Der -Vorgang wird auf einem Berichtsserver, der für die Ausführung im integrierten SharePoint-Modus konfiguriert ist, nicht unterstützt. (rsOperationNotSupportedSharePointMode) 2) Reporting Services-Add für Sharepoint Server installieren
die Reportserver WebAnwendung funktioniert aber nach wie vor http://server/Reportserver)
2) In der Sharepoint Central Administration unter Application Management / Reporting Services die ReportServer Url eintragen und die Datenbank Rechte vergeben, wichtig ist dass:
der Reporting Service User ssrs genannt, der den apppool der Report Server Anwendung betreibt, auf die Document Library am sharepoint Zugriff hat
Sharepoint sendet Request an Report Server Webapp, diese möchte sich Report Definition File rdl vom Sharepoint runterladen, das Windows Service,sollte Zugriff auf Sharepoint Dbs haben
3) erzeugen einer Documentlibrary ohne default typ, raufladen eines rdl files (am besten ohne shared datasource zum ausprobieren, mit Sql Server Credentials , man kann Datasource mit rechte Maustaste auf Report bearbeiten (Mangae Datasources), testen ob der Report funktioniert
4) Troubleshooting:
Integration service logs:
C:\Program Files\Microsoft SQL Server\MSSQL.2\Reporting Services\LogFiles
sowie in Report Datenbank Tabelle Execution Log
Thursday, June 17, 2010
Monday, May 31, 2010
Miniatur Ansicht statt Symbole im Explorer
Im Extras Menü / Ordneroptionen, Tab Ansicht "Immer Symbole statt Minituransicht anzeigen" abhacken
Tuesday, May 18, 2010
Windows7 Wake Up
In WIndows 7 kann man bei Tastatatur und Mäusen auch im Gerätemanger einstellen, ob sie das System aus dem Ruhezustand wecken dürfen, dies überschreibt die BIOS einstellungen.
POWERCFG -DEVICEQUERY wake_armed
werden alle Devices angezeigt, die das System aus dem Ruhezustand aufwecken können.
POWERCFG -lastwake
gibt den Grund für das letze Aufwachen an (auch im Ereignisprotokoll sichtbar)
POWERCFG -DEVICEQUERY wake_armed
werden alle Devices angezeigt, die das System aus dem Ruhezustand aufwecken können.
POWERCFG -lastwake
gibt den Grund für das letze Aufwachen an (auch im Ereignisprotokoll sichtbar)
Excel 2007 CSV importieren
In früheren Excel Versionen konnte man beim Datei öffnen den Textimport Assisenten benutzen - nun öffnet man einfach die Datei, markiert die Spalte mit den Werten die man aufteilen möchte, wählt im Daten Menü unter Datentools Text in Spalten und teit damit die Daten in mehrere Spalten auf
Friday, April 30, 2010
Tuesday, April 27, 2010
Remotedesktop Port ändern
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp
Portnumber
Portnumber
Windows Server Kennwortrichtlinien, Anmelden als Dienst
Start/Verwaltung/Gruppenrichtlinienverwaltung (als DOmän Admin !)
default domänen policy rechte Maustzaste bearbeiten
ComputerKonfig/WindowsEinst/Sicherheitseinst/Kontorichtlinien
Start|Programme|Verwaltung|Lokale Sicherheitsrichtlinie
Lokale Sicherheitseinstellungen|Lokale Richtlinien "Zuweisung von Benutzerrechten" ,"Als Dienst anmelden".
default domänen policy rechte Maustzaste bearbeiten
ComputerKonfig/WindowsEinst/Sicherheitseinst/Kontorichtlinien
Start|Programme|Verwaltung|Lokale Sicherheitsrichtlinie
Lokale Sicherheitseinstellungen|Lokale Richtlinien "Zuweisung von Benutzerrechten" ,"Als Dienst anmelden".
Tuesday, April 20, 2010
for XML um strings einer unterabfrage zusammenzufügen
einfachste verwendung von for xml:
select * from sys.objects for Xml Auto
erezugt ein XML das für jede tabellenzeile ein xml element mit attributen für jede spalte enthält
select * from sys.objects for XML PATH('') erezugt für jede zeile ein set von xml elementen für jede spalte mit den spaltenwerten
select ','+ name from sys.objects for XML Path('')
enthält keine elemnte tags, da die spalte keinen namen hat, also nur einen , seperierten string als xml
select cast( (select ', '+lastname from [User] for Xml PATH('') ) as Varchar(MAX))
wandelt das ganze in einen string um
select * from sys.objects for Xml Auto
erezugt ein XML das für jede tabellenzeile ein xml element mit attributen für jede spalte enthält
select * from sys.objects for XML PATH('') erezugt für jede zeile ein set von xml elementen für jede spalte mit den spaltenwerten
select ','+ name from sys.objects for XML Path('')
enthält keine elemnte tags, da die spalte keinen namen hat, also nur einen , seperierten string als xml
select cast( (select ', '+lastname from [User] for Xml PATH('') ) as Varchar(MAX))
wandelt das ganze in einen string um
Reporting Services DateAdd
in Reporting Services wird die .NEt FUnktion Dateadd aufgerufen, nicht die gleichnamige TSQL Funktion, daher die DateInterval Enum verwenden statt einem String als Zeitintervall, z.b.:
=DateAdd(DateInterval.Month, 6, Parameters!StartDate.Value)
oder auch mit String:
=DateAdd("d",-7, Today)
=DateAdd(DateInterval.Month, 6, Parameters!StartDate.Value)
oder auch mit String:
=DateAdd("d",-7, Today)
Wednesday, April 07, 2010
Windows 7 Ruhezustand
In Energioptionen, Erweiterte Eiunstellungen, Energiesparen, Hybridmodus zulassen "Nein"
Visual Studio Shortcuts
Visual Studio Shortcuts
shift F12 = Find all references,
CRT SHIFT Space = Intellisense Tooltip
shift F12 = Find all references,
CRT SHIFT Space = Intellisense Tooltip
Dataset Typ plötzlich unbekannt
manchmal erhält man bei der Arbeit mit typisierten Datasets die Meldung, dass eine typisierte Row nicht mehr bekannt ist. Dann hilft es, im Dataset xsd Designer eine test Tabelle hinzuzufügen, zu kompelieren und dann wieder zu lsöchen - scheinbar schaut der make Prozess nur aufs xsd File und nicht auf das designer.cs file.
Tuesday, April 06, 2010
Internet Explorer Suchanbieter hinzufügen
neben dem Suchfeld aufs Drop Down klicken, "Find More providers" auswählen => http://www.ieaddons.com/de/searchproviders wird geöffnet, dort ganz unten auf den Link "Erstellen Sie Ihren eigenen Suchanbieter" drücken => http://www.ieaddons.com/de/createsearch.aspx wird aufgerufen, dort die URL des Suchanbieters mit Suche nach TEST eingebn
Thursday, April 01, 2010
Erweiterte Partition unter Vista, Win7
Unter Computermanagement/Datenträgerverwaltung kann man ab Vista nur mehr ein einfaches Volume erstellen. Das Shell Tool Diskpart kann mittels
create partition extended eine erweiterte Partition erstellen:
1) Aufruf DISKPART von der Shell oder Ausführen, admin rechte vonnöten
2) mittels list disk die Datenträger auflisten
3) mittels SELECT DISK Nr die Disk auswählen, auf der man die erweiterte Partition erstellen will
4) Create Partition extended size= erzeugt eine erweiterte partition, wenn size nicht angegeben wird, wird der gesamte freie Platz verwendet
create partition extended eine erweiterte Partition erstellen:
1) Aufruf DISKPART von der Shell oder Ausführen, admin rechte vonnöten
2) mittels list disk die Datenträger auflisten
3) mittels SELECT DISK Nr die Disk auswählen, auf der man die erweiterte Partition erstellen will
4) Create Partition extended size= erzeugt eine erweiterte partition, wenn size nicht angegeben wird, wird der gesamte freie Platz verwendet
Thursday, March 18, 2010
Exception beim Debuggen direkt beim auslösenden Code abfangen
CRT ALT E öffnet Fenster zum EInstellen, welche Exceptions wo behandelt werden sollen. Beim Debuggen sind try catch Blöcke unagenehm, weil dort erst der Debugger halt macht. Mit Anhacken der spalte ausgeklöst (Thrown) im Exception Handler Fenster wird direkt beim Fehler gestoppt
Wednesday, March 17, 2010
typisiertes Dataset neu generieren
Wenn man in einem typisierten Dataset Felder hinzufügt oder dessen Eigenschaften ändert, wird öfters mal nicht der Code nue generiert oder es gibt Compiler Fehler beim neu generieren. Abhilfe: Dataset raus aus dem Projekt und wieder hinzufügen oder RunCustom Tool im Solution Explorer auswählen, dann wird der Code neu generiert
Tuesday, March 16, 2010
Windows7 Aktivierungsfehler
einfach denselben Productkey nochmals eingeben (Systemsteuerung / System / Windows aktivieren ganz unten)
Leerzeilen in Visual Studio löschen / Delete empty lines in Visual Studio (VS)
mittels regEx leerzeilen durch nichts ersetzen:
suchen nach: ^\n (sucht alle Leerzeilen (\n) am Anfang ^
ersetzen:
mit regEx
replace empty lines by nothing with regex:
search all new lines at beginning ^\n (=empty line)
replace:
suchen nach: ^\n (sucht alle Leerzeilen (\n) am Anfang ^
ersetzen:
mit regEx
replace empty lines by nothing with regex:
search all new lines at beginning ^\n (=empty line)
replace:
Sunday, March 14, 2010
Documents and Settings in Windows 7
Seit Vista ist Document and Settings denied for everyone - in Security Deny für die Gruppe Everyone entfernen (in Advanced PropertiesI
Access: maximale Sperrungen Dateisätze überschritten
Lösung:
A) DAO.DBEngine.SetOption dbmaxlocksperfile,15000
B) Maxlocks in Registry HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Jet 4.0\MaxLocksperFile ändern
A) DAO.DBEngine.SetOption dbmaxlocksperfile,15000
B) Maxlocks in Registry HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Jet 4.0\MaxLocksperFile ändern
Thursday, March 11, 2010
Datarows zwischen Datatables kopieren
Wenn man versucht eine Datarow zu einer anderen Tabelle hinzuzufügen, erhält man die Fehlermeldung, dass diese Datarow eben schon zu einer Tabelle gehört.
Mit Datatable.Import läßt sich eine Datarow mit gleichem Inhalt erzeugen
Mit Datatable.Import läßt sich eine Datarow mit gleichem Inhalt erzeugen
Crystal Reports: Elemente unterdrücken (ausblenden) / hide elements
Um Elemente (z.b. Subreports) in einem Crystal Report auszublenden einfach im report designer mit rechter Maustaste auf den Subbericht klicken, Objekt formatieren wählen und eine Formel für die Eigenschaft unterdrücken angeben.
to hide elements (e.g. subreports) in crystall reports just click with right mouse key on the element, format object, formula for hide
to hide elements (e.g. subreports) in crystall reports just click with right mouse key on the element, format object, formula for hide
Friday, March 05, 2010
Reporting Services: Übersschriften beim scrollen anzeigen
Property 'Fixed Header' der Report Tabelle auf 'true' setzen.
Thursday, February 11, 2010
.Net Resourcen
einfach in ein resx file bilder usw hinzufügen (drag & drop aus dem Explorer) es wird dann in ein resource file compeliert und zum assembly dazugelinkt
Tuesday, February 09, 2010
Activity Monitor Sql 2008
Der Activity Monitor ist beim Sql 2008 durch rechtsclick auf den Server im Management Studio zu erreichen, und nciht mehr wie bei SQL2005 unter Management
.Net Color zu Crystal Reports Farbe konvertieren
.Net speichert die Farbe Color als 4Bytes: ARGB
A ... Alpha Channel (durchsichtigkeit)
R Rot
G Grün
B Blau
Crystal Report erwartet die Farben in BGR (Blau Grün Rot).
Daher muss man den Alpha Teil wegschneiden und R sowie B vertauschen - z.b. in TSQL Scalar Value Funtion:
-- Create date: 09.09.2010
-- Description: Wandelt ARGB (Alpha Channel rgb von .Net Color.ToARGB() hat 4 Byte für RGBA, wobei Rot= 00ffff Grün=ff00ff und blau=ffff00 ist ) in RGB um
-- =============================================
ALTER FUNCTION [dbo].[fnArgb2Bgr]
(
@ARGB as int
)
RETURNS int
AS
BEGIN
DECLARE @BGR as int
DECLARE @R as int = (@ARGB & 0x00FF0000)/0x10000
DECLARE @G as int = (@ARGB & 0x0000FF00) /0x100
DECLARE @B as int = (@ARGB & 0x000000FF)
SET @BGR=@B*0x10000+@G*0x100+@R
--SET @RGB=(((-@ARGB) & 0x00FFffFF) ^ 0xFFffFF)
--SET @RGB=(((-@ARGB) / 256) ^ 16777215) -- shift um 8 bits => schneide niedrigstes byte (alpha channel) weg, dann invertieren der verbleibenden unteren 3 bytes [RGB] (16777215= 0xffFFff)
RETURN @BGR
END
A ... Alpha Channel (durchsichtigkeit)
R Rot
G Grün
B Blau
Crystal Report erwartet die Farben in BGR (Blau Grün Rot).
Daher muss man den Alpha Teil wegschneiden und R sowie B vertauschen - z.b. in TSQL Scalar Value Funtion:
-- Create date: 09.09.2010
-- Description: Wandelt ARGB (Alpha Channel rgb von .Net Color.ToARGB() hat 4 Byte für RGBA, wobei Rot= 00ffff Grün=ff00ff und blau=ffff00 ist ) in RGB um
-- =============================================
ALTER FUNCTION [dbo].[fnArgb2Bgr]
(
@ARGB as int
)
RETURNS int
AS
BEGIN
DECLARE @BGR as int
DECLARE @R as int = (@ARGB & 0x00FF0000)/0x10000
DECLARE @G as int = (@ARGB & 0x0000FF00) /0x100
DECLARE @B as int = (@ARGB & 0x000000FF)
SET @BGR=@B*0x10000+@G*0x100+@R
--SET @RGB=(((-@ARGB) & 0x00FFffFF) ^ 0xFFffFF)
--SET @RGB=(((-@ARGB) / 256) ^ 16777215) -- shift um 8 bits => schneide niedrigstes byte (alpha channel) weg, dann invertieren der verbleibenden unteren 3 bytes [RGB] (16777215= 0xffFFff)
RETURN @BGR
END
Tuesday, February 02, 2010
Auslesen von Resourcen
1) Assmembly öffnen
2) aus dem Manifest enthaltenen Resourcen auslesen
3) für alle Resourcen des Assemblies mittels ResourceReader die einzelnen Resourceinträge lesen
Assembly a=Assembly.LoadFrom(@"E:\Anwendung.resources.dll");
foreach (string resourceName in a.GetManifestResourceNames())
{
// Opens a resource reader and gets an enumerator from it.
IResourceReader reader = new ResourceReader(a.GetManifestResourceStream(resourceName));
IDictionaryEnumerator en = reader.GetEnumerator();
while (en.MoveNext())
{
Console.WriteLine();
Console.WriteLine("Name: {0}", );
Console.WriteLine("Value: {0}", en.Value);
}
reader.Close();
}
2) aus dem Manifest enthaltenen Resourcen auslesen
3) für alle Resourcen des Assemblies mittels ResourceReader die einzelnen Resourceinträge lesen
Assembly a=Assembly.LoadFrom(@"E:\Anwendung.resources.dll");
foreach (string resourceName in a.GetManifestResourceNames())
{
// Opens a resource reader and gets an enumerator from it.
IResourceReader reader = new ResourceReader(a.GetManifestResourceStream(resourceName));
IDictionaryEnumerator en = reader.GetEnumerator();
while (en.MoveNext())
{
Console.WriteLine();
Console.WriteLine("Name: {0}", );
Console.WriteLine("Value: {0}", en.Value);
}
reader.Close();
}
string Array in Windows.Forms.Datagrid anzeigen
in ASP.Net muss man einem GridView einfach nur die Datasource auf ein String Array setzen, udn dies wird angezeigt. In Windows Forms wird dann lediglich die Length Property angezeigt, nicht aber die Strings selbst.
Abhilfe: konvertieren des string Arrays in einen LinQ Anaonymen Typen:
Beispiel: anzeigen der Resources eines Assemblies:
Assembly a=Assembly.LoadFrom(@"C:\Anwendung.resources.dll");
var x=a.GetManifestResourceNames().Select(item => new { bla = item}).ToList();
dg.DataSource = x;
Abhilfe: konvertieren des string Arrays in einen LinQ Anaonymen Typen:
Beispiel: anzeigen der Resources eines Assemblies:
Assembly a=Assembly.LoadFrom(@"C:\Anwendung.resources.dll");
var x=a.GetManifestResourceNames().Select(item => new { bla = item}).ToList();
dg.DataSource = x;
Subscribe to:
Posts (Atom)