24. november 2004 - 20:25Der er
21 kommentarer og 1 løsning
Loope gennem en database - sådan cirka
Hej Jeg er ny i det her, og roder lidt med at lave en funktion, der kigger i en database, hvor den finder nogle personer, som den så sender en mail til.
Jeg er nået frem til følgende, og kan godt få den til at sende mail, men jeg kan ikke finde ud at kombinere det jeg henter i db med at sende en mail. Jeg vil altså gerne sende en mail til "personale.mail" med indholdet "id"?
På forhånd tak.
Kode:
Imports System Imports System.Data Imports System.Data.OleDb Imports System.Web.Mail
Namespace OpgaveMail
Public Class ClassOpgaveMail
Private Function DbConnection() As String Return "PROVIDER=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=c:\inetpub\wwwroot\database\calendar.mdb" End Function
Public Function SendMail() As String Dim MailSet As New DataSet Dim DbConn As New OleDbConnection(DbConnection()) Dim sqlCmd As New OleDbCommand("SELECT personale.mail, Id, EventDate, MailInitialer, MailVarsel FROM Events WHERE Status=TRUE AND Afsluttet=False AND MailSendt=False INNER JOIN MailInitialer ON Personale.initialer", DbConn) Try DbConn.open
Dim objMailMessage As MailMessage Try objMailMessage = New MailMessage objMailMessage.From = "tester@mail.dk" objMailMessage.To = "modtager@mail.dk" objMailMessage.Subject = "Test mail fra Opgavemail" objMailMessage.Body = "Dette er så body af testmail" Catch Return "Mail IKKE Dannet" End Try Try SmtpMail.SmtpServer = "Smtp.mail.dk" SmtpMail.Send( objMailMessage ) 'Return "Mail er sendt" Catch Return "Mail er ikke sendt" End Try Try DbConn.Close() Return "Forbindelse Lukket" Catch Return "Forbindelsen er IKKE lukket" End Try Catch Return "Der blev ikke oprette nogen databaseforbindelse" End Try
Dim DbConn As New OleDbConnection(DbConnection()) Dim sqlCmd As New OleDbCommand("SELECT personale.mail, Id, EventDate, MailInitialer, MailVarsel FROM Events WHERE Status=TRUE AND Afsluttet=False AND MailSendt=False INNER JOIN MailInitialer ON Personale.initialer", DbConn) Try DbConn.open
Dim reader As OleDbDataReader = sqlCmd.ExecuteReader reader.Read Dim permail As String = reader.GetString(0) Dim id As String = reader.GetString(1)
og så brug permail og id (ret type fra String til Integer om nødvendigt)
Hvis queryen returnerer mere end en række så skal du have en while løkke.
Eksempel:
Dim con As OleDbConnection = New OleDbConnection ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Database\MSAccess\Test.mdb;User Id=admin;Password=") con.Open Dim cmd As OleDbCommand = New OleDbCommand ("SELECT * FROM T1", con) Dim rdr As OleDbDataReader = cmd.ExecuteReader While rdr.Read Dim f1 As Integer = CType(rdr(0), Integer) Dim f2 As String = CType(rdr(1), String) ' brug f1 og f2 End While con.Close
Synes godt om
Slettet bruger
24. november 2004 - 20:46#3
Det gør den - var lige ved at skrive til dig :-) Kigger lige på det.
Synes godt om
Slettet bruger
24. november 2004 - 21:51#4
ÆV - hvad det driller. Jeg tester det ved følgende asp.net kode:
Sub Button_Click( s As Object, e As EventArgs ) Dim myOpgaveMail As New ClassOpgaveMail txt.Text = myOpgaveMail.SendMail End Sub </Script> <html <head><title>Test mail</title></head> <body> <form Runat="server"> <asp:label Id="txt" Runat="server" />
Og får så følgende fejl, som vist er noget med sql-comandoen:
System.Data.OleDb.OleDbException: Syntax error (missing operator) in query expression 'Status=TRUE AND Afsluttet=False AND MailSendt=False INNER JOIN MailInitialer ON Personale.initialer'.
Jeg har prøvet forskellige ændringer i sql-stringen, men kan ikke få det til. Ved du tilfældigvis noget om det også?
Dim sqlCmd As New OleDbCommand("SELECT personale.mail, Id, EventDate, MailInitialer, MailVarsel FROM Events INNER JOIN MailInitialer ON Events.X=MailInitialer.Y WHERE Status=TRUE AND Afsluttet=False AND MailSendt=False", DbConn)
X og Y skal erstattes med noget
Synes godt om
Slettet bruger
24. november 2004 - 22:26#6
Det fatter jeg ikke. Nu har jeg: "SELECT personale.mail, Id, EventDate, MailInitialer, MailVarsel FROM Events INNER JOIN Events ON Personale.initialer=Events.mailinitialer", DbConn
Dvs. fra tabellen events skal den tage en række informatiner. Til disse informationer skal der knyttes en mailadresse. Det felt der er ens i de to tabeller er hhv. mailinitialer i tabel 1 og initialer i tabel 2 (tabel 2 har mailadressen). Men jeg får stadig følgende fejl: System.Data.OleDb.OleDbException: Syntax error in JOIN operation.
Det kan det have noget at gøre med min asp.net side, hvorfra jeg aktiverer vb.net filen?
Synes godt om
Slettet bruger
24. november 2004 - 22:32#7
Sidste linie i ovenstående skulle være:
Kan det have noget at gøre med min asp.net side, hvorfra jeg aktiverer vb.net filen?
Dim sqlCmd2 As New OleDbCommand("UPDATE tabelnavn SET feltnavn = værdi", DbConn) sqlCmd2.ExecuteNonQuery
Synes godt om
Slettet bruger
24. november 2004 - 23:41#13
Den vil godt sende mail, hvis jeg udelader de to linier, der skal opdatere databasen når mailen er sendt. Men hvis jeg sætter de to linier ind, får jeg følgende fejl:
System.InvalidOperationException: There is already an open DataReader associated with this Connection which must be closed first.
På følgende kode:
While Reader.Read Dim f1 As Integer = CType(reader(0), Integer) Dim f2 As String = CType(reader(1), String) ' brug f1 og f2
Dim objMailMessage As MailMessage objMailMessage = New MailMessage objMailMessage.From = "test@mail.dk" objMailMessage.To = f2 objMailMessage.Subject = "Test mail fra Opgavemail" objMailMessage.Body = f1
While Reader.Read Dim f1 As Integer = CType(reader(0), Integer) Dim f2 As String = CType(reader(1), String) ' brug f1 og f2
Dim objMailMessage As MailMessage objMailMessage = New MailMessage objMailMessage.From = "test@mail.dk" objMailMessage.To = f2 objMailMessage.Subject = "Test mail fra Opgavemail" objMailMessage.Body = f1
Dim DbConn2 As New OleDbConnection(DbConnection()) Dim sqlCmd2 As New OleDbCommand("UPDATE Events SET sendtmail_1 = true", DBConn2) sqlCmd2.ExecuteNonQuery DbConn2.Close
End While
reader.close() DbConn.Close()
Synes godt om
Slettet bruger
24. november 2004 - 23:53#17
Hvis jeg sætter det ind efter reader.close(), siger den noget om at der mangler nogle parameterværdier?
Men når jeg så åbner DBConn2 og forsøger at sætte sendtmail_1 = true, siger den faktisk at: Exception Details: System.Data.OleDb.OleDbException: No value given for one or more required parameters.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.