Information

  • Informatik
  • C#
  • Datenbank: Access

Zurreal.de

Fantasy Art ~ Phantastische Kunst

Fantasy Art ~ Phantastische Kunst

Please click on 'Switch Style'.
The style of the website will change.

Bitte klicken Sie auf 'Switch Style'.
Die Gestaltung der Webseite wird sich ändern.

Access: Allgemein

using System.Data.OleDb;

Microsoft Access Database Engine (2010) wird benötigt.
https://www.microsoft.com/de-DE/download/details.aspx?id=13255

Access-DB zum C#-Projekt hinzufügen
Projekt, Neue Datenquelle hinzufügen, Datenbank, DataSet, Neue Verbindung, Microsoft Access-Datenbankdatei, Durchsuchen, '.accdb' auswählen, Öffnen, OK, usw.


/* ### OleDB ### */
/* Command, Connection, Data Source */

OleDbCommand cmd = new OleDbCommand();
OleDbConnection conn = new OleDbConnection();
conn.ConnectionString =
"Provider = Microsoft.ACE.OLEDB.12.0;" + @"Data Source = C:\DB.accdb;";

Steht immer am Anfang.


/* ### ExecuteNonQuery ### */
/* Open, Execute, MBox, Close */

cmd.Connection = conn;
conn.Open();
int i = cmd.ExecuteNonQuery();
MessageBox.Show(i.ToString() + " BlaBla");
conn.Close();

Jede Veränderung an der Datenbank (ändern, löschen, einfügen) wird erst mit ExecuteNonQuery tatsächlich ausgeführt und abgeschlossen.


Access: Tabelle auslesen


OleDbDataReader reader;


/* ### OleDB ### */
/* Command, Connection, Data Source */


cmd.CommandText = "SELECT * FROM TBL ORDER BY ID;";
cmd.Connection = conn;


try
{
  conn.Open();
  reader = cmd.ExecuteReader();
  while(reader.Read())
  {
    ListBox.Items.Add(
    reader[0] + ";" +
    reader[1] + ";" +
    reader[2]);
  }
  reader.Close();
  conn.Close();
}


catch (Exception ex)
{
  MessageBox.Show(ex.Message);
  Application.Exit();
}

TBL = Tabelle, ID = Feld mit ID-Nr.
Soviele reader[x] nehmen, wie es Felder in der Tabelle gibt.

 

 


Access: Parameter-Abfrage


OleDbDataReader reader;


/* ### OleDB ### */
/* Command, Connection, Data Source */


cmd.CommandText = "SELECT * FROM TBL WHERE Name Like ?;";
/* Name, wahlweise mit +"%" */
cmd.Parameters.Add
("Name", OleDbType.Char, 255).Value = txt_Suche.Text + "%";
cmd.Connection = conn;


try
{
  conn.Open();
  reader = cmd.ExecuteReader();
  while(reader.Read())
  {
    ListBox.Items.Add(
    reader[0] + ";" +
    reader[1] + ";" +
    reader[2]);
  }
  reader.Close();
  conn.Close();
}


catch (Exception ex)
{
  MessageBox.Show(ex.Message);
  Application.Exit();
}

Sternchen *
Prozent: %
Joker für ein Zeichen
Unterstrich: _
Joker Parameter
Fragez: ?

Access: Datensatz einfügen


/* ### OleDB ### */
/* Command, Connection, Data Source */


cmd.CommandText = "INSERT INTO TBL VALUES (?,?,?)";
/* ?,, = ID */
cmd.Parameters.Add
("ID", OleDbType.Integer).Value = ID;
/* ,?, = Name */
cmd.Parameters.Add
("Name", OleDbType.Char,50).Value = txt_Nam.Text;
/* ,,? = Typ */
cmd.Parameters.Add
("Typ", OleDbType.Char,50).Value = txt_Typ.Text;


/* ### ExecuteNonQuery ### */
/* Open, Execute, MBox, Close */

Beispiel: TBL hat 3 Datenfelder (?,?,?): ID, Name, Typ.
Gewählte ID muss verfügbar sein.

ExecuteNonQuery:
Das tatsächliche Ausführen vom CommandText.

