0

だから、私は現在のユーザーが「シャウトアウト」を見ることができる「シャウトアウト」と呼ばれるエリアを作成しようとしています.

したがって、最初に現在のユーザーのすべての友達を「currentuserfriends」という配列に入れ、次に、ユーザー名が「currentuserfriends」内のすべてのユーザーであるシャウトアウト テーブルからメッセージを選択します。

ただし、selectステートメントをループする方法がわかりません。

私は何かをする必要はありません。

string getuserfriendlist = "SELECT friend FROM friend WHERE username = '" + currentuserfriends[0] + "'";

currentuserfriends[0] を手動で増やします。単一の select ステートメントで最後まで currentuserfriends をループする方法はありますか? ありがとう。

フレンドテーブル

username | friend

シャウトアウトテーブル

username | message | datetime

コード:

        string[] currentuserfriends = new string[9999];
string[] posternames = new string[9999];
    string getuserfriendlist = "SELECT friend FROM friend WHERE username = '" + currentuser + "'";

    SqlCommand cmdb = new SqlCommand(getuserfriendlist, con);

    SqlDataReader drb;

    drb = cmdb.ExecuteReader();

    while (drb.Read())
    {

        string currentuserfriend = drb["friend"].ToString();
        currentuserfriends[l++] = currentuserfriend;
    }
    drb.Close();

    string getshoutout = "SELECT * FROM shoutout WHERE username = '" + currentuserfriends + "' AND username ='" + currentuser + "' order by datetime DESC";
    SqlCommand cmdc = new SqlCommand(getshoutout, con);
    SqlDataReader drc;
    drc = cmdc.ExecuteReader();

    while (drc.Read())
    {
        string postername = drb["username"].ToString();
        posternames[m++] = postername;
    }
    drc.Close();

    Label2.Text = posternames[0];
    Label3.Text = posternames[1];
    Label4.Text = posternames[2];
    Label5.Text = posternames[3];
    Label6.Text = posternames[4];
4

4 に答える 4

1

List<string>配列の代わりにa を使用できます。その場合、次のようなことができます。

var currentuserfriends = new List<string>();

while (drb.Read())
{
    currentuserfriends.Add(drb["friend"].ToString())
}

他の人が言ったように、クエリを最適化できます。私はそれをさらに一歩進めて、Entity Framework (または LINQ to SQL) にアドバイスしたいと思います。これにより、次のことが可能になります。

var db = new ObjectContext();

string[] currentuserfriends = (
    from friend in db.Friends
    where friend.Username == currentuser
    select friend.Name)
    .ToArray();

現在のクエリは現在 SQL インジェクションに対して脆弱であるため、SQL クエリを手作業で作成する必要がなくなり、SQL インジェクションから直接クエリを防ぐことができます。

于 2013-06-27T07:41:38.807 に答える
0

最初に、次のコードを使用して配列をコンマ区切りの文字列にします

string idString = String.Join(",",currentuserfriends);

次に、以下のSQLステートメントを使用します

SELECT friend FROM friend WHERE username in ("+idstring+");
于 2013-06-27T07:36:11.767 に答える