• Keine Ergebnisse gefunden

Grundlagen in C# und .net

N/A
N/A
Protected

Academic year: 2021

Aktie "Grundlagen in C# und .net"

Copied!
21
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

1

FB Automatisierung und Informatik: GUI mit Visual Studio: .net 1

Grundlagen in C# und .net

Dipl.-Inf., Dipl.-Ing. (FH) Michael Wilhelm

Hochschule Harz

FB Automatisierung und Informatik

mwilhelm@hs-harz.de

Raum 2.202

Tel. 03943 / 659 338

FB Automatisierung und Informatik: GUI mit Visual Studio: .net 2

Inhalt

TabbedPane (Register)

ListView

Tree

Tabelle

MDI-Programme

Erweiterte Grafik

Threads und Semaphore

Datenbanken

(2)

FB Automatisierung und Informatik: GUI mit Visual Studio: .net 3 Mögliche Varianten

oODBC Providers (Excel, Access, Textdatei, AS 400, DB2)

oOLE DB Data Providers (Excel, Access, Textdatei, AS 400, DB2)

oOLE DB Data Link (Data Link File UDL)

oNet-Provider

oADO.net

oLINQ (Language Integrated Query)

oWindows Forms vs. Windows Presentation Foundation Datenbank-Unterstützung

oAccess

oMS SQL Server (Express Edition bis 2GB)

oMySQL

oFirebird (Server und Embed Version)

oOracle (Microsoft, Oracle, Corelab)

oPostgre (Corelab)

oSybase

oVistaDB

Datenbanken

Mögliche GUI-Varianten

oDataGridView

oEinbau der FK in das Grid (ComboBox)

oMaster / Details (DetailsView, nur ein Datensatz)

oGruppenwechsel mit Editzeile, ComboBox, Checkbox, ListView etc.

Weitere Eigenschaften

oAufruf eines Filters

oVirtualMode für sehr große Datenmengen

oAuslesen der Tabellen in der Datenbank

oAuslesen der Attribute mit Datentypen pro Tabelle

oAuslesen der Fremdschlüssel etc. pro Tabelle

Datenbanken

(3)

3

FB Automatisierung und Informatik: GUI mit Visual Studio: .net 5

Ablauf

oKopieren der Datenbanken (Employee.mdb)

oErstellen eines Projektes

oEinbau eines DataGridView

oAuswahl der employee.mdb im Entwurfsmodus

oChoose Data Source

oAdd Project DataSource

oDatabase (Doppelklick)

oNew Connection

Datenbanken erstellen mit MS Access

FB Automatisierung und Informatik: GUI mit Visual Studio: .net 6

Acces-Datenbanken

(4)

FB Automatisierung und Informatik: GUI mit Visual Studio: .net 7

Acces-Datenbanken: BindingNavigator einfügen

Acces-Datenbanken: DataGridView einfügen

Projektdatenquelle auswählen

(5)

5

FB Automatisierung und Informatik: GUI mit Visual Studio: .net 9

FB Automatisierung und Informatik: GUI mit Visual Studio: .net 10

(6)

FB Automatisierung und Informatik: GUI mit Visual Studio: .net

private void Form1_Load(object sender, EventArgs e) {

dataGridView1.Dock = DockStyle.Fill;

/* TODO: Diese Codezeile lädt Daten in die Tabelle

"employeeDataSet.EMPLOYEE". Sie können sie bei Bedarf verschieben oder entfernen.

*/

this.eMPLOYEETableAdapter.Fill(this.employeeDataSet.EMPLOYEE);

bindingNavigator1.BindingSource = eMPLOYEEBindingSource;

}

Acces-Datenbanken: Form_Load (automatisch)

(7)

7

FB Automatisierung und Informatik: GUI mit Visual Studio: .net 13

private void Form1_Load(object sender, EventArgs e) {

dataGridView1.Dock = DockStyle.Fill;

eMPLOYEETableAdapter.Fill(

this.employeeDataSet.EMPLOYEE ); // automatisch

bindingNavigator1.BindingSource = eMPLOYEEBindingSource;

}

