Announcement

Collapse
No announcement yet.

ADO .NET mit C# und ACCESS

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • ADO .NET mit C# und ACCESS

    Hallo liebe Leute,

    leider habe ich einen Fehler den ich nicht verstehen kann.

    Ich habe mir eine Methode geschrieben, womit ich einen Datensatz in meine Access DB einfügen will. Die Values werden als Parameter übergeben.Der SQL Befehl sieht so aus.

    string insert = "INSERT INTO laufen(bemerkung, datum, kalenderwoche, kcal, lauzeit, meter, puls, veranstaltung) VALUES ('Bemerkung', 'Datum', 'Kw', 'Kcal', 'Laufzeit', 'Meter', 'Puls', 'Veranstaltung')";

    Als Exception kommt immer dieses: Datentyp und Kriterienausdruck unverträglich.

    Sind die Datentypen in ACCESS anders als in C#, d.h. long int in ACCESS = Int32 in C# oder??
    Ich habe schon viel ausprobiert und weiss auch, daß es mit dem DataAdapter und DataSet einfacher geht, aber wozu einfacher machen ;-).

    Gruss der Olaf

    nun

  • #2
    Hallo,

    ohne die Kenntnis der Tabellenstruktur der ACCESS-Datenbanktabelle wird wohl keiner diese Frage beantworten können. Ein einfacher Test zeigt, dass keine Probleme auftreten (die für den Test genutzte Tabelle besteht aus einem AutoInc-Feld und 2 Textfeldern):
    <pre>
    string strAccessConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Temp\\OlafD.mdb";
    string strINS = "INSERT INTO TestTbl (Wert1,Wert2) VALUES ('A', 'B')";
    OleDbConnection aAccessConn = new OleDbConnection(strAccessConn);
    aAccessConn.Open();
    try
    {
    OleDbCommand aCmd = new OleDbCommand(strINS, aAccessConn);
    int iResult;
    iResult = aCmd.ExecuteNonQuery();
    MessageBox.Show(iResult.ToString());
    }
    catch (System.Exception err)
    {
    MessageBox.Show("Exception: " + err.Message, "Oops", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
    finally
    {
    aAccessConn.Close();
    }
    </pre&gt

    Comment


    • #3
      Vielen Dank erst ein mal für die Antwort.<BR>
      <BR>
      Also Datenbankstruktur:<BR>
      <BR>
      Primärschluessel --> long int <BR>
      Attribut --> text<BR>
      Zahl --> byte<BR>
      Attribut --> text<BR>
      Zahl --> long int<BR>
      Zahl --> long int<BR>
      Zahl --> long int<BR>
      Attribut --> memo<BR>
      Attribut --> text <BR>
      <BR>
      Quallcode --> Methode für mein Insert<BR>
      <BR>
      public static void dbInsert(OleDbConnection connection,string Datum,int Kw,string Laufzeit,int Meter,int Puls,int Kcal,string Bemerkung,string Veranstaltung)<BR>
      {<BR>
      try<BR>
      {<BR>
      connection.Open();<BR>
      string insert = "INSERT INTO laufen2002(bemerkung, datum, kalenderwoche, kcal, lauzeit, meter, puls, veranstaltung)"+<BR>
      " VALUES ('Bemerkung', 'Datum', 'Kw', 'Kcal', 'Laufzeit', 'Meter', 'Puls', 'Veranstaltung')";<BR>
      OleDbCommand insertCommand = new OleDbCommand();<BR>
      insertCommand.Connection = connection;<BR>
      insertCommand.CommandText = insert;<BR>
      int count = insertCommand.ExecuteNonQuery();<BR>
      connection.Close();<BR>
      MessageBox.Show("Insert" + count +" Datensätze","Klasse",MessageBoxButtons.YesNoCancel ,MessageBoxIcon.Asterisk);<BR>
      }<BR>
      catch (Exception caught)<BR>
      {<BR>
      MessageBox.Show("Fehler:" + caught.Message ,"Fehler!!",MessageBoxButtons.OK,MessageBoxIcon.Wa rning);<BR>
      }<BR>
      finally<BR>
      {<BR>
      connection.Close();<BR>
      }<BR>

      }<BR>
      <BR><BR>
      Fehlermeldung: Datentyp in Kriterienausdruck unverträglich<BR>
      <BR><BR>
      Hoffe mir kann geholfen werden von irgend Jemanden dort draussen?<BR>
      <BR>
      Danke + Gruss <BR>
      Olaf<BR>
      PS: Entschuldigt die wiederliche Formatierung!

      Comment


      • #4
        Hallo Olaf,<br>
        nein, schöne Formatierung. Ich finde das hat was.

        Ich versuche erstmal deine Datenbankstruktur zu rekonstruieren. Da du leider nur die Datentypen aufgezählt hast, jedoch nicht den Spaltennamen:

        <pre>
        text --> bemerkung
        byte --> kalenderwoche (?)
        text --> datum (?)
        longint --> kcal
        longint --> lauzeit
        longint --> meter
        memo --> puls (?)
        text --> veranstaltung
        </pre>
        Aber irgendwie passt das nicht ganz... Mein erster Verdacht war, dass du versuchst in der Datenbank Werte mit falschen Datentyp zu speichern.

        ...und das ist nicht wirklich dein VALUE-Parameter deiner Insert-Anweisung?<br>
        <i>VALUES ('Bemerkung', 'Datum', 'Kw', 'Kcal', 'Laufzeit', 'Meter', 'Puls', 'Veranstaltung')</i><br>
        Da du hier lauter string wie 'Bemerkung' einfügst. Besser wäre die Verwendung von deinen Parametern:<br>
        <i>string insert = "INSERT ... VALUES ('" + Bemerkung + "', '" + Datum + ...</i><br>
        Da dieses anhängen jedoch auch nicht sehr schön aussieht (schlecht zu pflegen) vielleicht die Verwendung von Parametern?
        <pre>
        OleDbCommand com;
        com = new OleDbCommand("INSERT INTO laufen2002 (bemerkung) VALUES (@bemerkung)", connection);
        com.CommandType = CommandType.StoredProcedure;
        OleDbParameter pmtr;
        pmtr = new OleDbParameter("@bemerkung", OleDbType.VarChar).Value = Bemerkung;
        com.Parameters.Add(pmtr);
        com.ExecuteNonQuery();
        </pre>
        Ich habe hier mal nur exemplarisch das Feld Bemerkung gewählt. Wichtig ist auch für den Parameter den selben Datentyp zu wählen, der auch für das Feld in der Datenbank gewählt wurde.<p>
        Leider habe ich bisher nur mit SQL Server programmiert. Das ist daher nur ein Schuss ins Blaue.

        Vielleicht hilfts ja ein bisschen

        Comment


        • #5
          Hallo Jörg,

          ich danke Dir vielmals. Du hast mich auf die kleine aber entscheidende Sache aufmerksam gemacht.
          Oft sieht man den Wald vor lauter Bäumen nichtmehr.
          Der Insert String wars mit den STRINGS und nicht meinen Parametern.
          Ich depp ;-).

          Gruss Ola

          Comment

          Working...
          X