string Excel = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\mca23.xls;Extended Properties=""Excel 8.0;HDR=YES;"""; string SQL = "Data Source=.; Initial Catalog=hr;uid=sa;pwd=;Integrated Security=True"; SqlCommand cmd1; SqlCommand cmdDatabase; SqlConnection contoSql ; OleDbConnection contoExcel; OleDbCommand cmd;//Extended Properties=""Excel 8.0;THIS PART TELL OLEDB PROVIDER THAT IT IS GOING TO READ EXCEL SHEET//HDR=YES;THIS TELL DATA IS FROM THE FIRST ROW.
contoExcel = new OleDbConnection(Excel); contoExcel.Open(); cmd = new OleDbCommand("SELECT * FROM [Sheet1$]", contoExcel); OleDbDataReader rdr = cmd.ExecuteReader(); DataTable schema = rdr.GetSchemaTable();//[Sheet1$]BY THIS SHEET1 IS TREATED LIKE DATABASE TABLE
contoSql = new SqlConnection(SQL); cmdDatabase = new SqlCommand("Create table "+txtdbname.Text+" ("+"id varchar(100));", contoSql); contoSql.Open(); try { cmdDatabase.ExecuteNonQuery(); } catch (Exception error) { MessageBox.Show("Table already exist,Please enter another name"); txtdbname.Focus(); txtdbname.Text = ""; } contoSql.Close();// I CREATED TABLE WITH ONE DEFAULT COLOUM BECAUSE IT NOT LETTING ME TO CREATING EMPTY TABLE
foreach (DataRow row in schema.Rows) { int i = 0; foreach (DataColumn col in schema.Columns) { // if (i == 0) { name = Convert.ToString(row[0]); contoSql.Open(); cmd1 = new SqlCommand("ALTER TABLE "+dbname.TEXT+" ADD "+name+" varchar(1000);", contoSql); cmd1.ExecuteNonQuery(); contoSql.Close(); } i = i + 1; } }
cmd1.CommandText = "ALTER TABLE "+dbname+" DROP COLUMN id;"; cmd1.Connection = contoSql; contoSql.Open(); cmd1.ExecuteNonQuery();
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(contoSql)) { bulkCopy.DestinationTableName = txtdbname.Text; bulkCopy.WriteToServer(rdr); contoSql.Close(); } MessageBox.Show("Data inserted");