• Keine Ergebnisse gefunden

FB Automatisierung und Informatik

N/A
N/A
Protected

Academic year: 2021

Aktie " FB Automatisierung und Informatik"

Copied!
42
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(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

(2)

Inhalt

■ TabbedPane (Register)

■ ListView

■ Tree

■ Tabelle

■ MDI-Programme

■ Erweiterte Grafik

■ Threads und Semaphore

(3)

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

Mögliche Varianten

o

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

o

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

o

OLE DB Data Link (Data Link File UDL)

o

Net-Provider

o

ADO.net

o

LINQ (Language Integrated Query)

o

Windows Forms vs. Windows Presentation Foundation

Datenbank-Unterstützung

o

Access

o

MS SQL Server (Express Edition bis 2GB)

o

MySQL

o

Firebird (Server und Embed Version)

o

Oracle (Microsoft, Oracle, Corelab)

o

Postgre (Corelab)

o

Sybase

o

VistaDB

Datenbanken

(4)

Mögliche GUI-Varianten

o

DataGridView

o

Einbau der FK in das Grid (ComboBox)

o

Master / Details (DetailsView, nur ein Datensatz)

o

Gruppenwechsel mit Editzeile, ComboBox, Checkbox, ListView etc.

Weitere Eigenschaften

o

Aufruf eines Filters

o

VirtualMode für sehr große Datenmengen

o

Auslesen der Tabellen in der Datenbank

o

Auslesen der Attribute mit Datentypen pro Tabelle

o

Auslesen der Fremdschlüssel etc. pro Tabelle

Datenbanken

(5)

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

Ablauf

o

Kopieren der Datenbanken (Employee.mdb)

o

Erstellen eines Projektes

o

Einbau eines DataGridView

o

Auswahl der employee.mdb im Entwurfsmodus

o

Choose Data Source

o

Add Project DataSource

o

Database (Doppelklick)

o

New Connection

Datenbanken erstellen mit MS Access

(6)

Acces-Datenbanken

(7)

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

Acces-Datenbanken: BindingNavigator einfügen

(8)

Acces-Datenbanken: DataGridView einfügen

(9)

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

(10)
(11)

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

(12)

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)

(13)

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

(14)

Ergebnis

(15)

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

Struktur

o

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

o

Vollständig in C# geschrieben

o

Funktionen:

-

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

(16)

Voraussetzungen

o

Firebird Server installiert

o

Firebird Client-Installation

o

Firebird Embed-Version, einfache DLL

o

.net Provider für Firebird

o

ab Visual Studio 2005

Ablauf

o

Erstellen eines Projektes

o

Einbinden des Providers

o

Erstellen einer DBS-Klasse (Kapselung)

o

Erstellen einer Query-Klasse (Kapselung)

o

Aufbau der GUI (DataGridView)

Erstellen einer Verbindung (connection)

Datenbanken erstellen mit Firebird

(17)

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

(18)

DBS Connection

DataTable 1 Tabelle

Binding DataGridView

CheckBox

Navigator

(19)

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;

}

(20)

string sFilename = "EMPLOYEE.FDB";

string sSQL1 = "select * from EMPLOYEE";

_dbs.setDbs(sFilename);

DataTable dtSqlGrid1 = _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);

(21)

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

string sFilename = "EMPLOYEE.FDB";

string sSQL1 = "select * from EMPLOYEE";

_dbs.setDbs(sFilename);

DataTable dtSqlGrid1 = _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

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

Abfrage einer SQL-Anweisung: Mit Navigator

(23)

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

Ablauf

o

Erstellen eines Projektes: C:\daten\dbs_firebird1

o

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

o

Taste F7, Kopieren der Datenbank-Dateien

o

Einbinden des Providers

-

Projektbaum öffnen

-

Rechte Maustaste über "References"

-

Eintrag "Add Reference"

-

Register Browse

-

Datei :"FirebirdSql.Data.FirebirdClient.dll"

