2015-05-27 4 views
0

, поэтому я пытаюсь отправить электронное письмо с информацией, полученной из базы данных. У меня проблема, потому что когда я отправляю электронное письмо, имя столбца не отображается. Также как я могу структурировать электронную почту, чтобы показать, как база данных, название столбца и под ним информация, затем следующий столбец. ниже мой код. как вы можете видеть внизу, я сделал columns.tostring, но не работает. любая помощь приветствуется, отображающий имена столбцов в электронной почте и структуру электронной почты

using System; 
using System.Collections.Generic; 
using System.Data.SqlClient; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Net.Mail; 
using System.Net; 

namespace sql_connection 
{ 
class Program 
{ 
static void Main(string[] args) 
{        
    string conn = null; 
    SqlConnection connection; 
    conn= ("Data Source=database\\SQL2012;Initial Catalog=jobs;User ID=user;Password=passs"); 

    connection = new SqlConnection(conn); 
    try{ 

     connection.Open(); 
     Console.WriteLine("Connection Open!"); 
     SqlCommand cmd = new SqlCommand("SELECT [jobs].[dbo].[table hours].whd_Date,[jobs].[dbo].[table hours].whd_FromTime,[jobs].[dbo].[table hours].whd_ToTime, [jobs].[dbo].[table hours].whd_User,[jobs].[dbo].[table login].login_Email FROM [jobs].[dbo].[table hours]INNER JOIN [jobs].[dbo].[table login] ON [jobs].[dbo].[table hours].whd_User = [jobs].[dbo].[table login].login_LoginId WHERE DATEDIFF(DAY,[whd_Date],GETDATE())<=7 AND (whd_ToTime = '' OR whd_ToTime IS NULL) AND(whd_User=login_LoginId)"); 
     cmd.Connection = connection; 
     SqlDataReader reader = cmd.ExecuteReader(); 
     var columns = Enumerable.Range(0, reader.FieldCount).Select(reader,GetName).ToList(); 


     var list = new List<string>(); 

     while(reader.Read()) 
     { 


       var s = string.Format("{4},{3},{2}, {1}, {0}", 
       reader["whd_ToTime"] == DBNull.Value? "NULL" : reader["whd_ToTime"].ToString(), 
       reader["whd_FromTime"] == DBNull.Value? "NULL" : reader ["whd_FromTime"].ToString(), 
       reader["whd_Date"].ToString(), 
       reader["whd_User"].ToString(), 
       reader["login_Email"].ToString()); 
       Console.WriteLine("\t", columns.ToArray())); 
      Console.WriteLine(s); 
      list.Add(s); 




     } 

     var sb = new StringBuilder(); 
     foreach (var s in list) 
     { 
      sb.AppendLine(s); 
     } 



     connection.Close(); 

     MailAddress to = new MailAddress("[email protected]"); 


     MailAddress from = new MailAddress("[email protected]"); 

     MailMessage mail = new MailMessage(from, to); 


     mail.Subject = ("missed punch clock"); 

     mail.Body = sb.ToString(); columns.ToString(); 

     SmtpClient smtp = new SmtpClient(); 
     smtp.Host = "smtp.gmail.com"; 
     smtp.Port = 587; 

     smtp.Credentials = new NetworkCredential(
      "[email protected]", "passworrd"); 
     smtp.EnableSsl = true; 
     Console.WriteLine("Sending email.."); 
     smtp.Send(mail); 
    } 




    catch (Exception ex) 
    { 
     Console.WriteLine(ex.Message); 
    }      
} 
} 
} 
+1

Лучше всего было бы построить 'HTML table', содержащий данные, которые вы хотите отобразить. Затем это можно установить как тело письма. Просто убедитесь, что для параметра 'IsHtml = true;' –

+0

** columnss.ToString(); ** <- Это ничего не делает. – JWiley

+0

@JeffreyWieder знаете ли вы хорошую ссылку, чтобы научиться делать это, и ishtml isnt работает говорит мне, что не существует в текущем контексте – bobby

ответ

0

Вызов ToString() на список не дает вам содержимое списка. Используйте вместо этого:

string columnNames = string.Join(',', columns); 
mail.Subject = ("missed punch clock");   
mail.Body = String.Concat(sb.ToString(), columnNames); 
Смежные вопросы