WebService e SQL [C#]

venerdì 07 marzo 2008 - 12.08

piero87 Profilo | Junior Member

Salve a tutti!
Vi espongo il mio problema: ho provato a fare un webservice con il seguente codice, ma non mi restituisce il dataAdapter...credo allora che non sia permesso fare questa operazione (cioè restituire un dataAdapter con un webservice): questo visto il messaggio di errore che mi da [allegato].
In pratica vorrei avere la possibilità di riempire un DataGrid passando appunto da un WebService.
In pratica vorrei riuscire a riempire un datagrid passando da un webservice...come posso fare? posso partire dal codice postato o devo farne uno diverso? che possibilità ho?
Utilizzo IIS con Win Professional SP 2 , Visual studio 2003 con c#, MySQLServer 2005.

Grazie

<%@ WebService language="C#" class="ricerca" %> using System; using System.Web.Services; using System.Xml.Serialization; using MySql.Data; using MySql.Data.MySqlClient; using System.Data; [WebService(Namespace="http://localhost")] public class ricerca : WebService { [WebMethod] public MySqlDataAdapter Search(string a, string b) { string connStr="Database=prova; Data Source=localhost;User Id=root; Password="; MySqlConnection myConn = new MySqlConnection(connStr); string query = "SELECT * FROM contatti WHERE" +a+ "="+b+";"; MySqlCommand cmd = new MySqlCommand(query, myConn); MySqlDataAdapter myAdapter = new MySqlDataAdapter(); myAdapter.SelectCommand = cmd; DataTable tab = new DataTable(); myConn.Open(); myAdapter.Fill(tab); myConn.Close(); return myAdapter; } }

Piero

Wamba Profilo | Expert

Non puoi postare un dataadapter. Perchè non restituisci il datatable dopo averlo popolato?
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com

bluland Profilo | Guru

Mi aggiungo a Wamba

ma riempi un datatable tab, restituirsci questo.


Ciao
--------------------
Vincenzo PESANTE
System Engineer

piero87 Profilo | Junior Member

ah, credo di aver capito quello che intendete dire! in pratica devo cambiare il return e restituire l'oggetto datatable, ma poi? devo usare un dataadapter nel modulo chiamante? io ci provo....se non riesco me lo potete postare il codice?

Piero

bluland Profilo | Guru

nel modulo chiamante instazi anche li un datatable che sarà il tuo datasource che potrai poi far sfruttare da un controllo o fare altro!


CIao
--------------------
Vincenzo PESANTE
System Engineer

piero87 Profilo | Junior Member

ah...credo di aver capito.. ho intanto modificato così il codice del webservice! Però...mi da ancoralo stesso errore di prima...dove sbaglio??

<%@ WebService language="C#" class="ricerca"%> using System; using System.Web.Services; using System.Xml.Serialization; using MySql.Data; using MySql.Data.MySqlClient; using System.Data; [WebService(Namespace="http://localhost")] public class ricerca : WebService { [WebMethod] public DataTable Search(string a, string b) { string connStr="Database=prova; Data Source=localhost;User Id=root; Password="; MySqlConnection myConn = new MySqlConnection(connStr); string query = "SELECT * FROM contatti WHERE" +a+ "="+b+";"; MySqlCommand cmd = new MySqlCommand(query, myConn); MySqlDataAdapter myAdapter = new MySqlDataAdapter(); myAdapter.SelectCommand = cmd; DataTable tab = new DataTable(); myConn.Open(); myAdapter.Fill(tab); myConn.Close(); return tab; } }

bluland Profilo | Guru

E quale sarebbe questo errore?


Ciao
--------------------
Vincenzo PESANTE
System Engineer

piero87 Profilo | Junior Member

beh, mi da lo stesso errore che mi dava prima....si apre una schermata che dice che non riesce a serializzare... allego l'errore che mi dava prima della modifica da voi suggerita, ma ripeto che mi continua a dare lo stesso errore... credo che il problema sia nella return.
Epppure il datatable è un oggetto serializzabile ed è per questo che non so proprio che fare ... aituo!!


Grazie!
Piero

Wamba Profilo | Expert

Dal messaggio che hai messo in allegato non sembra che tu stia restituendo un datatable. Puoi postare il codice del webservice?
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com

piero87 Profilo | Junior Member

si certo... ecco il codice del WebService in questione! In pratica deve effettuare una semplice ricerca in un database!

<%@ WebService language="C#" class="ricerca"%> using System; using System.Web.Services; using System.Xml.Serialization; using MySql.Data; using MySql.Data.MySqlClient; using System.Data; [WebService(Namespace="http://localhost")] public class ricerca : WebService { [WebMethod] public DataTable Search(string a, string b) { string connStr="Database=prova; Data Source=localhost;User Id=root; Password="; MySqlConnection myConn = new MySqlConnection(connStr); string query = "SELECT * FROM contatti WHERE" +a+ "="+b+";"; MySqlCommand cmd = new MySqlCommand(query, myConn); MySqlDataAdapter myAdapter = new MySqlDataAdapter(); myAdapter.SelectCommand = cmd; DataTable tab = new DataTable(); myConn.Open(); myAdapter.Fill(tab); myConn.Close(); return tab; } }
Piero

Wamba Profilo | Expert

Premetto che non conosco mySQL.
Mi permetto di darti qualche consiglio, anche se il codice all'apparenza dovrebbe funzionare.
1) Non hai messo un try-cath! E' fondamentale quando si lavora con i db.
2) Non hai usato i parametri, ma hai costruito la query a concatenzaione di stringa: ti esponi a sql-injection.
3) Con MySQL le stringhe non hanno bisogno delle virgolette apici o qualcos'altro (parametro "b")?
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com

