所以,我正在尝试创建一个名为“shoutout”的区域,当前用户可以在其中查看“shoutout”,基本上来自shoutout表的消息来自与他/她成为朋友的人。
所以,我所做的是首先将所有当前用户的朋友放入一个名为“currentuserfriends”的数组中,然后我希望从shoutout表中选择一条消息,其中username =“currentuserfriends”中的所有用户。
但是我不知道如何在select语句中循环,
我不想做类似的事情,
string getuserfriendlist = "SELECT friend FROM friend WHERE username = '" + currentuserfriends[0] + "'";
并手动增加currentuserfriends [0]。有没有办法将currentuserfriends循环到单个select语句的结尾?感谢。
朋友表
username | friend
shoutout table
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];
答案 0 :(得分:1)
您可以使用List<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注入查询。
答案 1 :(得分:0)
在数组上使用foreach循环,然后生成SQL查询
答案 2 :(得分:0)
有没有办法将currentuserfriends循环到单个结尾 选择陈述?
是的,有。 IN Operator做到了。
答案 3 :(得分:0)
首先使用以下代码使您的数组成为逗号分隔的字符串
string idString = String.Join(",",currentuserfriends);
然后,使用下面的sql语句
SELECT friend FROM friend WHERE username in ("+idstring+");