Ich versuche ein Programm (Buchdatenbankprogramm) welches ich heruntergelaen habe zu erweitern.
Die vorhandene Tabelle book erweiterte ich um das Attribut bzw den Fremdschlüssel kategorieID.
Im Programm habe ich eine Combobox hinzugefügt die die Werte aus der Tabelle kategorie einlesen.
Wenn ein Datensatz eingefügt wird soll der Fremdschlüssel aus der Tabelle kategorie geholt werden, dessen kategorieName ausgewählt wurde.
Wenn ich ein Datensatz einfügen möcht (insertbutton)gibt es ein Fehler bei der Zeile 31:
int temp = oleDbCmd.ExecuteNonQuery();
OleDBexception was unhandled
Die Abfrage muss mindestens auf einer Tabelle oder Abfrage basieren.
Was könnte das Problem sein ?
Tabellen:
book
ID
bookName
description
kategorieID
kategorie
ID
kategorieName
Die vorhandene Tabelle book erweiterte ich um das Attribut bzw den Fremdschlüssel kategorieID.
Im Programm habe ich eine Combobox hinzugefügt die die Werte aus der Tabelle kategorie einlesen.
Wenn ein Datensatz eingefügt wird soll der Fremdschlüssel aus der Tabelle kategorie geholt werden, dessen kategorieName ausgewählt wurde.
Wenn ich ein Datensatz einfügen möcht (insertbutton)gibt es ein Fehler bei der Zeile 31:
int temp = oleDbCmd.ExecuteNonQuery();
OleDBexception was unhandled
Die Abfrage muss mindestens auf einer Tabelle oder Abfrage basieren.
Was könnte das Problem sein ?
C#-Quellcode
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Windows.Forms;
- using System.Data.OleDb;
- namespace TutorialConnectToAccessDB
- {
- public partial class FormMain : Form
- {
- private OleDbConnection bookConn;
- private OleDbCommand oleDbCmd = new OleDbCommand();
- private String connParam = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=book.accdb;Persist Security Info=False";
- public FormMain()
- {
- InitializeComponent();
- bookConn = new OleDbConnection(connParam);
- bookConn.Open();
- oleDbCmd.Connection = bookConn;
- fillcmbKategorie();
- }
- private void buttonInsert_Click(object sender, EventArgs e)
- {
- oleDbCmd.CommandText = "INSERT INTO book (bookName, description, kategorieID) VALUES ('" + this.textBoxBookName.Text + "','" + this.textBoxDescription.Text + "', (SELECT ID FROM kategorie WHERE kategorieName ='"+ cmbKategorie.SelectedItem.ToString() + "'));";
- int temp = oleDbCmd.ExecuteNonQuery();
- if (temp > 0)
- {
- textBoxBookName.Text = null;
- textBoxDescription.Text = null;
- cmbKategorie.SelectedItem = null;
- MessageBox.Show("Record Successfuly Added");
- }
- else
- {
- MessageBox.Show("Record Fail to Added");
- }
- bookConn.Close();
- }
- private void buttonShowAll_Click(object sender, EventArgs e)
- {
- dataGridView1.DataSource = null;
- dataGridView1.Rows.Clear();
- dataGridView1.Refresh();
- OleDbDataAdapter dAdapter = new OleDbDataAdapter("SELECT * FROM book", connParam);
- OleDbCommandBuilder cBuilder = new OleDbCommandBuilder(dAdapter);
- DataTable dataTable = new DataTable();
- DataSet ds = new DataSet();
- dAdapter.Fill(dataTable);
- for (int i = 0; i < dataTable.Rows.Count; i++)
- {
- dataGridView1.Rows.Add(dataTable.Rows[i][0], dataTable.Rows[i][1], dataTable.Rows[i][2]);
- }
- dataGridView1.Update();
- }
- private void fillcmbKategorie()
- {
- oleDbCmd.CommandText = "SELECT * FROM kategorie";
- OleDbDataReader reader = oleDbCmd.ExecuteReader();
- while (reader.Read())
- {
- cmbKategorie.Items.Add(reader["kategorieName"].ToString());
- }
- reader.Close();
- }
- }
- }
Tabellen:
book
ID
bookName
description
kategorieID
kategorie
ID
kategorieName