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 :-).


Anmelden zum Antworten