Benutzer mit den meisten Antworten
Kann ein Bericht auf ein Datenobjekt eines Webservice zugreifen?

Frage
-
Ich habe eine Website und einen Webservice. Der Webservice holt Daten aus einer Datenbank, die auf der Website ausgegeben werden.
Jetzt möchte ich noch einen Bericht auf der Website anlegen, der auf die Daten des Webservice zugreift, da diese dynamisch geladen werden sollen (nur die Daten ausgeben, die eine bestimmte Bedingung erfüllen).
Ich benutze den normalen ReportViewer.
Nur ich kann nicht auf die Daten, die der Webservice aus der Tabelle holt, zugreifen. Wie kann ich das lösen?
Vielleicht kennt jemand eine Möglichkeit mein Problem zu lösen, vllt sogar mit nem Codebeispiel.
Vielen Dank im vorraus ..
Antworten
-
Hallo SkiZ,
die einfachste Lösung ist, Du machst aus Deiner ArrayList einfach ein XmlDocument, dann hast Du auch eine gültige Datenquelle für den ReportViewer. Der Zugriff auf die Datenwerte erfolgt über XPath Ausdrücke.
Ich weiss zwar nicht welche Datenbank Du benutzt, aber die meisten Datenbanken unterstützen die Ausgabe von Queries in XML-Format serienmäßig (z.B. der Microsoft SQL Server mit dem Autoxml Feature).
Eine weitere Möglichkeit ist die Rückgabe eines DataSets anstatt einer ArrayList. Dann hast Du zwar die volle Datenquelle, schießt aber angesichts Deines minimalen Datenmodells etwas über Ziel hinaus.
Schöne Grüße
Oliver- Als Antwort vorgeschlagen Robert BreitenhoferModerator Mittwoch, 28. Oktober 2009 12:04
- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 28. Oktober 2009 22:13
-
Hi,
Das mit dem Dataset habe ich auch schon probiert. Nur das Problem ist das der Bericht in der Website keine Datenquelle aus dem Webservice akzeptiert bzw. findet. Daran scheitert es...
und warum lädst Du das DataSet (bzw. was anderes) nicht per Code vom Webservice, hast damit also ein lokales Objekt und verwendest dieses als Datenquelle?
Dim MyDataSource As DataSet|DataView|... = <WebService>.GetWasAuchImmer( ... )
<Report>.... = MyDataSource
http://msdn.microsoft.com/en-us/library/ms251824.aspx
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Bearbeitet Robert BreitenhoferModerator Mittwoch, 28. Oktober 2009 12:04 Hyperlink als Hyperlink
- Als Antwort vorgeschlagen Robert BreitenhoferModerator Mittwoch, 28. Oktober 2009 12:04
- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 28. Oktober 2009 22:13
Alle Antworten
-
also:
eine Nutzerklasse:
namespace WebService1 { public class clNutzer { public string name; public string vorname; public string email; public string telefon; } }
In deren Objekte werden die Datensätze gespeichert.
eine DB-Klasse:
public class clDB { public SqlConnection Verbindung = null; public SqlDataReader dataReader = null; public SqlCommand Befehl = null; public string VerbString = ConfigurationManager.ConnectionStrings["ConString"].ConnectionString; public ArrayList readDB( string sQuery ) { Verbindung = new SqlConnection(VerbString); Verbindung.Open(); clNutzer Nutzer; ArrayList alNutzer = new ArrayList(); //speichert Datensätze Befehl = Verbindung.CreateCommand(); Befehl.CommandText = sQuery; dataReader = Befehl.ExecuteReader(); while (dataReader.Read()) { Nutzer = new clNutzer(); Nutzer.name = dataReader.GetString(1); Nutzer.vorname = dataReader.GetString(2); Nutzer.email = dataReader.GetString(3); Nutzer.telefon = dataReader.GetString(4); alNutzer.Add(Nutzer); } closeDB(); return alNutzer; } }
Sie ließt die Datensätze aus der Datenbank und gibt sie alles Arraylist zurück.
Und der Webservice an sich:
public class Service1 : System.Web.Services.WebService { private string sSelectQuery = "SELECT * FROM shd_nutzer "; private string sOrderQuery = "ORDER BY name"; private string sWhereQuery = "WHERE "; public Service1() { //String connStr = ConfigurationManager //clDB datenbank = new clDB(connStr); } [WebMethod] // holt sämtliche Datensätze aus der DB [XmlInclude(typeof(clNutzer))] public ArrayList getData(string Filter, string FilterKat, bool Check) { clDB Datenbank = new clDB(); ArrayList alNutzer = new ArrayList(); //speichert Datensätze String sQuery = ""; FilterKat = FilterKat.ToLower(); // überprüft, ob Filter angewerdet werden soll if (Filter.Equals(String.Empty)) { sQuery = sSelectQuery; if (Check) sQuery += sOrderQuery; } else { if (Check == true) sQuery = sSelectQuery + sWhereQuery + FilterKat + " LIKE " + "'%" + Filter + "%'" + sOrderQuery; else sQuery = sSelectQuery + sWhereQuery + FilterKat + " LIKE " + "'%" + Filter + "%'"; } alNutzer = Datenbank.readDB(sQuery); return alNutzer; } }
Der Webservice baut den Query für die Abfrage zusammen.
Mien Problem ist halt das ich die Daten nicht als Datesource für einen Bericht nehmen kann. -
Hallo SkiZ,
die einfachste Lösung ist, Du machst aus Deiner ArrayList einfach ein XmlDocument, dann hast Du auch eine gültige Datenquelle für den ReportViewer. Der Zugriff auf die Datenwerte erfolgt über XPath Ausdrücke.
Ich weiss zwar nicht welche Datenbank Du benutzt, aber die meisten Datenbanken unterstützen die Ausgabe von Queries in XML-Format serienmäßig (z.B. der Microsoft SQL Server mit dem Autoxml Feature).
Eine weitere Möglichkeit ist die Rückgabe eines DataSets anstatt einer ArrayList. Dann hast Du zwar die volle Datenquelle, schießt aber angesichts Deines minimalen Datenmodells etwas über Ziel hinaus.
Schöne Grüße
Oliver- Als Antwort vorgeschlagen Robert BreitenhoferModerator Mittwoch, 28. Oktober 2009 12:04
- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 28. Oktober 2009 22:13
-
Hi,
Das mit dem Dataset habe ich auch schon probiert. Nur das Problem ist das der Bericht in der Website keine Datenquelle aus dem Webservice akzeptiert bzw. findet. Daran scheitert es...
und warum lädst Du das DataSet (bzw. was anderes) nicht per Code vom Webservice, hast damit also ein lokales Objekt und verwendest dieses als Datenquelle?
Dim MyDataSource As DataSet|DataView|... = <WebService>.GetWasAuchImmer( ... )
<Report>.... = MyDataSource
http://msdn.microsoft.com/en-us/library/ms251824.aspx
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Bearbeitet Robert BreitenhoferModerator Mittwoch, 28. Oktober 2009 12:04 Hyperlink als Hyperlink
- Als Antwort vorgeschlagen Robert BreitenhoferModerator Mittwoch, 28. Oktober 2009 12:04
- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 28. Oktober 2009 22:13