我正在尝试创建一个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();
}
所以,如果有人可以帮助我,我将非常感激。
提前致谢!
答案 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);