[英]String together results from sql
我有一个包含一堆电子邮件地址的数据库,我需要将它们格式化为一个字符串,如下所示:
toaddress = "name@gmail.com,name1@gmail.com,name2@gmail.com,name3@gmail.com"
当前代码:
string toaddress = "";
using (SqlConnection conn = new SqlConnection(""))
{
SqlCommand cmd = new SqlCommand("SELECT email FROM dbo.Members", conn);
conn.Open();
SqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
toaddress = rdr["email"].ToString();
}
rdr.Close();
}
最简单的方法是像这样使用StringBuilder
StringBuilder sb = new StringBuilder();
string toaddress = null;
using (SqlConnection conn = new SqlConnection(""))
{
SqlCommand cmd = new SqlCommand("SELECT email FROM dbo.Members", conn);
conn.Open();
SqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
sb.Append(rdr["email"].ToString() + ",");
}
rdr.Close();
}
toaddress = sb.ToString().TrimEnd(',');
记得Trim
,
从字符串的使用结束String.TrimEnd
如果在Command
和DataReader
对象上使用using
语句,则更好,例如:
using (SqlConnection conn = new SqlConnection(""))
{
using (SqlCommand cmd = new SqlCommand("SELECT email FROM dbo.Members", conn))
{
conn.Open();
using (SqlDataReader rdr = cmd.ExecuteReader())
{
while (rdr.Read())
{
sb.Append(rdr["email"].ToString() + ",");
}
}
}
}
将地址切换到List<string>
如下所示:
List<string> addresses = new List<string>();
获取时使用add
:
addresses.Add(rdr["email"] as string));
然后最后使用string.Join
var toaddress = string.Join(",", addresses);
建议二,避免重复两次:
public IEnumerable<string> GetEmails()
{
using (SqlConnection conn = new SqlConnection(""))
{
SqlCommand cmd = new SqlCommand("SELECT email FROM dbo.Members", conn);
conn.Open();
SqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
toaddress = rdr["email"].ToString();
}
rdr.Close();
}
}
然后只需调用: string.Join(",", GetEmails())
这样,如果您想用它来做疯狂的事情,可以:
string.Join(",", GetEmails().Select(email => email.ToLower()).Distinct())
使所有电子邮件都小写且区分(例如)。
使用Sql Server(肯定是2008年,似乎是在2005年,但不确定),可以使用FOR XML将所有行以','作为分隔符,并使用STUFF删除第一个',':
select stuff((select ',' +email
from Members
for XML PATH('')),1,1,'')
您正在覆盖当前字符串。 要使其正常工作,您需要像
toaddress += "," + rdr["email"].ToString();
但是,这是一种丑陋的方式。 最好将结果放在列表的最前面并使用字符串。
List<string> addresses = new List<string>();
... database stuff
while (rdr.Read())
{
addresses.Add(rdr["email"].ToString());
}
... stuff
string toaddress = string.Join(",", addresses)
您可以创建一个List
并使用string.Join
将各项组合在一起。
List<string> items = new List<string>();
using (SqlConnection conn = new SqlConnection(""))
{
SqlCommand cmd = new SqlCommand("SELECT email FROM dbo.Members", conn);
conn.Open();
SqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
items.Add(rdr["email"].ToString());
}
rdr.Close();
}
toaddress = string.Join(",", items);
如果您使用的是3.5框架,则需要ToArray()
列表。
var toaddress = new StringBuilder();
var delimiter = "";
using (SqlConnection conn = new SqlConnection(""))
{
SqlCommand cmd = new SqlCommand("SELECT email FROM dbo.Members", conn);
conn.Open();
SqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
toaddress.AppendFormat("{0}{1}", delimiter, rdr["email"].ToString());
delimiter = ",";
}
rdr.Close();
}
return toaddress.ToString();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.