0

我试图创建一个 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

4 回答 4

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;
于 2013-03-13T20:13:34.473 回答
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();
于 2013-03-13T20:15:02.370 回答
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.
}
于 2013-03-13T20:16:16.207 回答
1

您的GetLinks方法只返回一个字符串。每次通过循环,您执行:

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

所以只返回一个字符串。

如果要返回所有链接,则需要构建一个列表,并将这些字符串添加到列表中。或者,也许,将字符串添加到 aStringBuilder中,用换行符或其他东西分隔:

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);
于 2013-03-13T20:16:20.640 回答