0

因此,我正在尝试创建一个名为“shoutout”的区域,当前用户可以在其中查看“shoutout”,基本上是来自与他/她是朋友的人的shoutout 表中的消息。

所以,我首先将所有当前用户的朋友放入一个名为“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

您可以使用 aList<string>而不是数组。在这种情况下,您可以执行以下操作:

var currentuserfriends = new List<string>();

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

就像其他人说的那样,您可以优化您的查询。我喜欢更进一步,并建议实体框架(或 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

对数组使用foreach循环,然后生成SQL查询

于 2013-06-27T07:28:47.697 回答
0

有没有办法在单个 select 语句中循环 currentuserfriends 直到结束?

就在这里。IN 运算符会这样做。

于 2013-06-27T07:30:12.367 回答
0

首先使用以下代码使您的数组成为逗号分隔的字符串

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

然后,使用下面的 sql 语句

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