("Name", OleDbType.Char, 50)
(Datenfeld, OleDbType.Datentyp, Maximalgröße)

  • OleDbType:
    • Char
    • Integer
    • Double
    • String gibt es nicht!

Access: Datensatz löschen

/* Zeilen_Nr ist Id */
if(Zeilen_Nr != 0) {

/* ### OleDB ### */
/* Command, Connection, Data Source */


cmd.CommandText =
"DELETE FROM TBL WHERE ID = ?";
cmd.Parameters.Add
("ID", OleDbType.Integer).Value = Zeilen_Nr;


/* ### ExecuteNonQuery ### */
/* Open, Execute, MBox, Close */

}

else
{
 MessageBox.Show("Kein Datensatz ausgewählt");
}

...


Access: Datensatz ändern

/* Zeilen_Nr ist Id */
if(Zeilen_Nr != 0) {

/* ### OleDB ### */
/* Command, Connection, Data Source */


cmd.CommandText =
"UPDATE TBL SET Feld1 = ?, Feld2 = ? WHERE ID LIKE ?";
/* Feld1 wird aus der TextBox */
/* gelesen und hinzugefügt    */
cmd.Parameters.Add
("Feld1", OleDbType.Char, 50).Value = txt_Feld1.Text;
/* Feld2 ... */
cmd.Parameters.Add
("Feld2", OleDbType.Char, 50).Value = txt_Feld2.Text;
/* ID ... */
cmd.Parameters.Add
("ID", OleDbType.Integer).Value = Zeilen_Nr;


/* ### ExecuteNonQuery ### */
/* Open, Execute, MBox, Close */

}

else
{
 MessageBox.Show("Kein Datensatz ausgewählt");
}

Beispiel: TBL hat 3 Datenfelder: Feld1, Feld2, ID.


Access: Formular-Abfrage


/* Pfad */
private string Verbindung =
"Provider = Microsoft.ACE.OLEDB.12.0;" +
@"Data Source = C:\db.accdb";

Da rein schreiben:
public partial class [name] : Form

private void cmd_X_Click(...)
{

/* Pfad */
OleDbConnection conn = new OleDbConnection(Verbindung);
/* FormularAbfrage */
OleDbCommand cmd = new OleDbCommand("FormularAbfrage", conn);
cmd.CommandType = CommandType.TableDirect;
OleDbDataAdapter da = new OleDbDataAdapter(cmd);
DataSet ds = new DataSet();


try
{
conn.Open();
/* Name des Datenfelds wählen */
da.Fill(ds, "Datenfeld");
conn.Close();
/* In DGV ausgeben */
DGV.DataSource = ds;
DGV.DataMember = "Datenfeld";
}


catch (Exception ex)
{
MessageBox.Show(ex.Message);
Application.Exit();
}

}

...


Access: Statische Abfrage


....

....

...?


Verfügbare ID finden (A)


int ID_A = 1;


while(reader.Read())
{
  ListBox.Items.Add(
  reader[0] + ";" +
  reader[1]);

  if (ID_A == Convert.ToInt32(reader[0]))
  {
    ID_A++;
  }
  
}

Wenn es die ID gleichen Wertes schon gibt, dann zähle 1 zur ID.


Listbox: Selected Item & Clear


private void listbox_SelectedIndexChanged(...)
{
  string Zeile = null;
  int Zeilen_Nr = 0;
  /* Splitten beim Trennzeichen */
  Zeile = listbox.SelectedItem.ToString();
  string[] Array_Auswahl;
  Array_Auswahl = Zeile.Split(';');
  /* Auswahl jenes Eintrages, */
  /* der die ID enthalten muss */
  Zeilen_Nr = Convert.ToInt32(Array_Auswahl[0]);
}

Listbox: Zeilennummer auslesen
Listbox_SelectedIndexChanged: ListBox, Doppelklick.


ListBox.Items.Clear();

ListBox-Items löschen.


MySQL


...

MySQL Befehle können aus Access kopiert werden:
Erstellen, Abfrage-Entwurf, [Anpassen, Sortierung, ...], Ansicht, SQL.
Alle Klammern können gelöscht werden.