o

Erstellen einer DBS-Klasse (Kapselung)

o

Erstellen einer Query-Klasse (Kapselung, optional)

o

Erstellen einer Verbindung (connection)

o

SQL-Befehl holen

o

Query-Abfrage starten

o

DataTable dem Grid zuweisen

2. Datenbankbeispiel

(24)

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

(25)

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

(26)

Ablauf

o

Erstellen eines Projektes: d:\daten\dbsconsole

o

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

o

Taste F7, Kopieren der Datenbank-Dateien

o

Einbinden des Providers

-

Projektbaum öffnen

-

Rechte Maustaste über "References"

-

Register Browse

-

Datei :"FirebirdSql.Data.FirebirdClient.dll"

o

Erstellen einer DBS-Klasse Dbs, (Kapselung)

o

Erstellen einer Verbindung (connection)

o

SQL-Befehl holen

o

Query-Abfrage starten

3. Datenbankbeispiel: DbConsole

(27)

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

(28)

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

DbConsole: Ermitteln der Datenbankstruktur

(29)

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

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

(31)

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

(32)

Datenbank-ComboBox

(33)

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

Datenbank-ComboBox: dbs3

(34)

Ablauf

o

Erstellen eines Projektes: d:\daten\dbs3

o

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

o

dataGridView1.Dock = DockStyle.Fill;

o

Taste F7, Kopieren der Datenbank-Dateien

o

Erstellen einer neuen Klasse „Dbs“

o

Einfügen des Quellcodes

o

Einbinden des Providers

-

Projektbaum öffnen

-

Rechte Maustaste über "References / Verweise"

-

Register Browse / Durchsuchen

-

Datei :"FirebirdSql.Data.FirebirdClient.dll"

3. Datenbankbeispiel: dbs3

(35)

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

(36)

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

(37)

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

(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

(39)

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

Master-Detail-Tabellen

(40)

Ablauf

o

Erstellen eines Projektes: d:\daten\dbs4

o

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

o

Einfügen eines SplitContainers

o

Orientation: Horizontal

o

Einfügen zweiter DataGridView

o

dataGridView1.Dock = DockStyle.Fill;

o

dataGridView2.Dock = DockStyle.Fill;

o

Taste F7, Kopieren der Datenbank-Dateien

o

Erstellen einer neuen Klasse „Dbs“

o

Einfügen des Quellcodes

o

Einbinden des Providers

-

Projektbaum öffnen

4. Datenbankbeispiel: dbs4

(41)

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

Master-Detail-Tabellen: Aufbau Name: ESql

Abteilungen

Mitarbeiter

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

Referenzen

ÄHNLICHE DOKUMENTE

Erstellen Sie eine Funktion in Oracle, F_Upper, die den Parameter in Großbuchstaben umwandeln. CREATE OR REPLACE FUNCTION F_Upper( name in char) RETURN

public int getColumnCount() { return AnzCols; } public int getRowCount() { return AnzRows; } public Object getValueAt(int row, int column) {.

writeInt (Schreiben einer 32-Bit Vorzeichenzahl) writeLong (Schreiben einer 64-Bit Vorzeichenzahl) writeShort (Schreiben einer 16-Bit Vorzeichenzahl) writeUTF (Schreiben eines

Was passiert, wenn JUnit die Tests dieser Klasse ausführt. • Das Test-Framework durchsucht die Testklasse mit Hilfe des Reflection API nach öffentlichen Methoden, die

Statt alle möglichen Eigenschaften in einer komplexen, anpassbaren Klasse vorherzusehen, wird eine einfache Klasse definiert und diese inkrementell mit.

Abs Returns the absolute value of a specified number. Acos Returns the angle whose cosine is the specified number. Asin Returns the angle whose sine is the specified number. Atan

FB Automatisierung und Informatik: Windows Presentation Foundation.. Window

FB Automatisierung und Informatik: Windows Presentation Foundation.. Window