Daten von Excel in SQL2005 Datenbank übertragen
-
Hallo Forum
ich möchte aus einem Excelfile Daten in meine Datenbank übertragen. Die Datenbank ist eine SQL 2005 Datenbank, das Programm zum importieren ist in C# und mit Ado.Net geschrieben. Bisher löse ich das so:
string connectionString = "Data Source="+ComputerName+";Initial Catalog=MyDB;Integrated Security=True"; SqlConnection connection = new SqlConnection(connectionString); DataTable table = new DataTable(); table = ImportDataFromXLS(FilePath, ExcelWorkSheet); if (table != null && table.Rows.Count > 0) { table.AcceptChanges(); connection.Open(); using (SqlBulkCopy bulkcopy = new SqlBulkCopy(connection)) { //Set destination table name bulkcopy.DestinationTableName = "AstriumPIMS.dbo."+DBTableName; try { bulkcopy.WriteToServer(table); } catch (Exception ex) { lbErrorAdmin.Text = ex.Message; } connection.Close(); } } protected DataTable ImportDataFromXLS(string FilePath, string ExcelWorkSheet) { //Create a DataTable and a DataSet DataTable dataTable = new DataTable(); DataSet set = new DataSet(); try { //Create a connection string string strConnectionString = ""; strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + FilePath + "; Jet OLEDB:Engine Type=5;" + "Extended Properties=Excel 8.0;"; //Create a new connection and open it OleDbConnection cnCSV = new OleDbConnection(strConnectionString); cnCSV.Open(); //Create a select command OleDbCommand cmdSelect = new OleDbCommand(@"SELECT * FROM ["+ExcelWorkSheet+"$]", cnCSV); //Create a DataAdapter OleDbDataAdapter daCSV = new OleDbDataAdapter(); daCSV.SelectCommand = cmdSelect; //Set the constraints to false set.EnforceConstraints = false; //Add the DataTable to the DataSet set.Tables.Add(dataTable); //Fill the DataTable daCSV.Fill(dataTable); //And set the constraints back to true set.EnforceConstraints = true; //Close the connection cnCSV.Close(); daCSV = null; //Return the DataTable with the data return dataTable; } catch (Exception ex) { //Get the errors if some occured DataRow[] rows = dataTable.GetErrors(); //and show them on the page lbErrorAdmin.Text = ex.Message; return null; } }
Das Problem ist nun folgendes: Ich habe in der Datenbank Spalten mit Integern oder auch Datetime. Die Daten, die aus Excel eingelesen werden sind alle vom Typ string. Wie bekomme ich jetzt meine Daten aus Excel in das richtige Datenformat für die Datenbank? Kann ich da womöglich kein Bulkcopy nutzen sondern muss das anders machen? Hat mir da jemand einen Tipp?
-
Hab gerade gesehen dass da jemand ein ähnliches Problem hat, hoffe mal der Thread wird weitergeführt, dann kann ich da weiterlesen :-).