Zum Inhalt springen

Mime Parser Klasse für dot NET


Empfohlene Beiträge

Geschrieben

hi leute,

ich schreibe momentan ein kleines Tool, welches die E-Mails über POP3 Protokoll abholt.

Nun habe ich das Problem das diese im MIME Format ankommen.

Da das schreiben einer solchen Klasse enorm aufwändig ist und ich das Rad ja nicht neu erfinden will ;) , frage ich, ob jemand eine gute Klasse diesbezüglich kennt?

Lg

Gateway

Geschrieben (bearbeitet)

Klappt soweit, nun hab ich noch eine Frage.

Ich hab in einer access Tabelle ein Feld mit dem typ OLE-Object belegt.

Nun hab ich versucht in dieses ein file zu speichern das sieht in etwa so aus:


'Hier wird der anhangname in die DB gespeichert


If entity.ContentType_Name IsNot Nothing Then

                            Dim command As New OleDb.OleDbCommand

                            command.Connection = con

                            command.CommandText = "INSERT INTO Attachment(ID, Filename) VALUES(" & currentmail & ", '" & entity.ContentType_Name & "')"

                            con.Open()

                            command.ExecuteNonQuery()

                            con.Close()

                            Dim file() As Byte

                            file = entity.DataEncoded


'Hier "soll" der Anhang in die DB gespeichert werden


                            Dim sqlVO As New OleDb.OleDbCommand

                            sqlVO.Connection = con

                            sqlVO.CommandText = "Select * from Attachment where ID = " & currentmail & " AND Filename = '" & entity.ContentType_Name & "'"

                            Dim adpVO As New OleDb.OleDbDataAdapter(sqlVO)

                            Dim dsVO As New Data.DataSet

                            adpVO.Fill(dsVO)

                            Dim dtVo As Data.DataTable = dsVO.Tables(0)

                            If dtVo.Rows.Count > 0 Then

                                dtVo.Rows(0)("Binary") = file

                                adpVO.Update(dsVO)

                            End If

                        End If

Der Fehler der geworfen wird lautet:

Aktualsieren erfordert einen gültigen UpdateComand, wenn eine Datarow-Auflistung mit modifizierten Zeilen weitergeben wird.

Hat jemand eine Idee?

Muss ich vielleicht bei Access die Connection manuel wieder öffnen?

lg

Gateway

Ich muss dazu sagen das noch nie Files in eine access reingeschrieben habe.

Die obige routine habe ich immer erfolgreich bei mssql servern benutzt und dachte ich könnte diese einfach für access ummodifizieren.

Bearbeitet von Gateway_man
Geschrieben

Der Fehler der geworfen wird lautet:

Aktualsieren erfordert einen gültigen UpdateComand, wenn eine Datarow-Auflistung mit modifizierten Zeilen weitergeben wird.

Wenn du im CommandText ein SELECT statt ein UPDATE angibst, sollte das doch klar sein. :rolleyes:

Geschrieben

ich hab den ganzen part dieser Update routine nicht gezeicht :D .


  Dim temparray() As Byte = entity.Data

                                Dim sqlVO As New SqlServerCe.SqlCeCommand

                                sqlVO.Connection = con2

                                sqlVO.CommandText = "SELECT * FROM Attachment WHERE MailID =" & currentmail & " AND Binary is NULL"

                                Dim adpVO As New System.Data.SqlServerCe.SqlCeDataAdapter(sqlVO)

                                Dim builder As SqlServerCe.SqlCeCommandBuilder = New SqlServerCe.SqlCeCommandBuilder(adpVO)

                                builder.GetUpdateCommand()

                                Dim dsVO As New Data.DataSet

                                adpVO.Fill(dsVO)

                                Dim dtVo As Data.DataTable = dsVO.Tables(0)

                                If dtVo.Rows.Count > 0 Then

                                    dtVo.Rows(0)("MailID") = currentmail

                                    dtVo.Rows(0)("Filename") = entity.ContentType_Name

                                    dtVo.Rows(0)("Binary") = temparray

                                    adpVO.Update(dsVO)

                                Else

                                    Dim dr As Data.DataRow

                                    dr = dtVo.NewRow

                                    dr("MailID") = currentmail

                                    dr("Filename") = entity.ContentType_Name

                                    dr("Binary") = temparray

                                    dtVo.Rows.Add(dr)

                                    adpVO.Update(dsVO)

                                End If

Das Select ist schon richtig, da wird kein update benötigt. Da ich ja erst Suche ob eine solche Row bereits existiert (mit dem Select). Wenn ja dann update ich diese, wenn nicht lege ich eine neue Row an. :rolleyes:

Funktioniert auch sehr gut muss ich sagen.

Geschrieben

Ich behaupt einfach mal, dass sowas mit OleDbDataAdapter nicht weil:

Wenn du einen OleDbDataAdapter anhand eines OleDbCommands erzeugst, wird dieses Command als SelectCommand gesetzt. Insert-, Update und DeleteCommand bleiben leer.

Das wäre jedenfalls meine These.

Geschrieben

Hm der einzige Grund warum es bei OLEDB nicht auf diesem Weg funktioniert ist, es gibt bei oledb keinen CommandBuilder.

Zum Ablauf und zu verständnis da es mir so vorkommt, als bestehen bei diesem codeschnipsel noch missverständnisse:

==>Erstelle einen Command mit einem Select umd eine bestimmte Row zu erhalten.

==>Erstelle einen Adapater dem der Command übergeben wird.

==>Erstelle und fülle ein Dataset mit dem Datensatz

==>Dann wird die Tabelle im Dataset einem Datatable übergeben

==>Nun wird eine Abfrage gestartet ob im Table mehr als 0 Rows vorhanden sind

==>Ist das der Fall werden die Daten geändert und der zuvor kreierte Dataadapter wird mit dem Inhalt des Dataset's upgedatet

und wieder an die DB geschickt.

==>Ist es nicht der Fall wird eine Row mit den angegeben Daten ins Dataset eingefügt und wieder in den Adapter übertragen,

dieser schreibt es wieder in die DB.

Geschrieben
Hm der einzige Grund warum es bei OLEDB nicht auf diesem Weg funktioniert ist, es gibt bei oledb keinen CommandBuilder.

Achso?

Was ist dann das? :rolleyes:

Zum Rest: mir ist schon klar, wie der Algorithmus funktionieren sollte.

Geschrieben

hm sehr kurios da mir das IntelliSense dies nicht aufgelistet hat bin ich davon ausgegangen das es keinen CommandBuilder für Oledb gibt. :confused:

Wie gesagt beim Compact sowie bei normalen Sql Servern funktioniert das einwandfrei.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...