Zum Hauptinhalt springen

Daten in Datenbank schreiben und andere SQL ausführen

Bitte beachten

Alle Beispiele bezieht sich auf MapEdit Version 23.2.142 und höher.

Zum erzeugen, ändern und löschen von Datensätzen sollten Sie immer die Klasse Feature verwenden.

Diese Klasse erzeugt bei Feature Tabellen u.a. automatisch eine neue, eindeutige FID und verwaltet diese.

Die Klasse kann auch für nicht Feature Tabellen, wie Kennungslisten oder andere Tabellen verwendet werden.

Die Tabelle benötigt aber eine eindeutige Primär Spalte.

Diese Klasse führt im Gegensatz zum direkten ausführen von reinen SQLs sogenannte "Feature Rules" aus. Siehe Kapitel Feature Rules.

Die Feature Rules sorgen unter anderem dafür das die Grafik entsprechend aktualisiert wird.

Neuen Datensatz/Feature erzeugen

Connection cn = _connection;

Feature f = cn.CreateFeature("BAUM");
f.SetValue("NAME", "Buche");
f.SetValue("PFLANZ_DATUM", DateTime.Now);
f.Geometry = new Mum.Geo.Geometry.Point(100, 100);
f.Insert();

Beispiel mit Script Button

public override void Button_Click()
{
Feature f = this.CreateFeature("BAUM");
f.SetValue("NAME", "Buche");
f.SetValue("PFLANZ_DATUM", DateTime.Now);
f.Geometry = new Mum.Geo.Geometry.Point(100, 100);
f.Insert();
}

Vorhandenen Datensatz/Feature ändern

Connection cn = _connection;

Feature f = cn.ReadFeature("BAUM", "177");
f.SetValue("NAME", "Buche");
f.SetValue("PFLANZ_DATUM", DateTime.Now);
f.Update();

Beispiel mit Script Button

public override void Button_Click()
{
Feature f = this.ReadFeature("BAUM","177")
//or Feature f = this.Connection.ReadFeature("BAUM","177")
f.SetValue("NAME", "Buche");
f.SetValue("PFLANZ_DATUM", DateTime.Now);
f.Geometry = new Mum.Geo.Geometry.Point(100, 100);
f.Insert();
}

Datensatz/Feature löschen

Connection cn = _connection;

Feature f = cn.ReadFeature("BAUM", "177");
f.Delete();

Hinweis: Für diese und weitere Funktionen kann auch die statische Klasse "FeatureUtils" genutzt werden.

Beispiel

Feature f = cn.CreateFeature("BAUM");
FeatureUtils.Insert(f);

Beispiel mit Script Button

public override void Button_Click()
{
Feature f = this.ReadFeature("BAUM","177");
this.DeleteFeature(f);
//or this.Connection.DeleteFeature(f);
}

Ausführen von anderen SQL Befehlen

Mit der Klasse SqlExecute können beliebige SQL Befehle ausgeführt werden.

Hioerbei werden jedoch keine "Feature Rules" ausgeführt. Sie sollten also wenn immer möglich die oben beschriebene Klasse "Feature" verwenden.

Beispiel:

cn.SqlExecute("update BAUM set alter=33 where fid>17");

Weitere Beispiele:

//Wenn ein Fehler aufritt wird eine Exception ausgeloest. 
bool rc = cn.SqlExecute("update BAUM set alter=33 where fid>17", SqlExceptionBehavior.ThrowException);

//Wenn ein Fehler aufritt wird eine Dialog mit dem Fehkler angezeigt.
bool rc = cn.SqlExecute("update BAUM set alter=33 where fid>17", SqlExceptionBehavior.DisplayMessageBox);

//Wenn ein Fehler aufritt wird dieer ignoriert.
bool rc = cn.SqlExecute("update BAUM set alter=33 where fid>17", SqlExceptionBehavior.IgnoreErrors);

Wenn Sie Parameter übergeben müssen können Sie die Langform der Klasse benutzen.

Beispiel:

Connection cn = _connection;

SqlExecute exec = new SqlExecute(cn);
exec.ExceptionBehavior = SqlExceptionBehavior.DisplayMessageBox;
exec.AddParameter("test", DataType.DbInt32,11);
exec.Execute("update baum set alter=:test");
if (!exec.Succeeded)
{
string err = exec.ExceptionMessage;
}
this.Map.RefreshLayer("BAUM"); //Refresh the Layer

Beispiel mit Script Button

public override void Button_Click()
{
this.ExecuteSql("update BAUM set alter=33 where fid>17");
// or this.Connection.SqlExecute("update BAUM set alter=33 where fid>17");
this.Map.RefreshLayer("BAUM"); //Refresh the Layer
}