2012-07-06 3 views
1

Я попытался решить это, но я получаю сумасшедшую ошибку, когда я это делаю?Не удается прочитать данные из базы данных в arraylist?

Вот мой первый метод -> Что держит SQLQuery

[WebMethod] 
public ArrayList getAllaEgenskaperforenmall(string mall_id) 
{ 
    ArrayList dbFetch; 
    // string parameter1 = "mall_namn"; 
    string sqlReadQuery = "SELECT DISTINCT d.egenskaper_namn FROM(SELECT egen.egenskaper_id, egen.egenskaper_namn, kopp.mall_id, kopp.egenskap_id, emall.mall_id as egenskapensmallid, emall.mall_namn FROM t_egenskaper as egen, t_kopplingmallegenskaper as kopp, t_egenskapsmall as emall WHERE kopp.mall_id = 1 AND kopp.egenskap_id = egen.egenskaper_id) as d"; 

    dbFetch = executeReadSqlQueryArray(sqlReadQuery); 

    return dbFetch; 

} 

Тогда я попытался создать общую WebMethod, которые могли бы получить данные для меня.

public ArrayList executeReadSqlQueryArray(string sqlToFetchData, string parameter1 = "", string parameter2 = "", string parameter3 = "") 
{ 
    SqlConnection conn = new SqlConnection(mConnectionstring); 
    SqlCommand command = new SqlCommand(); 
    SqlDataReader sqlReader; 
    ArrayList dataReadFromDatabase = new ArrayList(); 

    command.Connection = conn; 
    command.Connection.Open(); 
    command.CommandText = sqlToFetchData; 


    sqlReader = command.ExecuteReader(); 

    while(sqlReader.Read()) 
    { 

     object[] values = new object[sqlReader.FieldCount]; 
     sqlReader.GetValues(values); 
     dataReadFromDatabase.Add(values); 
    } 
    command.Connection.Close(); 
    return dataReadFromDatabase; 

} 

Ошибка, которую я понял? Забавно, что вчера я думаю, мне удалось заставить его делать то, что я хотел!

System.InvalidOperationException: There was an error generating the XML document. ---> System.InvalidOperationException: The type System.Object[] may not be used in this context. 
    at System.Xml.Serialization.XmlSerializationWriter.WriteTypedPrimitive(String name, String ns, Object o, Boolean xsiType) 
    at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write1_Object(String n, String ns, Object o, Boolean isNullable, Boolean needType) 
    at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write8_ArrayOfAnyType(Object o) 
    at Microsoft.Xml.Serialization.GeneratedAssembly.ArrayListSerializer2.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(TextWriter textWriter, Object o, XmlSerializerNamespaces namespaces) 
    at System.Web.Services.Protocols.XmlReturnWriter.Write(HttpResponse response, Stream outputStream, Object returnValue) 
    at System.Web.Services.Protocols.HttpServerProtocol.WriteReturns(Object[] returnValues, Stream outputStream) 
    at System.Web.Services.Protocols.WebServiceHandler.WriteReturns(Object[] returnValues) 
    at System.Web.Services.Protocols.WebServiceHandler.Invoke() 
+0

Вам нужно использовать 'ArrayList'? –

+0

Рекомендовать перед передачей списка (или ArrayList, содержащий Object []) - это ужасный API для тех, кто его использует для работы. Нет информации о типе, так что вы не можете обнаружить нарушение при изменении веб-методов. –

ответ

1

Проблема не с кодом от получения из БД как таковой, его что WebMethod пытается превратить его в строку, но она не знает, что тип данных это. В настоящее время его отличает как Object (что может означать один из миллионов типов).

Если тип данные простого typeTry сингулярных подкачки данных от ArrayList и делает его общий массив, например

List<String> 

Проблема заключается в вашем список массива содержит список объектов, в настоящее время и процессор сериализации не знает, что с ними делать. Вы могли бы жестко отбросить их с объектов на формат serializable, хотя бы помочь или переключиться на класс (и сделать этот инструмент serializable).

Например

[Serializable] 
public class ProfileBasics 
{ 
    /// <summary> 
    /// Gets or sets the about me section 
    /// </summary> 
    [XmlElement("AboutMe")] 
    public string AboutMe {get; set;} 

    /// <summary> 
    /// Gets or sets the city name for the zip code 
    /// </summary> 
    [XmlElement("City")] 
    public string City {get; set;} 
} 

Тогда вы могли бы сделать List<ProfileBasics> и веб-службы должны по-прежнему работать.

+0

Определенно соглашайтесь с тем, что у вас должен быть лучший формат сериализации. Есть ли причина, по которой вы используете веб-методы ASP.NET 3 и XML, а не JSON? –

+0

Не уверен, что это направлено на меня или на ОП. Ответ, который я дал, - это просто вписываться в вопрос OP, так как я видел [WebMethod], что использовал формат XML, я понимаю, что вы можете изменить это на JSON, но решили пойти со значениями по умолчанию, поскольку у него будет более высокий шанс покрывая требования. –

+0

Предназначен для ОП. Предположение о предположениях казалось логичным, поскольку использовались 1.1 структуры данных, хотя ... –

Смежные вопросы