ich einen komplexen Import in einem Microsoft SQL Server 2000Wie das Trennzeichen angeben, wenn CSV-Dateien über OLEDB in C# importiert
Da es in einem DTS tut, ist zu kompliziert ausführen müssen, ich versuche zu tun es mit einem kleinen C# -Programm, aber ich habe Probleme, wenn ich eine CSV-Datei importieren muss: Diese Datei verwendet Semikolons als Feldtrennzeichen anstelle von Kommas und ich kann nicht den .NET OLE DB-Provider, um es zu erkennen.
Ich habe bereits verschiedene "Lösungen" im Netz gefunden wie Extended Properties="Text; Format=Delimited"
oder `` Erweiterte Eigenschaften = "Text; Format = Getrennt (;)" in the connection string or using a
schema.ini` Datei ohne Erfolg.
Dies ist der eigentliche Code Ich verwende:
DataTable Table = new DataTable();
using (OleDbConnection Connection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source={0}; Extended Properties=\"Text;HDR=Yes;Format=Delimited\""))
{
Connection.Open();
using (OleDbCommand Command = Connection.CreateCommand())
{
Command.CommandText = "select [Field 1], [Field 2] from [file.csv]";
using (OleDbDataAdapter Adapter = new OleDbDataAdapter(Command))
{
Adapter.Fill(Table);
}
}
}
using (SqlConnection Connection = new SqlConnection("Data Source=server; Initial Catalog=database; User Id=user; Password=password;"))
{
Connection.Open();
using (SqlCommand Command = Connection.CreateCommand())
{
Command.CommandText = "insert into [table] ([field_1], [field_2], ...) values (@field_1, @field_2, ...)";
Command.Parameters.Add("field_1", SqlDbType.Date, 0, "Field 1");
Command.Parameters.Add("field_2", SqlDbType.VarChar, 100, "Field 2");
...
using (SqlDataAdapter Adapter = new SqlDataAdapter())
{
Adapter.InsertCommand = Command;
Adapter.Update(Table);
}
}
}
Alle Ideen, wie mit dem Semikolon als Feldtrennzeichen zu erreichen externen libriaries ohne sie?
Hinweise:
- Die „ohne auf externe libriaries zu verlassen“ Bit ist, weil ich die Datei direkt in die Datenbank und keine Bibliothek, die ich gefunden importieren muß, kann dies tun (sie Strings zurück), und unsere PHB wird nicht einmal einen Cent für eine kommerzielle Lösung fallen lassen.
- Ich weiß, dass ich die Datei über eine DTS importieren kann, aber ich muss komplexe Verzweigungen in den Workflow- und Dateiänderungen vor und nach dem Import durchführen, und das würde dazu führen, dass ich in die DTS hinein- und wieder herausspringe.
- Alles in der DTS zu tun wäre nicht praktisch für mich, wie ich bin nicht so erfahren in ActiveX und VBScript-Codierung.
Vielen Dank im Voraus, Andrea.
Edit 1 - @andyb: Test-Programmcode für schema.ini
Ansatz:
String ConnectionString = String.Format("Provider=Microsoft.Jet.OLEDB.4.0; Data Source={0}; Extended Properties=\"Text\"", Environment.CurrentDirectory);
DataTable Table = new DataTable();
using (OleDbConnection Connection = new OleDbConnection(ConnectionString))
{
Connection.Open();
using (OleDbCommand Command = Connection.CreateCommand())
{
Command.CommandText = "select * from [file.csv]";
using (OleDbDataAdapter Adapter = new OleDbDataAdapter(Command))
{
Adapter.Fill(Table);
}
}
}
Ihr Code verwendet SQL-Provider-Syntax für die OleDbConnection-Zeichenfolge und OLE DB-Provider-Syntax innerhalb der SqlConnection Zeichenfolge.Könnte dies das Problem sein? –
@ Panagiotis Kanavos: Ausschneiden und Einfügen Fehler, korrigiert. – Albireo