Access-Datenbanken

FB Automatisierung und Informatik: GUI mit Visual Studio: .net 14

Ergebnis

(8)

FB Automatisierung und Informatik: GUI mit Visual Studio: .net 15 Struktur

oDer .net Provider für Firebird und andere DBS kapselt alle Zugriffe auf die Datenbank

oVollständig in C# geschrieben

oFunktionen:

-Connection

-GetSchema

-Open

-Close

-BeginTransaction

-ChangeDatabase

-CreateCommand

-Dispose

-State (Status: Open Close)

-FbConnection.CreateDatabase

-FbConnection.DropDatabase

-FbConnection.ClearAllPools

-FbConnection.ClearPool

Datenbanken mit .net Provider erstellen

Voraussetzungen

oFirebird Server installiert

oFirebird Client-Installation

oFirebird Embed-Version, einfache DLL

o.net Provider für Firebird

oab Visual Studio 2005 Ablauf

oErstellen eines Projektes

oEinbinden des Providers

oErstellen einer DBS-Klasse (Kapselung)

oErstellen einer Query-Klasse (Kapselung)

oAufbau der GUI (DataGridView)

oErstellen einer Verbindung (connection)

oSQL-Befehl holen

oQuery-Abfrage starten

oDataTable dem Grid zuweisen

Datenbanken erstellen mit Firebird

(9)

9

FB Automatisierung und Informatik: GUI mit Visual Studio: .net 17 Firebird type .NET type FbDataReader

Methode

Example