piero87 Profilo | Junior Member

1) Non hai messo un try-cath! E' fondamentale quando si lavora con i db.
2) Non hai usato i parametri, ma hai costruito la query a concatenzaione di stringa: ti esponi a sql-injection.
Ti chiedo scusa, ma sono relativamente nuovo din questo mondo, e non so di cosa tu stia parlando.


3) Con MySQL le stringhe non hanno bisogno delle virgolette apici o qualcos'altro (parametro "b")?
I parametri a e b sono dati dall'utente in input tramite du etextbox. Una rappresente "il nome della colonna" nella quale cercare se esiste il valore desiderato (a e b, appunto).

Secondo te i punti 1 e 2 possono essere la causa di questi problemi?
Piero

Wamba Profilo | Expert

La mia paura è che venga generata un'eccezione che non gestita e combini un po' di casino. Provato con i breakpoint?
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com

piero87 Profilo | Junior Member

onestamente no... anche perchè non saprei come fare facendola girare s internet explorer; posso chiederti se puoi provare a farla girare sul tuo pc?

Ma ci sono errori di codice o no??
Piero

Wamba Profilo | Expert

Beh io ora non ho molto tempo per provarla, mi spiace .
Ma prima di dare "play" su visualstudio non puoi mettere un comune breakpoint nella funzione?
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com

piero87 Profilo | Junior Member

ma ripeto che non saprei come fare semplicemente perchè non riesco a metterla su visual studio finchè mi da messaggi di errore di compilazione... quando la provo la metto nella cartella del mio IIS e semplice in IE scrivo "http://localhost/search.asmx"... e mi esce l'errore! lo stesso errrore che da se provo ad aggiunge il mio webservice come riferimento web al mio progetto in visual studio...

altre idee??
Piero

Wamba Profilo | Expert

Non avevo capito che l'errore è in compilazione. Allora è molto strano!
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com

piero87 Profilo | Junior Member

si, in effetti non l'avevo ancora detto...pardon!!

Te mi confermi che nella teoria un oggetto datatable è restituibile da un webservice,no?
come posso fare?? quando riesci lo puoi provare anche per te, per favore?

sono a corto di idee!! help!!

ma poi ci sono errori di codice o no?

dov'è il problema?? nel codice o non si può fare? o altro ancora?
Piero

Wamba Profilo | Expert

L'eccezione che hai postato è un eccezione di runtime non di compilazione (però si riferisce al dataadapter).
Forse mi sbaglio ma i metodi webservice non dovrebbero essere statici?
Esattamente che errore di compilazione ti da?
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com

piero87 Profilo | Junior Member

ma se riuscisse a compilarlo correttamente non mi darebbe errore nella finestra di IE... comunque quando oggi torno a casa posto di nuovo l'errore (perchè come detto prima ti ho postato l'errore predecedente alla modifica con il "return datatable", perchè è un messaggio molto simile se nn uguale e soprattutto perchè non avevo la possibilità di postare l'errore aggiornato quando ho scritto quel post).

ho fatto qualche errore sulla dinamicità del webservice?? (se è possbilie commettere errori del genere...)


Piero

Wamba Profilo | Expert

Se il sito parte, ha compilato. L'errore è di runtime. Fra una prova e l'altra ricordati di chiudere manualmente il webservice e di stoppare l'esecuzione (spesso rimane cachato il precedente).
Facci sapere com'è andata.
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com

piero87 Profilo | Junior Member

ma non parte il sito...(se con sito intendi visualizzare il webservice su internet explorer)
oggi quando riesco posto di nuovo l'errore, se riesci puoi provare a farlo girare sul tuo pc, solo per vedere se da lo stesso messaggio di errore?
Piero

piero87 Profilo | Junior Member

beh...direi che questo risolve l'arcano.....

http://support.microsoft.com/kb/306134

ora devo 'convertirlo' in dataset..speriamo di non avere problemi!!
Piero

Wamba Profilo | Expert

Teoricamente non dovresti avere problemi... ma mi riservo il diritto di non capire.
Se un Datatable non è serializzabile come fà un dataset che contiene N Datatable ad esserlo?!
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com

piero87 Profilo | Junior Member

eheh...questo è un dogma di fede!!!

comunque mi fido, vista la fonte dell'informazione!
Piero
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5