Announcement

Collapse
No announcement yet.

Wie kann ich SQL-Abfrage in TableAdapter einbauen?

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

  • Wie kann ich SQL-Abfrage in TableAdapter einbauen?

    Hi, ich arbeite gerade mit Visual Studio 2008 an nem kleinen Programm für die Bearbeitung von Datenbankeinträgen, das Programm soll, wenn man einen vorhandenen Datenbankeintrag bearbeitet alle 5 Sekunden die aktuelle Zeit in die Datenbank eintragen, bis man die Bearbeitungen abspeichert, was es auch bereits erfolgreich macht. Das ganze soll als Sicherheit dienen, dass nicht 2 Benutzer den gleichen Eintrag editieren.
    Das Problem ist nun die Abfrage wenn man auf den editieren Button klickt, ich frage dann halt die Datenbank nach dem Eintrag mit dem Primärschlüssel X (also kann wenn überhaupt nur der Eintrag gefunden werden der gewünscht ist) bei dem das Datum länger her ist als 5 Sekunden, und genau da ist das Problem. Die Abfrage hab ich erstellt, doch ich versteh nicht wie ich die Abfrage ausführen bzw. das Ergebnis überhaupt verwerten soll.
    Die Abfrage funktioniert wie gesagt, wenn ich sie im Visual Studio selbst mit Daten fütter, aber wie genau baue ich diese Abfrage in den Code mit ein? Wenn ich das mehr oder weniger automatisch machen lasse von Visual Studio kommt halt ne Fehlermeldung.

    Abfrage ist:
    [highlight=sql]SELECT ID
    FROM Testtable
    WHERE (ID = @IDBearbeitung) AND (Bearbeitung < GETDATE() - 0.000005)[/highlight]
    Das funktioniert soweit auch, ID ist halt der Primärschlüssel und Bearbeitung das Datum.

    [highlight=c#]this.testtableTableAdapter.GetBearbeitung(TestIDte mp);[/highlight]
    Das ist so ziemlich alles was ich davon habe im Code, abgesehen von der Fehlermeldung kanns natürlich noch nicht funktionieren, denn ich hab keinen Plan was überhaupt falsch sein könnte an der Ausführung (warum die Fehlermeldung kommt) sowie keinen Plan wie ich, sollte sie funktionieren, überhaupt abfrage ob denn ein Ergebnis kam oder nicht.
    Zuletzt editiert von Jürgen Thomas; 02.08.2010, 10:11. Reason: [code] durch [highlight=xxx] ersetzt, das liest sich besser.

  • #2
    Ich werde Dir zwar nicht helfen können, aber vielleicht solltest Du noch schreiben, welche Fehlermeldung denn da kommt...
    Günther

    Comment


    • #3
      Originally posted by Günther Weber View Post
      Ich werde Dir zwar nicht helfen können, aber vielleicht solltest Du noch schreiben, welche Fehlermeldung denn da kommt...
      Hab ich wohl etwas zu schnell gedacht und das direkt übersprungen, die Fehlermeldung ist:
      Code:
      No overload for method 'GetBearbeitung' takes '1' arguments
      Wobei ich das auch nicht so ganz verstehe, er will eine Variable haben, die hat er doch auch, oder versteh ich die Fehlermeldung falsch?

      Comment


      • #4
        Hallo und willkommen,

        du machst mehrere Fehler, wobei nicht alle zu erkennen sind.

        1. Im SQL-Befehl wird mit @IDBearbeitung ein Parameter benutzt, aber bei Bearbeitung nicht. Auch dort gehört etwas mit @ hin; natürlich muss auch das Drumherum stimmen. Irgendwo im Code muss es etwas wie Parameters.Add geben.

        2. Die Fehlermeldung sagt eindeutig, dass die Methode GetBearbeitung anders deklariert wurde. Er will nicht "eine Variable haben", sondern du gibst beim Aufruf dieser Methode ein Argument an, aber der Compiler findet keine Variante (nämlich Überladung), die mit einem Argument arbeitet. Du musst also sehen, welche und wie viele Argumente diese Methode benötigt; am einfachsten geht das in der IDE, indem du nach der Klammer kurz wartest, welche Varianten angeboten werden.

        Das ist übrigens ein Grundproblem des TableAdapters: Er versteckt so viele Maßnahmen, dass man gar nicht erkennt und versteht, was eigentlich abläuft. Da ist ein "Selbstbauen" viel erkenntnisreicher, siehe z.B. openbook visual_csharp/ Kap. 25 ff.

        Gruß Jürgen

        PS. Fragen zu Datenbanken unter .NET gehören fast immer ins Unterforum ADO.NET; ich verschiebe es deshalb.

        PS 2. Ich bezweifle, ob dein Vorgehen das sinnvollste Verfahren zur "Sperre" ist. Mir fällt aber im Moment kein einfacher Weg ein, und vor allem wüsste ich nicht, wo ich Code dafür finden sollte. Wundere dich aber nicht, wenn du entsprechende konkrete Hinweise bekommst.

        Comment


        • #5
          Hast Du das SQL Statement später erst geändert und die Variable hinzugefügt? Nimm mal Dein SQL Kommando was Du oben geschrieben und baue daraus eine neue Funktion. Kann sein dass der Generator Dir dafür keine passende Funktion angelegt hat.

          Comment


          • #6
            Originally posted by Jürgen Thomas View Post
            du machst mehrere Fehler, wobei nicht alle zu erkennen sind.
            Ich hab gerade erst mit C# angefangen, also wirklich Ahnung von dem was ich mache hab ich bisher nicht... ^^

            1. Im SQL-Befehl wird mit @IDBearbeitung ein Parameter benutzt, aber bei Bearbeitung nicht. Auch dort gehört etwas mit @ hin; natürlich muss auch das Drumherum stimmen.
            Die SQL Abfrage selbst funktioniert doch, wenn ich die bei der Abfragenbearbeitung teste funktionierts auch und er gibt mir wenn das eingetragene Datum länger als 5 Sek her ist auch die ID, wenns weniger als 5 Sek her ist gibt er mir nix, das muss man doch irgendwie einfach abfragen können ob die Abfrage jetzt Erfolg hatte oder nicht, um mehr gehts ja nicht, ich brauch nur nen "Ja" hat funktioniert oder ein "Nein" hat nicht funktioniert.

            Originally posted by fanderlf View Post
            Hast Du das SQL Statement später erst geändert und die Variable hinzugefügt? Nimm mal Dein SQL Kommando was Du oben geschrieben und baue daraus eine neue Funktion. Kann sein dass der Generator Dir dafür keine passende Funktion angelegt hat.
            Ich hab auch die ganze Abfrage schonmal neu erstellt gehabt und dann eingebaut, kam das selbe raus. Die Vermutung hatte ich Anfangs also auch schon gehabt.

            Comment

            Working...
            X