0

SQLdatabase から列データのみを取得し、文字列またはラベルにホルダーとして格納するつもりです。

CASE: データベース "tblUser" WHERE apple = 1 からすべての電子メール アドレスを選択し、"emaillist" 文字列ホルダーに保存してから、mail.to.add(emaillist); で添付します。

注: ExecuteScalar では、データベースの最初の行のみを取得できます。したがって、メール アドレスの最初の行のみを取得できます。(例:user@user.com)

期待される結果: 「user@user.com、testing.gmail.com、admin@admin.com」などで構成されるメールリスト。

私のコード:

     String status = "1";
    SqlConnection conn100 = new SqlConnection("Server=localhost;Integrated                     Security=true;database=WebsiteDatabase");
    conn100.Open();
    SqlCommand cmd100 = conn100.CreateCommand();
    cmd100.CommandText = "select emailaddress from tblUser where apple= '" + status + "'";
        string selected100 = cmd100.ExecuteScalar().ToString();

        String emailcontent = "";
        emailcontent = "" + selected1 + "- Highlight: " + selected2;
        String emaillist = "" + selected100;
        //Create a new MailMessage in order to send email
        MailMessage mail = new MailMessage();

        //The recipient of this email
        mail.To.Add("recipient@gmail.com" + emaillist);

        //The sender of this email
        mail.From = new MailAddress("sender@gmail.com");

        //The subject of this email
        mail.Subject = "Latest Product";

        //The email's content
        string body = "New Product added! " + emailcontent;
        mail.Body = body;
        mail.IsBodyHtml = true;

        //Create new smtpClient and use smtp services
        SmtpClient smtp = new SmtpClient();

        //SMTP host (Gmail)
        smtp.Host = "smtp.gmail.com";

        //SMTP port
        smtp.Port = 587;
        smtp.UseDefaultCredentials = false;

        //Sender Email and password
        smtp.Credentials = new System.Net.NetworkCredential("sender@gmail.com", "password");

        //Enable SSL in order to have secure transmission
        smtp.EnableSsl = true;

        //Send the email
        smtp.Send(mail);
4

3 に答える 3

0

実行リーダーを使用します。それはあなたを助けるでしょう。
MSDN リンクhttp://msdn.microsoft.com/en-us/library/9kcbe65k.aspx

string str="";
SqlCommand command = new SqlCommand(queryString, connection);
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
   str+=dr[0].ToString()+",";
}

最後に最後のコンマを削除します。

または、次のようにリストを利用できます

  var userEmail = new List<string>();

  while (lobjDtReader.Read())
  {
       userEmail .Add(lobjDtReader[0].ToString());
  }

  var Emails = string.Join(",", userEmail );
于 2013-04-15T09:34:57.687 に答える
0

複数のレコードを返すクエリを実行する場合は、SqlDataReaderを使用してから、返された行をループする必要があります。

....
conn100.Open();
SqlCommand cmd100 = conn100.CreateCommand();
cmd100.CommandText = "select emailaddress from tblUser where apple= @status";
cmd100.Parameters.AddWithValue("@status", status);
SqlDataReader dr = cmd100.ExecuteReader();
StringBuilder sb = new StringBuilder();
while(dr.Read())
{
   sb.AppendFormat("{0},", dr[0].ToString());
}

また、コードを変更して、SQL テキスト コマンドの文字列連結を削除しました。また、StringBuilder を使用して宛先リストを作成しました。これは、連結する文字列が多数ある場合により効率的であるためです。

....
// Now the StringBuilder contains all of your To Address separated by a comma as required 
// Clip away the last comma
sb.Length = sb.Length - 1;
mail.To.Add(sb.ToString());
于 2013-04-15T09:39:02.757 に答える