Gateway_man Geschrieben 15. September 2009 Geschrieben 15. September 2009 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 Zitieren
Gateway_man Geschrieben 15. September 2009 Autor Geschrieben 15. September 2009 Hat sich erledigt. Werde es wohl doch selbst machen müssen . Lg Gateway Zitieren
TDM Geschrieben 15. September 2009 Geschrieben 15. September 2009 Die Klassen in System.Net.MIME reichen wohl nicht? Zitieren
Gateway_man Geschrieben 15. September 2009 Autor Geschrieben 15. September 2009 Nein leider nicht Zitieren
Gateway_man Geschrieben 16. September 2009 Autor Geschrieben 16. September 2009 (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 16. September 2009 von Gateway_man Zitieren
Gateway_man Geschrieben 16. September 2009 Autor Geschrieben 16. September 2009 Hat sich erledigt, bin jetzt auf ne sqlce DB umgestiegen bei der alles wunderbar klappt. Zitieren
TDM Geschrieben 17. September 2009 Geschrieben 17. September 2009 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. Zitieren
Gateway_man Geschrieben 17. September 2009 Autor Geschrieben 17. September 2009 ich hab den ganzen part dieser Update routine nicht gezeicht . 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. Funktioniert auch sehr gut muss ich sagen. Zitieren
TDM Geschrieben 17. September 2009 Geschrieben 17. September 2009 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. Zitieren
Gateway_man Geschrieben 17. September 2009 Autor Geschrieben 17. September 2009 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. Zitieren
TDM Geschrieben 17. September 2009 Geschrieben 17. September 2009 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? Zum Rest: mir ist schon klar, wie der Algorithmus funktionieren sollte. Zitieren
Gateway_man Geschrieben 17. September 2009 Autor Geschrieben 17. September 2009 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. Zitieren
Empfohlene Beiträge
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.