[WebMethod]
public DataTable CarPage(string value1, string value2)
{
string Statement;
DataTable dt = new DataTable();
OleDbConnection conn = new OleDbConnection(connString);
try
{
// Connects
conn.Open();
// Switch used to determine Select Statement
switch (value2)
{
case "<500000":
Statement = "SELECT * FROM Car WHERE [Highest Bid] < 500000";
break;
case "500000<1000000":
Statement = "SELECT * FROM Car WHERE ([Highest Bid] >=500000) AND ([Highest Bid] <=1000000)";
break;
case "1000000<1500000":
Statement = "SELECT * FROM Car WHERE ([Highest Bid] >=1000000) AND ([Highest Bid] <=1500000)";
break;
case "1500000<2000000":
Statement = "SELECT * FROM Car WHERE ([Highest Bid] >=1500000) AND ([Highest Bid] <=2000000)";
break;
case ">2000000":
Statement = "SELECT * FROM Car WHERE [Highest Bid] > 2000000";
break;
case "<1000":
Statement = "SELECT * FROM Car WHERE " + value1 + "<1000";
break;
case "1000<10000":
Statement = "SELECT * FROM Car WHERE (" + value1 + ">=1000) AND (" + value1 + " <=10000)";
break;
case "10000<50000":
Statement = "SELECT * FROM Car WHERE (" + value1 + ">=10000) AND (" + value1 + " <=50000)";
break;
case "50000<100000":
Statement = "SELECT * FROM Car WHERE (" + value1 + ">=50000) AND (" + value1 + " <=100000)";
break;
case ">100000":
Statement = "SELECT * FROM Car WHERE " + value1 + ">100000";
break;
case "Other":
Statement = "SELECT * FROM Car WHERE (" + value1 + "<>WHITE) AND (" + value1 + " <>BLACK) AND (" + value1 + " <>GREY) AND (" + value1 + " <>RED) AND (" + value1 + " <>BLUE)";
break;
case "<2000":
Statement = "SELECT * FROM Car WHERE Year <2000";
break;
default:
Statement = "SELECT * FROM Car WHERE " + value1 + " = " + value2;
break;
}
OleDbCommand oleCmd = new OleDbCommand(Statement, conn);
oleCmd.Parameters.AddWithValue(value1, value2);
OleDbDataAdapter oleDa = new OleDbDataAdapter(oleCmd);
oleDa.Fill(dt);
conn.Close();
return (dt);
}
catch (Exception)
{
return (dt);
}
}
AND THIS BUTTON :
localhost.WebService w = new localhost.WebService();
GrVCars.DataSource = w.CarPage(field1,field2);
GrVCars.DataBind();
When i run it it throws me this :
System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.InvalidOperationException: There was an error generating the XML document. ---> System.InvalidOperationException: Cannot serialize the DataTable. DataTable name
is not set.
at System.Data.DataTable.WriteXmlSchema(XmlWriter writer, Boolean writeHierarchy)
at System.Data.DataTable.System.Xml.Serialization.IXmlSerializable.WriteXml(XmlWriter writer)
at System.Xml.Serialization.XmlSerializationWriter.WriteSerializable(IXmlSerializable serializable, String name, String ns, Boolean isNullable, Boolean wrapped)
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write1_CarPageResponse(Object[] p)
at Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer1.Serialize(Object objectToSerialize, XmlSerializationWriter writer)
at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id)
--- End of inner exception stack trace ---
at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id)
at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle)
at System.Web.Services.Protocols.SoapServerProtocol.WriteReturns(Object[] returnValues, Stream outputStream)
at System.Web.Services.Protocols.WebServiceHandler.WriteReturns(Object[] returnValues)
at System.Web.Services.Protocols.WebServiceHandler.Invoke()
--- End of inner exception stack trace ---
Oh dear still hanging with DataTable. I left it 3 years ago. I prefer to return strong type objects. My humble/strong suggestion is kick out DataTable. Create Car class with all fields of table as properties. Now instead of using data adapter use data reader
and build car objects and add it to its collection. Return collection of car objects or List<Car>.
Rahad
Member
98 Points
69 Posts
WEBSERVICE DATATABLE ERROR
Mar 03, 2011 06:34 AM|LINK
hi guys please help me !
i have this web method :
[WebMethod] public DataTable CarPage(string value1, string value2) { string Statement; DataTable dt = new DataTable(); OleDbConnection conn = new OleDbConnection(connString); try { // Connects conn.Open(); // Switch used to determine Select Statement switch (value2) { case "<500000": Statement = "SELECT * FROM Car WHERE [Highest Bid] < 500000"; break; case "500000<1000000": Statement = "SELECT * FROM Car WHERE ([Highest Bid] >=500000) AND ([Highest Bid] <=1000000)"; break; case "1000000<1500000": Statement = "SELECT * FROM Car WHERE ([Highest Bid] >=1000000) AND ([Highest Bid] <=1500000)"; break; case "1500000<2000000": Statement = "SELECT * FROM Car WHERE ([Highest Bid] >=1500000) AND ([Highest Bid] <=2000000)"; break; case ">2000000": Statement = "SELECT * FROM Car WHERE [Highest Bid] > 2000000"; break; case "<1000": Statement = "SELECT * FROM Car WHERE " + value1 + "<1000"; break; case "1000<10000": Statement = "SELECT * FROM Car WHERE (" + value1 + ">=1000) AND (" + value1 + " <=10000)"; break; case "10000<50000": Statement = "SELECT * FROM Car WHERE (" + value1 + ">=10000) AND (" + value1 + " <=50000)"; break; case "50000<100000": Statement = "SELECT * FROM Car WHERE (" + value1 + ">=50000) AND (" + value1 + " <=100000)"; break; case ">100000": Statement = "SELECT * FROM Car WHERE " + value1 + ">100000"; break; case "Other": Statement = "SELECT * FROM Car WHERE (" + value1 + "<>WHITE) AND (" + value1 + " <>BLACK) AND (" + value1 + " <>GREY) AND (" + value1 + " <>RED) AND (" + value1 + " <>BLUE)"; break; case "<2000": Statement = "SELECT * FROM Car WHERE Year <2000"; break; default: Statement = "SELECT * FROM Car WHERE " + value1 + " = " + value2; break; } OleDbCommand oleCmd = new OleDbCommand(Statement, conn); oleCmd.Parameters.AddWithValue(value1, value2); OleDbDataAdapter oleDa = new OleDbDataAdapter(oleCmd); oleDa.Fill(dt); conn.Close(); return (dt); } catch (Exception) { return (dt); } }AND THIS BUTTON :
localhost.WebService w = new localhost.WebService(); GrVCars.DataSource = w.CarPage(field1,field2); GrVCars.DataBind();When i run it it throws me this :
System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.InvalidOperationException: There was an error generating the XML document. ---> System.InvalidOperationException: Cannot serialize the DataTable. DataTable name is not set.
at System.Data.DataTable.WriteXmlSchema(XmlWriter writer, Boolean writeHierarchy)
at System.Data.DataTable.System.Xml.Serialization.IXmlSerializable.WriteXml(XmlWriter writer)
at System.Xml.Serialization.XmlSerializationWriter.WriteSerializable(IXmlSerializable serializable, String name, String ns, Boolean isNullable, Boolean wrapped)
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write1_CarPageResponse(Object[] p)
at Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer1.Serialize(Object objectToSerialize, XmlSerializationWriter writer)
at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id)
--- End of inner exception stack trace ---
at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id)
at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle)
at System.Web.Services.Protocols.SoapServerProtocol.WriteReturns(Object[] returnValues, Stream outputStream)
at System.Web.Services.Protocols.WebServiceHandler.WriteReturns(Object[] returnValues)
at System.Web.Services.Protocols.WebServiceHandler.Invoke()
--- End of inner exception stack trace ---
Does anyone know how i can fix this?
fayaz_3e
Star
9386 Points
1751 Posts
Re: WEBSERVICE DATATABLE ERROR
Mar 03, 2011 10:46 AM|LINK
Oh dear still hanging with DataTable. I left it 3 years ago. I prefer to return strong type objects. My humble/strong suggestion is kick out DataTable. Create Car class with all fields of table as properties. Now instead of using data adapter use data reader and build car objects and add it to its collection. Return collection of car objects or List<Car>.
Rahad
Member
98 Points
69 Posts
Re: WEBSERVICE DATATABLE ERROR
Mar 06, 2011 05:08 PM|LINK
Thats what I did in the first place but it is for a project and they requested a Webservice with dataTable. But I got the problem solved!
Thanks!