[.NET] MySQL Datenbank zugriff

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von MasterJulian, 31. März 2009 .

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 31. März 2009
    MySQL Datenbank zugriff

    Vorwort: Ich versuche mich gerade via Learning by Doing in Datenbanken einzuarbeiten. Ich habe den MySQL connector installiert (funktioniert auch) und den MySQL server gestartet. Darin dann ne datenbank (Name: sandbox) samt Tabelle (Name: test) erstellt. Soweit so gut.
    Ich habe noch NIE mit Datenbanken (egal ob lokal via Access oder per Server) gearbeitet.
    Ich arbeite mit diesem Tutorial MySQL :: Simple DataGridView Example (inc. autoincrement) (nur mit einer anderen Datenbank)
    Meine Datenbank sieht so aus:
    Code:
    mysql> SELECT * FROM test;
    +-------+-------+-------------------+
    | Autor | Titel | Inhalt |
    +-------+-------+-------------------+
    | Ich | Test | Dies ist ein Test |
    +-------+-------+-------------------+
    Nun hänge ich an den commands. Wie gesagt hab noch nie damit gearbeitet. Via Mysql console hats schon geklaptt (sieht man ja). Doch ich bekomme das mit dem Insert einfach nicht hin. Mein Code sieht so aus:
    Code:
    Imports MySql.Data.Types
    Imports MySql.Data.MySqlClient
    
    Public Class Form1
     Private da As New Dictionary(Of String, MySqlDataAdapter)
     Private dataSet As DataSet
     Private table As String
     Private connStr = "server=localhost;user id=root;password=root;database=sandbox"
    
     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
     'Connect to MySQL
     table = "test"
     Dim MySqlCon As New MySqlConnection(connStr)
     MySqlCon.Open()
     'create DataSet
     dataSet = New DataSet("TestDataSet")
     'set the dataAdapter for Test
     da(table) = New MySqlDataAdapter("SELECT * FROM `test`;", MySqlCon)
     
     'set scheme
     'da(table).FillSchema(dataSet, SchemaType.Source, table)
     da(table).FillSchema(dataSet, SchemaType.Mapped, table)
     'fill
     da(table).Fill(dataSet, table)
     'set prim key
     dataSet.Tables(table).PrimaryKey = New DataColumn() {dataSet.Tables(table).Columns("Autor")}
     'insert code
     da(table).InsertCommand = New MySqlCommand("INSERT INTO `test`(Autor, Titel, Inhalt) VALUES (`?Autor`, `?Titel`, `?Inhalt`);", MySqlCon)
     da(table).InsertCommand.Parameters.Add("?Autor", MySqlDbType.VarChar, 30, "Autor")
     da(table).InsertCommand.Parameters.Add("?Titel", MySqlDbType.VarChar, 50, "Titel")
     da(table).InsertCommand.Parameters.Add("?Inhalt", MySqlDbType.Text, 200, "Inhalt")
    
     
     'bind
     Me.DataGridViewMain.DataSource = dataSet.Tables(table)
    
     End Sub
    
     Private Sub BtMySQLSet_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtMySQLSet.Click
     Dim changes As DataTable = dataSet.Tables(table).GetChanges
     If changes IsNot Nothing Then
     Dim dataRow As DataRow = dataSet.Tables(table).Rows.Find(0)
     If dataRow IsNot Nothing Then
     dataRow.Delete()
     End If
    
     'commit changes to the database.
     da(table).Update(changes) <- hier Fehler
     dataSet.Tables(table).AcceptChanges()
    
     'get the changed values back to the datatable
     dataSet.Tables(table).Merge(changes)
     dataSet.Tables(table).AcceptChanges()
     End If
     End Sub
    End Class
    jedoch bekomme ich in der markierten zeile den Fehler "Unknown column '?Autor' in 'field list'". Der muss aber irgendwo in dem Insert Command liegen. Doch was genau mache ich falsch? Oh man dieser SQL Mist macht mich irgendwann noch fertig. Doch irgendwann werd ich mich so oder so mal damit befassen müssen.
     
  2. 1. April 2009
    AW: MySQL Datenbank zugriff

    denke dein Problem liegt an der Verwendung von ´ anstelle von ' (soferns das forum hier nicht falsch darstellt ) ... mir ist diese Fehlermeldung zumindest nur in diesem zusammenhang bekannt. Diese besagt ja dass die Tabelle test nicht gefunden wird (sonst würde er die spalte erkennen!) du brauchst auch im INSERT - Statement die Zieltabelle nicht quoten!

    Code:
    da(table).InsertCommand = New MySqlCommand("INSERT INTO test(Autor, Titel, Inhalt) VALUES ('?Autor', '?Titel', '?Inhalt');", MySqlCon)
    
    probiers erstmal so, denke das müsste so funktionieren!
     
  3. 1. April 2009
    AW: MySQL Datenbank zugriff

    Thx das war schon mal der richtige Ansatz. Doch nun wurde einfach "?Autor" ... geschrieben. Der richtige Code sieht nun so aus:
    Code:
    da(table).InsertCommand = New MySqlCommand("INSERT INTO test(Autor, Titel, Inhalt) VALUES (?Autor, ?Titel, ?Inhalt);", MySqlCon)
    So erstmal zu bis zum nächsten Problem
     
  4. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.