Benutzer mit den meisten Antworten
Silverlight - Select auf Datenbank per WebService

Frage
-
Hallo Zusammen...
Ich bins nochmal :-)
Ich habe meiner WebAnwendung ein ADO.NET Entity Data Model und einen ADO.NET WebService hinzugefügt.
Diesen habe ich dann der Silverlight Anwendung als Service Reference hinzugefügt.
Wie schaffe ich es nun einen Select/Insert Into/Update... Befehl zu realiesieren das mir z.B. Daten aus der DB angezeigt werden?
Habe zwar schon gegoogelt aber leider nichts brauchbares gefunden.
Könnten ihr mir da weiterhelfen? Für ein Bsp. oder Link wäre ich sehr dankbar. :-)
Grüße ThunderBoldMittwoch, 26. August 2009 12:09
Antworten
-
Hallo Oliver,
das macht gar nichts denn wie Du siehst war ich selbst ein paar Tage nicht Online.
Ich danke Dir für deine Mühe und werde es dann über den ADO.NET Data Service machen.
Danke für das Angebot aber das kann ich nicht.
Viele Grüße Giuseppe- Als Antwort markiert ThunderBold Mittwoch, 9. September 2009 09:47
Mittwoch, 9. September 2009 09:47
Alle Antworten
-
Geh mal in die Silverlight-Hilfe -> Inhalt -> Data Access and Data Structures -> ADO.NET Data Services (Silverlight)
Dort ist der gesamte Ablauf beschrieben.
Wenn du anstelle eines WCF-Servuices einen XML Webservice nutzen willst, dann frage nochmals nach.
--
PeterMittwoch, 26. August 2009 13:16 -
Hallo ThunderBold,
ich gehe mal davon aus das Du ADO.NET Data Services (also WCF) meintest. Dazu gab es einen guten Artikel im Dotnet Magazin, denn Du online hier abrufen kannst:
http://www.trivadis.com/fileadmin/user_upload/PDFs/Trivadis_in_der_Presse/dotnetMagazin_SilverlightADO_HUB_090701.pdf
Einen Link zum Quellcode des Beispiels findest Du innerhalb des Artikels.
Schöne Grüße
OliverMittwoch, 26. August 2009 13:24 -
Hallo Peter, Hallo Oliver.
Hat zwar etwas gedauert aber ich habe es nun endlich geschafft. Danke für die Hilfe.
Jedoch habe ich nun noch eine Frage bzgl. des Bsp. von Peter.
' Define the filter condition based on the customer ID. Dim filterExpression = "CustomerID eq '" & Me .customerId.Text & "'" ' Define a query to return the specifed customer and related orders. Dim query As DataServiceQuery(Of Customers) = _
Mit der ersten Anweisung wird die Bedingung (also die Where Klausel gesetzt) und das Query ist nun die Abfrage. Jedoch verstehe ich diese Anweisung nicht wirklch. Könntet ihr mir diese vllt. erklären?
svcContext.Customers() _
.AddQueryOption("$filter" , filterExpression).Expand("Orders" )
Zudem wollte ich fragen ob man mit Silverlight nicht auch Linq Abfragen wie:
"Dim Abfrage = From Kunden In db.Kunden..."
realisieren kann, denn das wäre viel einfacher.
Beste Grüße
Dienstag, 1. September 2009 05:44 -
Da ich bisher keine Projekte projekte mit WCF habe (Anwender setzen nur FW 2 ein), habe ich auch nur wenig Erfahrung damit. Meine Silverlight-Projekt arbeiten alle mit XML WebServices. Da nutze ich in Silverlight LinQ auf die Liste, die vom WebService empfangen wurde.
--
PeterDienstag, 1. September 2009 06:00 -
Hallo ThunderBold,
was genau an der Filterkonstruktion verstehst Du nicht?
AddQueryOption tut folgendes:
1. Erweitert die Abfrage auf "Orders" um eine Where - Bedingung namens $filter
wobei
2. filterExpression den Wert von $filter darstellt.
Wenn Du weitere Informationen suchst, dann schau mal hier:
http://www.cloudcasts.net/Default.aspx?category=ADO.NET%20Data%20Services
Zur zweiten Frage: Ja, du kannst auch LinQ - Abfragen in Silverlight realisieren. Dann brauchst Du aber keinen ADO.NET DataService, sondern kannst Peters Vorschlag mit WebService aufgreifen.. Mir persönlich ist aber der ADO.NET DataService lieber.
Schöne Grüße
OliverDienstag, 1. September 2009 09:51 -
Hallo Oliver,
vielen Dank für die kurze Erklärunng und den Link.
Ich hätte nun noch ne kurze Frage zu der Linq Abfrage. Diese sieht bei mir so aus:
Dim service as New Entities(New Uri("http://...")
Dim Kunde= From K in service.Kunden where K.ID = 1Diese übergebe ich dann ans Grid mit:
DataGrid.ItemSource = Abfrage.
Will ich die Daten nun anzeigen erhalte ich folgenden Fehler:
"Die angegebene Methode wird nicht unterstützt."
Beim googeln habe ich nur dies hier gefunden:
http://support.microsoft.com/kb/225342/de
was aber nicht sein kann (da meine URL nicht so lange ist).
Weiß vielleicht jemand woran das liegen kann?
Grüße TB- Bearbeitet Robert Breitenhofer Mittwoch, 2. September 2009 10:08 Link als Link
Dienstag, 1. September 2009 14:37 -
NAbend Oliver,
nun habe ich noch eine Frage.
Ich verwende die Linq Abfragen da die Befehle ja für verschiedene Datenbanken verwendet werden können.
Ist dies mit dieser Abfrage Art ebenfalls möglich?
Dim query As DataServiceQuery(Of Customers) = svcContext.Customers().AddQueryOption("$filter" , filterExpression).Expand("Orders" )
Was für eine Art (wie z.B. Linq) von Abfrage ist dies eigentlich?
Danke für die Hilfe.
Grüße TBDienstag, 1. September 2009 19:29 -
Hallo ThunderBold,
zu Deiner ersten Mail hätte ich die Bitte, dass Du etwas mehr von Deinem Code zeigst. Ich sehe momentan den Zusammenhang zwischen dem Code und der Fehlermeldung nicht.
Zu der Mail2. Dies ist in Prinzip gar keine Abfrage, sondern eine Konstruktion ähnlich dem DataReader-Objekt. Solchen Code findet man als Bestandteil von ADO.NET Data Services. Inhaltlich zur Abfrage wird es durch svcContext und durch den Expand - Befehl. Eingegrenzt wird die Abfrage durch AddQueryOption. Diese Teile werden aber seperat definiert oder sind Bestandteil eines referenzierten ADO.NET Entity Models. Wenn man aber trotzdem einen Abfragetyp festlegen will: Dies ist ein Select Statement mit Where - Bedingung.
Das war es erstmal von mir
Schöne Grüße
Oliver
P.S. Teil 2 meiner Antwort ist bestimmt nicht sauber definiert. Also bitte nicht überbewerten.Mittwoch, 2. September 2009 08:38 -
Hallo Oliver,
hier ist der Code den ich geschrieben habe:
Private Sub btnKommen_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
Dim service as New Entities(New Uri("http://...")
Dim Kunde = From K in service.Kunden where K.ID = 1
'DataGrid.ItemsSource = "Es geht doch".Split <- So erhalte eich eine Ausgabe
DataGrid.ItemsSource = Abfrage <- und hier erhalte ich den FehlerEnd Sub
Ich erhalte den Fehler auch wenn ich die Abfrage als Liste ausgeben möchte...
Hoffe das du damit etwas anfangen kannst. Danke Dir schon mal sehr!!!
Hab ja ganz Teil 2 vergessen :-).
Danke für die Erklärung das hat mir schon sehr geholfen. Falls du auch nicht herausfinden solltest woran der Fehler liegt werde ich diese konstruktion verwenden um meine Abfragen zu gestalten...
Grüße Giuseppe- Bearbeitet ThunderBold Mittwoch, 2. September 2009 09:00 Hab Teil 2 vergessen ;-)
Mittwoch, 2. September 2009 08:54 -
Hallo Oliver.
Also wenn ich es so umsetzte, erhalte ich in der Abfrage schon den selben Fehler wie zuvor.
...
Dim Kunde = (From K in service.Kunden where K.ID = 1).toList <- "Die angegebene Methode wird nicht unterstützt."
DataGrid.ItemsSource = Kunde
...
Geht es auch anderst und wenn ja könntest du mir dies vllt. an einem kleinen Beispiel zeigen?
Vielen Dank.
Gruß GiuseppeDonnerstag, 3. September 2009 09:49 -
Hallo Giuseppe,
mit toList produzierst Du hier garnichts. Schau Dir nocheinmal das Beispiel für den ADO.NET Data Service in der Silverlight Doku an.
Dim returnedCustomer = query.EndExecute(currentResult).FirstOrDefault() If returnedCustomer IsNot Nothing Then For Each order As Orders In returnedCustomer.Orders
'hier werden die Ergebnisse der Query zur Collection hinzugefügt ordersBindingCollection.Add(order) NextDie Konstruktion mußt Du nur umbauen (statt der Query nimmst Du deine Abfrage).
Schöne Grüße
Oliver
- Bearbeitet Oliver Michalski Donnerstag, 3. September 2009 11:54 Formatierung
Donnerstag, 3. September 2009 11:52 -
So Oliver ich habe es mir nochmals angeschaut und wie folgt umgesetzt (jedoch bin ich mir nicht sicher ob ich das so ganz richtig gemacht habe):
Dim service as New Entities(New Uri("http://...")
Dim Kunde = From K in service.Kunden
If Kunde IsNot Nothing Then
DataGrid.ItemsSource = Kunde
For Each K As Kunden In Abfrage <- Nun erhalte ich hier den Fehler ?!?
KundenBindingCollection.add(F)
Next
End If
Und hier habe ich nun wieder diesen Fehler )-;
Kannst du sagen was ich flasch gemacht habe?
gruß Giuseppe
Donnerstag, 3. September 2009 13:14 -
Hallo Guiseppe,
nicht ganz richtig umgesetzt. An die DataGrid.ItemSource gehört ein Collection-Type (in deinem Fall also die KundenBindingCollection). Außerdem müsste es heissen:
If Kunde IsNot Nothing Then
For Each K As Kunden In Kunde
KundenBindingCollection.add(K)
Next
End If
Schöne Grüße
OliverDonnerstag, 3. September 2009 15:24 -
Hallo Oliver,
mein Block sieht auch so aus wie du es verbessert hast:
If Kunde IsNot Nothing Then
For Each K As Kunden In Kunde
KundenBindingCollection.add(K )
Next
End If
Das "Abfrage" und "F" waren nur Schreibfehler, da ich auch schon andere Abfragen geschrieben habe habe ich das gemischt. Der Fehler tritt in der Zeile
"For Each K as Kunden in Kunde..." leider trotzdem auf.
Kann es für mein Problem vllt. auch noch eine andere Ursache geben?
Grüße GiuseppeFreitag, 4. September 2009 05:30 -
Hallo Giuseppe,
sorry für die verspätete Antwort. Eine fehlerfreie Lösung habe ich nicht hingekriegt. Meiner Ansicht nach, lassen sich die Elemente vom ADO.NET Data Service und LINQ nicht vermischen. Bleib beim ADO.NET Data Service (siehe Vorlage in der Silverlight Doku). Dies ist die eleganteste Lösung.
Du kannst wenn Du willst und wenn Du die Möglichkeit hast, mir Dein Projekt irgendwo im Internet zum Download bereitstellen. Dann schaue ich gerne nocheinmal, ob es sich nicht um einen simplen Fehler handelt denn wir beide einfach übersehen haben.
Schöne Grüße
OliverDienstag, 8. September 2009 08:03 -
Hallo Oliver,
das macht gar nichts denn wie Du siehst war ich selbst ein paar Tage nicht Online.
Ich danke Dir für deine Mühe und werde es dann über den ADO.NET Data Service machen.
Danke für das Angebot aber das kann ich nicht.
Viele Grüße Giuseppe- Als Antwort markiert ThunderBold Mittwoch, 9. September 2009 09:47
Mittwoch, 9. September 2009 09:47