Usuário com melhor resposta
como usar um progresbar neste caso ?

Pergunta
-
olá, eu preciso colocar uma barra enquanto eu importo para o access uma tabela do excel mas nao sei como fazer isso.
alguem poderia me ajuda o codigo que uso eh este :
nomePlanilha = textBox3.Text; diretorio = textBox1.Text; try { if (textBox1.Text != "" && textBox3.Text != "") { string path = diretorio; Microsoft.Office.Interop.Excel.Application excelapp = new Microsoft.Office.Interop.Excel.Application(); Microsoft.Office.Interop.Excel._Workbook workbook = excelapp.Workbooks.Open(path); Microsoft.Office.Interop.Excel._Worksheet worksheet = workbook.Worksheets[nomePlanilha]; worksheet = (Worksheet)workbook.ActiveSheet; worksheet.Cells[1, 1] = "Pers.No."; worksheet.Cells[1, 2] = "Nome"; worksheet.Cells[1, 3] = "Data"; worksheet.Cells[1, 4] = "From"; worksheet.Cells[1, 5] = "End_time"; worksheet.Cells[1, 6] = "Hours"; worksheet.Cells[1, 7] = "WBS_element"; worksheet.Cells[1, 8] = "AttAbsTxt"; worksheet.Cells[1, 9] = "ShortText"; worksheet.Cells[1, 10] = "Ext_Task_Name"; worksheet.Cells[1, 11] = "Proj_Task"; worksheet.Cells[1, 12] = "Categoria"; worksheet.Cells[1, 15] = "Sistema"; worksheet.Cells[1, 16] = "Tipo"; worksheet.Cells[1, 17] = "Líder_MIG"; worksheet.Cells[1, 18] = "Presage_code"; workbook.Save(); excelapp.Quit(); // Fecha a Aplicação excelapp = null; // Fecha a Aplicação GC.Collect(); // Fecha a Aplicação GC.WaitForPendingFinalizers(); // Fecha a Aplicação OleDbConnection conn = new OleDbConnection(("Provider=Microsoft.ACE.OLEDB.12.0; " + ("data source=" + diretorio + "; " + "Extended Properties=Excel 12.0;"))); OleDbDataAdapter ada = new OleDbDataAdapter("select * from [" + nomePlanilha + "$]", conn); DataSet ds = new DataSet(); ada.Fill(ds); conn.Close(); OleDbConnection myConnection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\BbConsolida.accdb"); myConnection.Open(); string queryString = "SELECT * into RelatorioSAP from [" + nomePlanilha + "$]"; OleDbDataAdapter adapter = new OleDbDataAdapter(queryString, myConnection); System.Data.DataTable dtAccess = new System.Data.DataTable(); System.Data.DataTable dtCSV = new System.Data.DataTable(); dtCSV = ds.Tables[0]; foreach (DataRow dtRow in dtCSV.Rows) { using (OleDbCommand cmd = myConnection.CreateCommand()) { cmd.CommandText = "INSERT INTO RelatorioSAP" + "(Nome,Hours, ShortText, Categoria, Data,WBS_element) " + "VALUES(@Nome,@Hours, @ShortText, @Categoria, @Data, @WBS_element)"; cmd.Parameters.AddRange(new OleDbParameter[] { new OleDbParameter("@Nome" , dtRow[1]), new OleDbParameter("@Hours" , dtRow[5]), new OleDbParameter("@ShortText" , dtRow[8]), new OleDbParameter("@Categoria" , dtRow[11]), new OleDbParameter("@Data" , dtRow[2]), new OleDbParameter("@WBS_element", dtRow[6]) }); cmd.ExecuteNonQuery(); } } myConnection.Close(); MessageBox.Show("Tabela Importada","Aviso"); } else { MessageBox.Show("Informe o diretorio e o nome da da planilha.", "Aviso", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning); } } catch (Exception ex) { MessageBox.Show(ex.Message); ; }
Respostas
-
Olá! Não testei aqui, mas imagino que seja algo do tipo a seguir...
ProgressBar1.Maximum = dtCSV.Rows.Count;
ProgressBar1.Value = 0;
foreach (DataRow dtRow in dtCSV.Rows)
{
using (OleDbCommand cmd = myConnection.CreateCommand())
{
cmd.CommandText =
"INSERT INTO RelatorioSAP" +
"(Nome,Hours, ShortText, Categoria, Data,WBS_element) " +
"VALUES(@Nome,@Hours, @ShortText, @Categoria, @Data, @WBS_element)";
cmd.Parameters.AddRange(new OleDbParameter[]
{
new OleDbParameter("@Nome" , dtRow[1]),
new OleDbParameter("@Hours" , dtRow[5]),
new OleDbParameter("@ShortText" , dtRow[8]),
new OleDbParameter("@Categoria" , dtRow[11]),
new OleDbParameter("@Data" , dtRow[2]),
new OleDbParameter("@WBS_element", dtRow[6])
});
cmd.ExecuteNonQuery();ProgressBar1.Value++;
ProgressBar1.Refresh(); // Forçar o redesenhamento do progressbar...
}
}Matheus
- Sugerido como Resposta Matheus André Riboli quinta-feira, 22 de agosto de 2013 19:31
- Marcado como Resposta Guilherme Gamboa segunda-feira, 26 de agosto de 2013 19:25
- Não Marcado como Resposta Guilherme Gamboa segunda-feira, 26 de agosto de 2013 19:26
- Marcado como Resposta Guilherme Gamboa segunda-feira, 26 de agosto de 2013 19:26
Todas as Respostas
-
Olá! Não testei aqui, mas imagino que seja algo do tipo a seguir...
ProgressBar1.Maximum = dtCSV.Rows.Count;
ProgressBar1.Value = 0;
foreach (DataRow dtRow in dtCSV.Rows)
{
using (OleDbCommand cmd = myConnection.CreateCommand())
{
cmd.CommandText =
"INSERT INTO RelatorioSAP" +
"(Nome,Hours, ShortText, Categoria, Data,WBS_element) " +
"VALUES(@Nome,@Hours, @ShortText, @Categoria, @Data, @WBS_element)";
cmd.Parameters.AddRange(new OleDbParameter[]
{
new OleDbParameter("@Nome" , dtRow[1]),
new OleDbParameter("@Hours" , dtRow[5]),
new OleDbParameter("@ShortText" , dtRow[8]),
new OleDbParameter("@Categoria" , dtRow[11]),
new OleDbParameter("@Data" , dtRow[2]),
new OleDbParameter("@WBS_element", dtRow[6])
});
cmd.ExecuteNonQuery();ProgressBar1.Value++;
ProgressBar1.Refresh(); // Forçar o redesenhamento do progressbar...
}
}Matheus
- Sugerido como Resposta Matheus André Riboli quinta-feira, 22 de agosto de 2013 19:31
- Marcado como Resposta Guilherme Gamboa segunda-feira, 26 de agosto de 2013 19:25
- Não Marcado como Resposta Guilherme Gamboa segunda-feira, 26 de agosto de 2013 19:26
- Marcado como Resposta Guilherme Gamboa segunda-feira, 26 de agosto de 2013 19:26
-