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
Monday, December 27, 2010
sqlserver managementstuido spaltenüberschriften in abfrageergebnis Copy
Optionen / Abfrageergebnis / SQL Server / Ergebnisse in Raster / Spaltenheader beim Kobieren ... einschliessen
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
Subscribe to:
Posts (Atom)