BIGINT System.Int64 GetInt64() BIGINT Reading Example (C#) BLOB System.Byte[] GetBytes() BLOB Reading Example (C#) BLOB

SUB_TYPE 1

System.String GetString() BLOB SUB_TYPE 1 Reading Example (C#)

CHAR System.String GetString() CHAR Reading Example (C#) DATE System.DateTime GetDateTime() DATE Reading Example (C#) DECIMAL System.Decimal GetDecimal() DECIMAL Reading Example (C#) DOUBLE

PRECISION

System.Double GetDouble() DOUBLE PRECISION Reading Example (C#)

FLOAT System.Float GetFloat() FLOAT Reading Example (C#) INTEGER System.Int32 GetInt32() INTEGER Reading Example (C#) NUMERIC System.Decimal GetDecimal() NUMERIC Reading Example (C#) SMALLINT System.Int16 GetInt16() SMALLINT Reading Example (C#) TIME System.DateTime GetDateTime() TIME Reading Example (C#) TIMESTAMP System.DateTime GetDateTime() TIMESTAMP Reading Example

(C#)

VARCHAR System.String GetString() VARCHAR Reading Example (C#)

Vergleich Firebird und .net Datentypen

FB Automatisierung und Informatik: GUI mit Visual Studio: .net 18

DBS Connection

DataTable 1 Tabelle

DataSet n Tabelle Binding

DataGridView

Textfield

CheckBox

Navigator

(10)

FB Automatisierung und Informatik: GUI mit Visual Studio: .net 19

FbConnection cnn = new FbConnection(sArg);

public DataTable getDBSData(string sSQL) {

//FbCommand command = new FbCommand(sSQL, _cnn);

FbDataAdapter da = new FbDataAdapter(sSQL, _cnn);

DataTable dt = new DataTable("RELATIONS");

da.Fill(dt); // füllt die DataTable mit Daten return dt;

}

// hier kann man mehrere Tabellen erhalten

public DataSet getDBSDataSet(string sSQL, string sTable) { //FbCommand command = new FbCommand(sSQL, _cnn);

FbDataAdapter da = new FbDataAdapter(sSQL, _cnn);

DataSet ds = new DataSet();

da.Fill(ds, sTable); // z. B. "Employee", wichtig da es mehrere gibt return ds;

}

string sFilename = "EMPLOYEE.FDB";

string sSQL1 = "select * from EMPLOYEE";

_dbs.setDbs(sFilename);

DataTabledtSqlGrid1 = _dbs.getDBSData(sSQL1);

DBGrid1.DataSource = dtSqlGrid1;

Abfrage einer SQL-Anweisung: Direkte Zuweisung zum Grid

string sFilename = "EMPLOYEE.FDB";

string sSQL1 = "select * from EMPLOYEE";

_dbs.setDbs(sFilename);

DataSet ds1 = _dbs.getDBSDataSet(sSQL1, "EMPLOYEE");

DBGrid1.DataSource = ds1.Tables["EMPLOYEE"];

(11)

11

FB Automatisierung und Informatik: GUI mit Visual Studio: .net 21

string sFilename = "EMPLOYEE.FDB";

string sSQL1 = "select * from EMPLOYEE";

_dbs.setDbs(sFilename);

DataTabledtSqlGrid1 = _dbs.getDBSData(sSQL1);

bindingSource1.DataSource = dtSqlGrid1;

bindingNavigator1.BindingSource = bindingSource1;

DBGrid1.DataSource = bindingSource1;

Binding emp_no_binding = new Binding("Text", bindingSource1, "EMP_NO");

EEMP_NO.DataBindings.Add(emp_no_binding);

Abfrage einer SQL-Anweisung: Mit Navigator

FB Automatisierung und Informatik: GUI mit Visual Studio: .net 22

string sFilename = "EMPLOYEE.FDB";

string sSQL1 = "select * from EMPLOYEE";

_dbs.setDbs(sFilename);

DataSet ds1= _dbs.getDBSDataSet(sSQL1, "EMPLOYEE");

bindingSource1.DataSource = ds1.Tables["EMPLOYEE"];

bindingNavigator1.BindingSource = bindingSource1;

DBGrid1.DataSource = bindingSource1;

Binding emp_no_binding = new Binding("Text", bindingSource1, "EMP_NO");

EEMP_NO.DataBindings.Add(emp_no_binding);

Abfrage einer SQL-Anweisung: Mit Navigator

(12)

FB Automatisierung und Informatik: GUI mit Visual Studio: .net 23 Ablauf

oErstellen eines Projektes: C:\daten\dbs_firebird1

oGUI-Elemente einfügen (siehe nächste Seite)

o Taste F7, Kopieren der Datenbank-Dateien

oEinbinden des Providers

-Projektbaum öffnen

-Rechte Maustaste über "References"

-Eintrag "Add Reference"

-Register Browse

-Datei :"FirebirdSql.Data.FirebirdClient.dll"

oErstellen einer DBS-Klasse (Kapselung)

oErstellen einer Query-Klasse (Kapselung, optional)

oErstellen einer Verbindung (connection)

oSQL-Befehl holen

oQuery-Abfrage starten

oDataTable dem Grid zuweisen

2. Datenbankbeispiel

ToolStrip:

- Label Tabelle,

- ComboBox ListTabelle: DropDownList,

- ComboBox ListAttribute: DropDownList

- BnStart, enabled=false

SplitContainer einfügen - FixedPanel: Panel1

DataGridView einfügen

Editor:

-Multiline=true,

-Name=EQuery

(13)

13

FB Automatisierung und Informatik: GUI mit Visual Studio: .net 25

FB Automatisierung und Informatik: GUI mit Visual Studio: .net 26 Ablauf

oErstellen eines Projektes: d:\daten\dbsconsole

oGUI-Elemente einfügen (siehe nächste Seite)

o Taste F7, Kopieren der Datenbank-Dateien

oEinbinden des Providers

-Projektbaum öffnen

-Rechte Maustaste über "References"

-Register Browse

-Datei :"FirebirdSql.Data.FirebirdClient.dll"

oErstellen einer DBS-Klasse Dbs, (Kapselung)

oErstellen einer Verbindung (connection)

oSQL-Befehl holen

oQuery-Abfrage starten

oDataTable dem Grid zuweisen

3. Datenbankbeispiel: DbConsole

(14)

FB Automatisierung und Informatik: GUI mit Visual Studio: .net 27

public DataTable getTables() { string[] filter = new string[4];

filter[0] = "dbo"; // null;

filter[1] = null;

filter[2] = null;

filter[3] = null;

DataTable dt;

dt = _dbs.GetSchema("Tables", filter);

return dt;

}

Methode zum Füllen der Datenbank-Daten listBox1.Items.Clear();

for (int row = 0; row < _dtDataBase.Rows.Count; row++) { string sTabletyp = (string)_dtDataBase.Rows[row][3];

if (sTabletyp.Equals("TABLE"))

listBox1.Items.Add(_dtDataBase.Rows[row][2].ToString());

}

listBox1.SelectedIndex = 0;

DbConsole: Ermitteln der Datenbankstruktur

(15)

15

FB Automatisierung und Informatik: GUI mit Visual Studio: .net 29

FB Automatisierung und Informatik: GUI mit Visual Studio: .net 30

Problem: Automatisches Berechnen der Spaltengröße

Beim Zuweisen der dataTable zum Grid wird beim Eintragen jeder Zelle die Tabelle bzgl. der Spaltengröße optimiert. Dies kann sehr lange dauern.

Abhilfe:

DateTime Time1, Time2;

DataTable dt1 = _dbs.getDBSData(sSQL);

Grid1.Visible = false;

Grid1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None;

Grid1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.None;

Time1 = DateTime.Now;

Grid1.DataSource = dt1; // Hier Zuweisen der dataTable bzw. DataSet

Grid1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.ColumnHeader;

Grid1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.None;

Time2 = DateTime.Now;

Grid1.Visible = true;

TimeSpan duration1 = Time2 - Time1;

Text = "Zeit: " + duration1; // Ausgabe der Zeitdauer

(16)

FB Automatisierung und Informatik: GUI mit Visual Studio: .net 31 Zeigt eine Spalte in der Fremdschlüsseltabelle

Datenbank-ComboBox

Tabelle Employee

Empno

Lastname

Firstname

Dept_no

Tabelle Department

Dept_no

Department

Location

Datenbank-ComboBox

(17)

17

FB Automatisierung und Informatik: GUI mit Visual Studio: .net 33

Datenbank-ComboBox: dbs3

FB Automatisierung und Informatik: GUI mit Visual Studio: .net 34 Ablauf

oErstellen eines Projektes: d:\daten\dbs3

oGUI-Elemente einfügen (Panel, Schalter, dataGridView)

odataGridView1.Dock = DockStyle.Fill;

oTaste F7, Kopieren der Datenbank-Dateien

oErstellen einer neuen Klasse „Dbs“

oEinfügen des Quellcodes

oEinbinden des Providers

-Projektbaum öffnen

-Rechte Maustaste über "References / Verweise"

-Register Browse / Durchsuchen

-Datei :"FirebirdSql.Data.FirebirdClient.dll"

3. Datenbankbeispiel: dbs3

(18)

FB Automatisierung und Informatik: GUI mit Visual Studio: .net 35 BnStart-OnClick-Event

public partial class Form1 : Form {

Dbs _dbs;

private void Form1_Load(object sender, EventArgs e) {

dataGridView1.Dock = DockStyle.Fill;

_dbs = new Dbs();

}

}

3. Datenbankbeispiel: dbs3

BnStart-OnClick-Event

public partial class Form1 : Form {

private void BnStart_Click(object sender, EventArgs e) {

_dbs.setDbs("Employee.FDB");

String sSQL = "select * from Employee";

DataTable dt1 = _dbs.getDBSData(sSQL);

dataGridView1.DataSource = dt1;

} }

3. Datenbankbeispiel: dbs3

(19)

19

FB Automatisierung und Informatik: GUI mit Visual Studio: .net 37

string sSQL2 = "select * from Department";

DataTable dt2 = _dbs.getDBSData(sSQL2);

DataGridViewComboBoxColumn cbcol = new DataGridViewComboBoxColumn();

cbcol.DataSource = dt2;

cbcol.DataPropertyName = "DEPT_NO";

cbcol.ValueMember = "DEPT_NO";

cbcol.DisplayMember = "Department";

cbcol.HeaderText = "Abteilungen";

cbcol.DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing;

dataGridView1.Columns.Add(cbcol); // oder Insert

Datenbank-ComboBox

FB Automatisierung und Informatik: GUI mit Visual Studio: .net 38 Zeigt eine Spalte in der Fremdschlüsseltabelle

Master-Detail-Tabellen dbs4

Tabelle Employee

Empno

Lastname

Firstname

Dept_no Tabelle Department

Dept_no

Department

Location

select * from Department select *

from Employee

where dept_no=iDept_no iDept_no

(20)

FB Automatisierung und Informatik: GUI mit Visual Studio: .net 39

Master-Detail-Tabellen

Ablauf

oErstellen eines Projektes: d:\daten\dbs4

oGUI-Elemente einfügen (Label, TextBox, Panel, Schalter,)

oEinfügen eines SplitContainers

oOrientation: Horizontal

oEinfügen zweiter DataGridView

odataGridView1.Dock = DockStyle.Fill;

odataGridView2.Dock = DockStyle.Fill;

oTaste F7, Kopieren der Datenbank-Dateien

oErstellen einer neuen Klasse „Dbs“

oEinfügen des Quellcodes

oEinbinden des Providers

-Projektbaum öffnen

-Rechte Maustaste über "References / Verweise"

-Register Browse / Durchsuchen

-Datei :"FirebirdSql.Data.FirebirdClient.dll"

4. Datenbankbeispiel: dbs4

(21)

21

FB Automatisierung und Informatik: GUI mit Visual Studio: .net

Master-Detail-Tabellen: Aufbau Name: ESql

Abteilungen

Mitarbeiter

FB Automatisierung und Informatik: GUI mit Visual Studio: .net 42

Verknüpfen der Mastertabelle mit dem Event "SelectionChanged"

Holen der aktuellen Zeile, Dept_no

Aufbau einer neuen SQL-Abfrage, where dept_no = iDept_no

Setzen des DataSet

Master-Detail-Tabellen

Quellcode:

DataGridViewRow row = dataGridView1.CurrentRow;

DataGridViewCell zelle = row.Cells[0];

String sDeptNo = zelle.Value.ToString();

ESql.Text = sDeptNo;

string sSQL2 = "select * from Employee where Dept_no = " + sDeptNo;

DataTable dt2 = _dbs.getDBSData(sSQL2);

dataGridView2.DataSource = dt2; // _dbs.getDBSData(sSQL2);

Referenzen

ÄHNLICHE DOKUMENTE

A control program consists of Program Control Instructions (PCl) as illustrated at the top of figure 1-2. The nodes represent program control instructions; the

Compared to the remote sensing-based mapping introduced by Friedrich and Oschlies [2009], the accuracy in reproducing the annual cycle of pCO 2 and basinwide mean values of pCO 2 and

private TreeNode addNode(TreeNode parent, string name, int sym1, int sym2). TreeNode node = new TreeNode(name,

Das Bild soll in einer dynamishen height × width groÿen char -Matrix gespeihert werden.. Zuerst müssen alle Werte dieser Matrix

Halle (Saale), Berlin, Berlin-Neukölln, Chemnitz, Hannover, Köln, Leipzig, Reutlingen, Stuttgart, Ulm, Erfurt, Jena, Marburg, Nordhausen, Brand-Erbisdorf, Bernburg,

Halle (Saale), Berlin, Berlin-Neukölln, Chemnitz, Hannover, Köln, Leipzig, Reutlingen, Stuttgart, Ulm, Erfurt, Jena, Marburg, Nordhausen, Brand-Erbisdorf, Bernburg,

Methoden mit gleichem Namen aber verschiedenen Parameterlisten können in derselben Klasse deklariert werden. static void write (int

Two types of exits from the pegged exchange rate regime, namely, the crisis-driven exit and the orderly exit, are investigated. The two types of exits are very different in nature