Bitte benutze Code Tags!
[Hinweis] Wie poste ich richtig? Punkt 6
verwendetes Datenbanksystem: <postgresql>
Hallo,
ich versuche mit einem C#-Tool die Termineinträge aus dem Exchange Server in eine Datenbank zu kopieren und zu speichern. Dass die Daten gelesen werden und beispielsweise als Output am Display angezeigt werden, funktioniert aber nicht die Übertragung in die Datenbank. Ich habe schon einiges ausprobiert und recherchiert aber es hat bis jetzt nichts gebracht. Dazu habe ich folgenden Code:
DateTime startDate = new DateTime(2015, 1, 1, 0, 0, 0);
DateTime endDate = DateTime.Now;
CalendarFolder calendar = CalendarFolder.Bind(service, c_id);
CalendarView cView = new CalendarView(startDate, endDate);
cView.PropertySet = new PropertySet(AppointmentSchema.ConversationId, AppointmentSchema.ICalUid, AppointmentSchema.Categories, AppointmentSchema.Subject, AppointmentSchema.Start, AppointmentSchema.End);
cView.PropertySet.RequestedBodyType = BodyType.Text;
FindItemsResults<Appointment> appointments = calendar.FindAppointments(cView);
foreach (Appointment a in appointments)
{
{
OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Integrated Security=Yes");
OleDbCommand cmd = new OleDbCommand("Insert into terminmitarbeiter_test(conversation_id,icaluid,categories,subject,start,ende)values(@conversatio n_id,@icaluid,@categories,@subject,@start,@ende)", con);
Console.WriteLine("Saving Appointment:" + a.Subject);
cmd.Parameters.Add("@conversation_id", OleDbType.VarChar, 100).Value = a.ConversationId;
cmd.Parameters.Add("@icaluid", OleDbType.VarChar, 100).Value = a.ICalUid;
cmd.Parameters.Add("@categories", OleDbType.VarChar, 255).Value = a.Categories;
cmd.Parameters.Add("@subject", OleDbType.Char, 50).Value = a.Subject;
cmd.Parameters.Add("@start", OleDbType.Date).Value = a.Start;
cmd.Parameters.Add("@ende", OleDbType.Date).Value = a.End;
Console.Write("Opening Conn...");
con.Open();
Console.Write("Running cmd...");
int i = cmd.ExecuteNonQuery();
Console.Write("Finishing cmd...");
con.Close();
if (i > 0)
{
Console.WriteLine("Record Inserted Successfully");
}
else
{
Console.WriteLine("Operation Failed,Please Try Again Later");
}
}
}
Console.ReadLine();
Folgende Fehlermeldung erhalte ich:
Fehlermeldung:
"Error: Fehler bei einem aus mehreren Schritten bestehenden OLE DB-Vorgang. Prüfen Sie die einzelnen OLE DB-Statuswerte, falls vorhanden. Daten wurden nicht verarbeitet."
Kann mir jemand einen Weg weisen?
Verwende entsprechende Provider und vermeide OleDB.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Bitte Connectionstring überprüfen Connectionstrings.com und bitte beachte [Hinweis] Wie poste ich richtig? Punkt 6.
**:::
Vielen Dank für die hilfreiche Tipps und es tut mir leid, wenn ich was falsch gepostet habe.
Ich nehmen dann den Provider=PostgreSQL OLE DB Provider; aber er sagt mir dann: "Error: Der 'PostgreSQL OLE DB Provider'-Provider ist nicht auf dem lokalen Computer registriert."
Ich bin mittlerweile so verzweifelt, dass ich grade nichts mehr weiß...
Du versuchst also einen (oleDb) PostGreSQL Provider zu benutzen um auf einen Exchange Server zuzugreifen?
Du solltest dringend versuchen zu verstehen was du machst und nicht wie wild irgendwas Probieren.
Ein MS Exchange Server lässt sich so nicht ansprechen.
Nein. Die Verbindung mit dem Exchange Server besteht schon und funktioniert. Die Daten daraus, werden gezogen und können angezeigt werden. Mein Problem besteht darin, diese Daten in der Datenbank zu speichern. Dazu kriege ich die Verbindung momentan nicht hin...
Ich nehmen dann den Provider=PostgreSQL OLE DB Provider; aber er sagt mir dann: "Error: Der 'PostgreSQL OLE DB Provider'-Provider ist nicht auf dem lokalen Computer registriert."
Dann lade den Treiber runter und installiere ihn auf deiner Maschine, auf der Connectionstrings Seite gibts dazu Downloadlinks. Aber warum OLEDB wenn du mit .NET arbeitest?
**:::
Ich dachte, das sei die einzige Möglichkeit mit der Datenbank zu kommunizieren?
Wie würde es denn sonst funktionieren?
Das haben die Leute Dir hier nun schon mehrfach gesagt und sogar verlinkt.
Entsprechende Provider nutzen; jede DB hat hierbei eigene Provider, die mit Hilfe von ADO.NET aber identisch/ähnlich angesprochen werden.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Den Link habe ich dir bereits gegeben, lesen muss du selbst, sorry.
**:::
Threads zusammengeführt
Bitte benutze Code-Tags!!!
verwendetes Datenbanksystem: postgreSQL
Hallo,
ich stoße ständiges auf ein Problem und finde leider keine Lösung.
Ich bin dabei ein Tool zu erstellen, das die Termindaten aus dem Outlook vom Exchange Server in einer postgreSQL-Datenbank speichert. Die Daten zu lesen und am Display anzuzeigen funktioniert schon aber diese in der Datenbank zu speichern noch gar nicht.
Nach vielen Problemen mit der Verbindung zur Datenbank habe ich das (glaube ich zumindest) gelöst aber speichern tut es immer noch nicht und ich bin so langsam durch mit meine Gedanken. Hier der Coder zum Verständnis:
DateTime startDate = new DateTime(2015, 1, 1, 0, 0, 0);
DateTime endDate = DateTime.Now;
CalendarFolder calendar = CalendarFolder.Bind(service, c_id);
CalendarView cView = new CalendarView(startDate, endDate);
cView.PropertySet = new PropertySet(AppointmentSchema.ConversationId, AppointmentSchema.ICalUid, AppointmentSchema.Categories, AppointmentSchema.Subject, AppointmentSchema.Start, AppointmentSchema.End);
cView.PropertySet.RequestedBodyType = BodyType.Text;
FindItemsResults<Appointment> appointments = calendar.FindAppointments(cView);
foreach (Appointment a in appointments)
{
{
Console.Write("ID: " + a.ConversationId.ToString() + " ");
Console.Write("iCalUID: " + a.ICalUid.ToString() + " ");
Console.Write("Categories: " + a.Categories.ToString() + " ");
Console.Write("Subject: " + a.Subject.ToString() + " ");
Console.Write("Start: " + a.Start.ToString() + " ");
Console.Write("End: " + a.End.ToString());
a.Load();
string bt = a.Body.Text.ToString();
bt = GetPlainTextFromHtml(bt);
Console.Write("body: " + bt + " ");
Console.WriteLine();
OleDbConnection con = new OleDbConnection("Provider=PostgreSQL OLE DB Provider;Data Source=192.168.0.6;location=termine;User ID=hmota;password=Hmota2012!");
OleDbCommand cmd = new OleDbCommand("Insert into terminmitarbeiter_test(conversation_id,icaluid,categories,subject,start,ende)values(@conversation_id,@icaluid,@categories,@subject,@start,@ende)", con);
Console.WriteLine("Saving Appointment:" + a.Subject);
cmd.Parameters.Add("@conversation_id", OleDbType.VarChar, 50).Value = a.ConversationId.ToString();
cmd.Parameters.Add("@icaluid", OleDbType.VarChar, 50).Value = a.ICalUid.ToString();
cmd.Parameters.Add("@categories", OleDbType.Char, 50).Value = a.Categories.ToString();
cmd.Parameters.Add("@subject", OleDbType.Char, 50).Value = a.Subject.ToString();
cmd.Parameters.Add("@start", OleDbType.Date).Value = a.Start.ToString();
cmd.Parameters.Add("@ende", OleDbType.Date).Value = a.End.ToString();
Console.Write("Opening Conn...");
con.Open();
Console.Write("Running cmd...");
int i = cmd.ExecuteNonQuery();
Console.Write("Finishing cmd...");
con.Close();
if (i > 0)
{
Console.WriteLine("Record Inserted Successfully");
}
else
{
Console.WriteLine("Operation Failed,Please Try Again Later");
}
}
}
Console.ReadLine();
Die Fehlermeldung, die ich erhalte, lautet: > Fehlermeldung:
Error: 'PostgreSQL OLE DB Provider' ist ohne Fehlermeldung fehlgeschlagen, Ergebniscode: DB_E_BADTYPENAME(0x80040E30). "
Kann mir jemand helfen?
Warum machst du einen neuen Topic auf?
Zum Problem: OleDbCommand.Parameters
Nochmals, warum OLE DB und kein .NET Komponent wenn du schon mit C# arbeitest?
**:::
OleDB ist sehr alt, langsam und fehleranfällig.
Benutze stattdessen den nativen PostgreSQL .NET-Treiber, damit bekommst Du auf jeden Fall eine sinnvolle Fehlermeldung wenn was nicht klappt.
Grüße Bernd
Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3
Edit: kann jemand diesen Topic mit Verbindung zur Datenbank zusammenführen, da es sich um das gleiche Problem handelt.
**:::
Edit: kann jemand diesen Topic mit
> zusammenführen, da es sich um das gleiche Problem handelt.
Done
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
Such mal nach npgsql, das verwenden wir auch für postgre Zugriff.
Ich habe das jetzt umgebaut und den Provider npgsql benutzt. Nach langem Hin und Her meldet er die erfolgreiche Speicherung und die Tabelle wird auch erweitert in der Datenbank aber wenn ich sie öffne, sehe ich nur alle Felder leer. Kann mir jemand sagen, wieso?
foreach (Appointment a in appointments)
{
{
Console.Write("ID: " + a.ConversationId.ToString() + " ");
Console.Write("iCalUID: " + a.ICalUid.ToString() + " ");
Console.Write("Categories: " + a.Categories.ToString() + " ");
Console.Write("Subject: " + a.Subject.ToString() + " ");
Console.Write("Start: " + a.Start.ToString() + " ");
Console.Write("End: " + a.End.ToString());
Console.WriteLine();
NpgsqlConnection con = new NpgsqlConnection("Server=192.168.0.6;Port=5432;User Id=hmota;Password=[PasswordHere];Database=termine;");
string query = "INSERT into terminmitarbeiter_test (conversationid,icaluid,categories,subject,start,ende) values (@ConversationID,@ICalUid,@Categories,@Subject,@Start,@End)";
NpgsqlCommand cmd = new NpgsqlCommand(query, con);
cmd.Parameters.Add(new NpgsqlParameter("ConversationID", DbType.String));
cmd.Parameters.Add(new NpgsqlParameter("ICalUid", DbType.String));
cmd.Parameters.Add(new NpgsqlParameter("Categories", DbType.String));
cmd.Parameters.Add(new NpgsqlParameter("Subject", DbType.String));
cmd.Parameters.Add(new NpgsqlParameter("Start", DbType.Date));
cmd.Parameters.Add(new NpgsqlParameter("End", DbType.Date));
Console.WriteLine("Saving Appointment:" + a.Subject);
Console.Write("Opening Conn...");
con.Open();
Console.Write("Running cmd...");
int i = cmd.ExecuteNonQuery();
Console.Write("Finishing cmd...");
con.Close();
if (i > 0)
{
Console.WriteLine("Record Inserted Successfully");
}
else
{
Console.WriteLine("Operation Failed,Please Try Again Later");
}
}
}
Bitte poste deine Passwörter nicht hier. Auch, wenn sie simpel etc. sind. Passwörter haben hier nichts zu suchen. --> Entfernt
Schau dir mit dem Debugger mal das Command an, was er gegen die DB feuert und schau dir das mal an. Sind alles Values richtig gesetzt?
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
Ich habe das jetzt umgebaut und den Provider npgsql benutzt. Nach langem Hin und Her meldet er die erfolgreiche Speicherung und die Tabelle wird auch erweitert in der Datenbank aber wenn ich sie öffne, sehe ich nur alle Felder leer. Kann mir jemand sagen, wieso?
Seufz ... du hast die Parameters zwar bereitgestellt aber nicht befüllt, woher sollen den Daten kommen?
**:::