Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
SQLServer05-Befehl zu MySQL -kompatibel??
haudi
myCSharp.de - Member



Dabei seit:
Beiträge: 30

Themenstarter:

SQLServer05-Befehl zu MySQL -kompatibel??

beantworten | zitieren | melden

Hallo, ich habe eine C#-Klasse, um Daten von einer SQL Server 2005 Datenbank abzufragen.
Alle News, die ab einem bestimmten Datum eingepflegt wurden und in bestimmten Kategorien sind, sollen abgerufen werden.
Der SQL Befehl sieht nun folgendermaßen aus:

private const string GetNewsByCategoryNumbersStatement = @"
-- Prepare Categories XML
DECLARE @idoc int

-- load XML document into memory
EXEC sp_xml_preparedocument @idoc OUTPUT, @categoriesXml

SELECT ID, Subject, Text, StartDate, EndDate
FROM News
WHERE StartDate BETWEEN @startDate AND GETDATE()
AND EndDate ≥ GETDATE()
AND EXISTS (
SELECT NULL
FROM News_Categories nc
INNER JOIN Categories c ON c.ID = nc.Category
WHERE c.Number IN (
SELECT Number
FROM OPENXML(@idoc, '/categories/category', 1)
WITH (Number INT)
)
)

-- Remove Categories XML
EXEC sp_xml_removedocument @idoc";

Nun möchte ich statt der SQL-Server eine MySQL 5.0 Datenbank anbinden, weiss aber nicht,
wie ich den Befehl am elegantesten umsetzen kann, so dass MySQL damit klarkommt.
Kommt man auch ohne OpenXML an die Ergebnisdaten?
Kennt MySQL dieses "Exists (...)"???

Danke schonmal

H.
private Nachricht | Beiträge des Benutzers
FZelle
myCSharp.de - Experte



Dabei seit:
Beiträge: 10080

beantworten | zitieren | melden

Da hast Du jetzt ein ziemlich grosses Problem.

MySql kann überhaupt nichts mit XML-Dateien anfangen.
private Nachricht | Beiträge des Benutzers
haudi
myCSharp.de - Member



Dabei seit:
Beiträge: 30

Themenstarter:

beantworten | zitieren | melden

Hatt ich mir schon gedacht, aber es muss doch möglich sein, trotzdem eine Abfrage hinzubasteln, die einem die News ausgibt, die ab einem bestimmten Datum eingepflegt und halt in bestimmten Kategorien sind ?

Es sind die Tabellen "News", "Categories" und "News-Categories" involviert:
News mit ID, Subject, Text, StartDate, EndDate
Categories mit ID, Name, Number
News-Categories mit ID, Category, NewsItem

Mir kommt das Benutzen von OpenXML an dieser Stelle auch etwas übertrieben vor, oder?

Danke

H.
private Nachricht | Beiträge des Benutzers
Lord Hessia
myCSharp.de - Member



Dabei seit:
Beiträge: 497
Herkunft: Gießener Umland

beantworten | zitieren | melden

Wenn Deine Frage also lautet, wie man einen Datenbankzugriff schreibt, der austauschbar ist, dann kann ich Dir diesen Artikel empfehlen: http://www.microsoft.com/germany/msdn/library/net/adonet/SchreibenEinerPortierbarenDatenzugriffsschicht.mspx?mfr=true
Sarkusmus ist, wenn nichts mehr hilft, außer Lachen.
private Nachricht | Beiträge des Benutzers
haudi
myCSharp.de - Member



Dabei seit:
Beiträge: 30

Themenstarter:

beantworten | zitieren | melden

Hi, danke schonmal für den Link!
Aber es ging in erster Linie nicht für ein allgemeines Schema, sondern mehr um das Detailproblem dieser obigen Datenbankabfrage...

Gruß
H.
private Nachricht | Beiträge des Benutzers
FZelle
myCSharp.de - Experte



Dabei seit:
Beiträge: 10080

beantworten | zitieren | melden

Tja, wie gesagt, MySql kann das nicht, also musst Du das selber in deinem
C# Code machen.

Und sein Select mit ein Paar WHERE clauseln und Parametern in der
ParameterCollection solltest Du seklber hinbekommen.

Wenn Du dann die vorarbeit gemacht hast, und detailprobleme hast, helfen wir aber gerne.
private Nachricht | Beiträge des Benutzers
haudi
myCSharp.de - Member



Dabei seit:
Beiträge: 30

Themenstarter:

beantworten | zitieren | melden

Hi, ich hab jetzt diese Abfrage hier:
OdbcDataAdapter odbcadapter = new OdbcDataAdapter("select * from news where startdate between ? and now() and enddate ≥ now()", connection);

odbcadapter.SelectCommand.Parameters.Add("@p1", OdbcType.DateTime).Value = startDate;


startdate sieht so aus:
startDate {01.01.0001 00:00:00} System.DateTime

In der Datenbank steht ein Eintrag mit dem StartDatum:
01.01.2006 00:00:00

und dem Enddatum:
11.11.2006 00:00:00

"getdate()" hat nicht funktioniert, aber so klappt es auch nicht, weiss jemand, woran es liegen könnte ? Es wird keine Fehlermeldung ausgespuckt, aber es wird auch kein Ergebnis zurückgegeben!

Danke
H.
private Nachricht | Beiträge des Benutzers
Lord Hessia
myCSharp.de - Member



Dabei seit:
Beiträge: 497
Herkunft: Gießener Umland

beantworten | zitieren | melden

Hast Du das Problem mittlerweile gelöst?
Ich sehe die Stelle in Deinem Statement nicht, wo der Parameter eingefügt wird und die Geschichte mit dem Value kapiere ich auch nicht.

Du meinst wohl eher so etwas:

OdbcDataAdapter odbcadapter = new OdbcDataAdapter("select * from news where startdate between @p1 and now() and enddate ≥ now()", connection);
odbcadapter.SelectCommand.Parameters.Add("@p1", startDate);
Sarkusmus ist, wenn nichts mehr hilft, außer Lachen.
private Nachricht | Beiträge des Benutzers
Traumzauberbaum
myCSharp.de - Member



Dabei seit:
Beiträge: 513

beantworten | zitieren | melden

Nö, der Odbc Provider unterstützt nur Parameter über Position, nicht über Namen. Das ? ist Platzhalter für den Parameter, und das erste ? verbindet sich mit dem ersten Parameter.

Ich seh an der Abfrage nichts falsches. Ich würde die einfach mal direkt testen, mit nem beliebigen Datenbanktool, und schauen ob das Ergebnis überhapt falsch ist.

Bei dem Beispieldatensatz ist z.B. endDate der 11.11. und dein Test war wohl am 30. 11. ... eigentlich logisch dass dort nichts zurückgegeben wird.
e.f.q.

Aus Falschem folgt Beliebiges
private Nachricht | Beiträge des Benutzers