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;
}

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

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)

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)
{
}

}

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.

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