2013-03-13 80 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);