字符串汇总来自sql

tec*_*ora 0 c# sql sql-server

我有一个包含大量电子邮件地址的数据库,我需要将它们格式化为一个字符串,如下所示:

toaddress = "name@gmail.com,name1@gmail.com,name2@gmail.com,name3@gmail.com"
Run Code Online (Sandbox Code Playgroud)

当前代码:

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();
}
Run Code Online (Sandbox Code Playgroud)

Hab*_*bib 5

最简单的方法是使用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(',');
Run Code Online (Sandbox Code Playgroud)

记得Trim ,从字符串末尾使用String.TrimEnd

如果你using在你CommandDataReader对象上使用语句会更好,例如:

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() + ",");
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这通常不是您应该担心的优化级别.另见http://www.codinghorror.com/blog/2009/01/the-sad-tragedy-of-micro-optimization-theater.html (2认同)
  • 但如果他已经转向使用StringBuilder,那么将使用`sb.Append(rdr ["email"]).附加(",")` (2认同)