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.
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();
/* Ergibt das Sinn --> int i = cmd..? */
/* Wäre reader = cmd... nicht besser? */
/* Ich weiß es nicht mehr... */
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.
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.
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();
}
/* ### 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)
/* 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");
}
...
/* 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.
/* 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();
}
}
...
....
....
...?
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.
string Pfad = "", TabName = "";
bool AuswahlGetroffen = false;
bool TabellenNameBekannt = false;
OpenFileDialog openFileDialog1 = new OpenFileDialog();
openFileDialog1.Filter =
"Access (*.accdb)|*.accdb|Alle (*.*)|*.*";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
Pfad = openFileDialog1.FileName;
lbx_DBTabellen.Items.Clear();
txt_AuswahlDB.Text = Pfad;
AuswahlGetroffen = true;
txt_Info.Clear();
lbx_DBSpalten.Items.Clear();
txt_AuswahlTAB.Clear();
}
if (AuswahlGetroffen == true)
{
OleDbConnection conn = new OleDbConnection();
conn.ConnectionString =
"Provider = Microsoft.ACE.OLEDB.12.0;"
+ @"Data Source = " + Pfad
+ ";";
/* Alle Tabellennamen ausgeben */
conn.Open();
DataTable Tabellen =
conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[]
{ null, null, null, "TABLE" });
foreach (DataRow row in Tabellen.Rows)
{
lbx_DBTabellen.Items.Add(row[2]);
}
conn.Close();
conn.Dispose();
AuswahlGetroffen = false;
}
lbx_DBSpalten.Items.Clear();
/* Prüfen, ob Item in Liste ausgewählt wurde */
if (lbx_DBTabellen.SelectedIndex < 0)
{
MessageBox.Show("Keine Auswahl");
}
else
{
/* Ausgewählter TabellenName als String */
TabName = lbx_DBTabellen.GetItemText(lbx_DBTabellen.SelectedItem);
txt_AuswahlTAB.Text = TabName;
TabellenNameBekannt = true;
}
/* SpaltenNamen herausfinden */
if (TabellenNameBekannt == true)
{
OleDbConnection conn = new OleDbConnection();
DataTable Spalten;
conn.ConnectionString =
"Provider =
Microsoft.ACE.OLEDB.12.0;"
+ @"Data Source = "
+ Pfad + ";";
conn.Open();
/* Retrieve schema information about columns */
/* Restrict to just the selected TABLE */
Spalten =
conn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, new Object[]
{ null, null, TabName, null });
/* List the column name from */
/* each row in the schema table */
for (int i = 0; i < Spalten.Rows.Count; i++)
{
lbx_DBSpalten.Items.Add(Spalten.Rows[i].ItemArray[3]);
}
conn.Close();
TabellenNameBekannt = false;
}
Folgende Form-Elemente werden benötigt:
Verweise:
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 Befehle können aus Access kopiert werden:
Erstellen, Abfrage-Entwurf, [Anpassen, Sortierung, ...], Ansicht, SQL.