2013-03-13 40 views
0

我試圖創建一個Web服務,它將連接到SQL數據庫並返回存儲在那裏的所有鏈接。Web服務沒有返回所有數據

到目前爲止我已經寫了這段代碼,它只返回插入到數據庫中的最後一個鏈接。

我創造了這個方法,將獲取鏈接:

public static string GetLinks() 
{ 
    string query = string.Format("SELECT Link FROM Linkovi"); 

    try 
    { 
     conn.Open(); 
     command.CommandText = query; 

     SqlDataReader reader = command.ExecuteReader(); 

     while (reader.Read()) 
     { 
      query = reader["Link"].ToString(); 
     } 

     reader.Close(); 
    } 
    finally 
    { 
     conn.Close(); 
    } 

    return query; 
} 

然後,我就在這裏調用這個方法是這樣的:

[WebMethod] 
public string GetLinks() 
{ 
    return ConnectionClass.GetLinks(); 
} 

所以,如果有人可以幫助我,我會很感激。

在此先感謝!

回答

1

您已經聲明作爲查詢字符串,那麼它就會每次都重寫。考慮使用高效的stringbuilder並將鏈接追加到它。

string query = string.Format("SELECT Link FROM Linkovi"); 
    StringBuilder result = new StringBuilder(); 
    try 
     { 
      conn.Open(); 
      command.CommandText = query; 

      SqlDataReader reader = command.ExecuteReader(); 

      while (reader.Read()) 
      { 
       result.Append(reader["Link"].ToString()); 
      } 
      reader.Close(); 
     } 
     finally 
     { 
      conn.Close(); 
     } 
     return result.ToString(); 
+0

謝謝,那工作:) – user2167123 2013-03-13 20:37:49

1

您總是覆蓋查詢的結果。

query = reader["Link"].ToString(); 

嘗試類似如下:

// store the links in a list 
var list = new List<string>(); 
... 
while (reader.Read()) { 
    list.Add(reader["Link"].ToString()); 
} 
... 
// return the list of links 
return list; 
+0

填充數據到數據表和使用。使用dataadapter – 2013-03-13 20:16:53

1

您只保存最後的結果。創建一個集合,然後將結果添加到集合中,並將集合值連接在一起,或者更改該方法的返回類型,以便它返回集合而不是單個集合string

public static string GetLinks() 
{ 
    string query = string.Format("SELECT Link FROM Linkovi"); 

    try 
    { 
     conn.Open(); 
     command.CommandText = query; 

     List<string> links = new List<string>(); 
     using (SqlDataReader reader = command.ExecuteReader()) 
     { 
      while (reader.Read()) 
      { 
       links.Add(reader["Link"].ToString()); 
      } 
     } 
    } 
    finally 
    { 
     conn.Close(); 
    } 

    return string.Join(",", links); // You can change the delimiter here to something else. 
} 
1

GetLinks方法只返回一個字符串。每次通過循環,執行:

query = reader["Link"].ToString(); 

因此只有一個字符串被返回。

如果你想返回所有的鏈接,你需要建立一個列表,並將這些字符串添加到列表中。或者,也許,該字符串添加到StringBuilder,通過換行或東西分開:

StringBuilder sb = new StringBuilder(); 

while (reader.Read()) 
{ 
    sb.Append(reader.["Link"].ToString()); 
    sb.Append("\n"); 
} 

return sb.ToString(); 

而在你的客戶端代碼,你需要將其分離出來:

string rslt = ConnectionClass.GetLinks(); 
string[] links = string.Split(new char[] {'\n'}, StringSplitOptions.RemoveEmptyEntries);