Web Service未返回所有数据

时间:2013-03-13 20:11:31

标签: c# web-services webmethod

我正在尝试创建一个Web服务,它将连接到SQL数据库并返回存储在那里的所有链接。

我到目前为止编写了这段代码,它只返回插入数据库的最后一个链接。

我创建了这个获取链接的方法:

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();
}

所以,如果有人可以帮助我,我将非常感激。

提前致谢!

4 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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();

答案 2 :(得分: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.
}

答案 3 :(得分: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);