2012-07-06 61 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'嗎? – 2012-07-06 22:20:18

+0

建議不要回傳列表(或包含對象[]的ArrayList] - 對於使用它的人來說,這是一個糟糕的API。沒有類型信息,因此在更改webmethods時無法檢測到重大更改 – 2012-07-06 22:25:38

回答

1

問題不在於你的代碼從DB獲得正因爲如此,它看到WebMethod試圖把它變成一個字符串,但它不知道它是什麼數據類型。目前它的對象(可能意味着百萬種類型之一)。

如果數據類型是一個簡單的單一數據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>和Web服務應該仍然工作。

+0

肯定同意您應該有更好的序列化格式。你有沒有理由使用ASP.Net 3風格的webmethods和XML而不是JSON? – 2012-07-06 22:27:27

+0

不知道這是針對我還是OP。我給出的答案只是爲了適應OP問題,因爲我看到[WebMethod]我使用了XML格式,我意識到你可以將其更改爲JSON,但由於它具有更高的機會覆蓋要求。 – 2012-07-07 06:15:15

+0

用於OP。質疑的假設似乎是合乎邏輯的,因爲1.1數據結構正在被使用,儘管...... – 2012-07-07 07:21:50