2016-07-13 9 views
0

Ich versuche, einen Windows-Dienst in C# zu erstellen, um täglich automatisch E-Mails zu senden, basierend auf Daten aus einer angegebenen SQL-Server-Datenbank gelesen.Windows Service C# Datenbank Verbindungsprobleme

Ich habe gemanaged, um den Dienst zu starten, um E-Mails automatisch zu senden, aber wenn ich versuche, einen sqlconnection Dienst einzufügen, funktioniert einfach nicht mehr. Irgendwelche Ideen?

Es funktioniert, wenn ich SqlConnection und Datenleser entfernen.

Hier ist mein Code:

System.Timers.Timer createOrderTimer; 
    public Service1() 
    { 
     InitializeComponent(); 
    } 

    protected override void OnStart(string[] args) 
    { 
     createOrderTimer = new System.Timers.Timer(); 
     createOrderTimer.Elapsed += new System.Timers.ElapsedEventHandler(GetMail); 
     createOrderTimer.Interval = 2500; 
     createOrderTimer.Enabled = true; 
     createOrderTimer.AutoReset = true; 
     createOrderTimer.Start(); 
    } 
    protected override void OnStop() 
    { 
    } 
    public void GetMail(object sender, System.Timers.ElapsedEventArgs args) 
    { 
     SqlConnection connect = new SqlConnection("Server=10.222.160.17,5356;" 
      + "Database=tracking_tool;" 
      + "Trusted_Connection=True;" 
      + "user=admin;" 
      + "password=root"); 

     string line = ""; 
     connect.Open(); 
     SqlCommand GetData = new SqlCommand("select * from validation", connect); 
     SqlDataReader ReadData = null; 
     ReadData = GetData.ExecuteReader(); 

     while (ReadData.Read()) 
     { 

      line = ReadData["Line"].ToString(); 

     } 
     connect.Close(); 

     MailMessage mailMessage = new MailMessage(); 
     mailMessage.To.Add("[email protected]"); 
     mailMessage.From = new MailAddress("[email protected]"); 
     mailMessage.Subject = "example"; 
     mailMessage.Body = "example"; 
     SmtpClient smtpClient = new SmtpClient("10.214.81.97"); 
     smtpClient.Send(mailMessage); 
    } 
+1

erhalten Sie irgendwelche Fehler? – Ted

+0

So erhalten Sie keine Ausnahmen, dies könnte helfen, das Problem zu untersuchen. Sind Sie auch sicher, dass die Verbindungszeichenfolge richtig ist? Es gibt ein Komma in der IP. Ich bin kein Experte, aber ich habe das nie zuvor erlebt. –

+1

Trusted_Connection = True verschleiert den Benutzernamen und das Passwort und wenn Sie sich in einem Dienst befinden, ist der Benutzer, der den Dienst ausführt, derjenige, der der SQL Server-Authentifizierung angeboten wird. Ich würde versuchen, die Trusted_Connection zu entfernen und benutze den Benutzernamen und das Passwort – Steve

Antwort

1

Sie Daten von SQL in variable Zeile zu lesen, aber danach Sie tun nichts mit ihm. Meine Vermutung ist, dass eigentlich nichts falsch ist. Wie stellen Sie fest, dass etwas nicht funktioniert?

+0

Da wird keine E-Mail automatisch gesendet. Wenn ich Zeilen, in denen ich Daten lese, kommentiere, sendet der Windows-Dienst E-Mails. (Dieser Leser ist nur zum Testen und zeigt Ihnen, was es nicht funktioniert) –

+0

Nun, wenn es keine E-Mail sendet, ist eine Ausnahme aufgetreten. Da ich keinen Ausnahmebehandlungscode sehe, sollte der Dienst gestoppt werden und Sie sollten eine Fehlermeldung im Windows-Ereignisprotokoll sehen. –

+0

Nicht unbedingt. Die Mail wird unabhängig von den SQL-Daten gesendet, das ist es, was ich mit meiner Antwort gemeint habe. Ich denke, Sie erhalten Daten zurück, es ist in Ihrer Zeile gespeichert und dann sendet es weiter die Mail. Jetzt verstehe ich, dass Sie keine E-Mails erhalten, aber das Problem wäre in diesem Fall, dass Sie den E-Mail-Teil senden, nicht Ihren Db-Code. Sie könnten einen Unterbrechungspunkt an den Abschnitt line = Readdata einfügen, um zu sehen, ob er gefüllt ist. Aber wie Ted sagte, überschreibst du es. Obwohl Sie nur eine Zeile in Ihrer Tabelle haben. –

0

Ihre ConnectionString ist falsch. Versuchen Sie Folgendes: (Ersetzen Sie einfach Ihre Konfigurationen)

server={YourSqlInstanceFullName};database={YourDatabaseName};Integrated Security=false;User ID={Database Username};Password={Password}