2012-07-06 3 views
1

이 문제를 해결하려했지만 이렇게 할 때 미친 오류가 발생합니까? 그럼 난 나를 위해 데이터를 가져올 수있는 일반의 WebMethod를 설정하는 시도 SQLQuery 인데이터베이스에서 arraylist로 데이터를 읽을 수 없습니까?

[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; 

} 

를 보유> -

여기 내 첫 번째 방법입니다.

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

리스트 (또는 Object []가 포함 된 ArrayList)을 반환하지 않는 것이 좋습니다. 작업에 소모하는 사람에게는 끔찍한 API입니다. 형식 정보가 없으므로 웹 메서드를 변경할 때 심각한 변경 사항을 감지 할 방법이 없습니다 –

답변

1

문제는 등의 DB에서 점점로부터 코드 아니라, 그것의 WebMethod 문자열로 돌려하려고하지만 그것이 무엇인지 데이터 형식을 알고하지 않습니다. 현재 Object로 캐스팅되었습니다 (백만 가지 유형 중 하나를 의미 할 수 있음). 데이터 유형은 예를

List<String> 

를 들어, ArrayList를 멀리 교환과 일반적인 배열을 만드는 간단한 단일 데이터 typeTry의 경우

이 문제는 배열 목록 현재 개체의 목록 및 직렬화 프로세서를 포함하고있다 그 (것)들로하기 위하여 무엇을 cognize. 당신은 도와 주거나 수업으로 전환하기 위해 (예 : serializable) serializable 형식으로 개체에서 하드 캐스트 할 수 있습니다. 그런 다음 List<ProfileBasics>을 할 수있는 예를

[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;} 
} 

여전히 작동합니다 웹 서비스에 대한

.

+0

더 나은 직렬화 형식이 있어야한다는 것에 동의하십시오. JSON이 아닌 ASP.Net 3 스타일 webmethods 및 XML을 사용하는 이유가 있습니까? –

+0

그것이 나 또는 OP에 대한 것인지 확실하지 않습니다. 내가 제시 한 대답은 XML 형식을 사용하는 [WebMethod]를 보았 기 때문에 OP 질문에 맞춰진 것입니다. JSON으로 변경할 수 있지만 실현 가능성이 높기 때문에 기본값을 사용한다고 생각했습니다. 취재 요건. –

+0

OP 용입니다. 그러나 1.1 데이터 구조가 사용 되었기 때문에 질문에 대한 가정은 논리적 인 것 같았습니다 ... –

관련 문제