0

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

だから、誰かが私を助けることができれば、私は本当に感謝しています.

前もって感謝します!

4

4 に答える 4

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

クエリの結果は常に上書きされます。

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

メソッドGetLinksは単一の文字列のみを返します。ループのたびに、次を実行します。

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

したがって、返される文字列は 1 つだけです。

すべてのリンクを返したい場合は、リストを作成し、それらの文字列をリストに追加する必要があります。または、おそらく、StringBuilder改行などで区切られた文字列を a に追加します。

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 に答える
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 に答える