116 messaggi dal 31 maggio 2008
Ciao a tutti vi posto il codice perche questo codice funziona ma per un centinaio di righe il problema è quando inizio ad avere sopra 500 righe nel db per copiarle in excel ci mette una vita come posso fare a velocizzare?

try
{
// Start a new workbook in Excel.
xlApp = new Excel.Application();
xlWorkBook = xlApp.Workbooks.Add(misValue);
xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
SqlCommand comd;
SqlDataReader r;

List<string> nomiTabelle = new List<string>();
//nomiTabelle.Add("wcatalogue");
//nomiTabelle.Add("wfamiglie");
nomiTabelle.Add("wtranslations");

//using (TransactionScope ts = new TransactionScope())
//{

string excelConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Book1.xls;ExtendedProperties=""Excel 8.0;HDR=YES;""";

System.Data.OleDb.OleDbConnection oleDbConnection = new System.Data.OleDb.OleDbConnection(excelConnectionString);

string strConnectionString = ConfigurationSettings.AppSettings["ConnectionString"];
SqlConnection conn = new SqlConnection(strConnectionString);

conn.Open();

if (nomiTabelle.Count > 0)
{
foreach (string tab in nomiTabelle)
{
comd = new SqlCommand("select * from " + tab, conn);

r = comd.ExecuteReader();
int columnCount = r.FieldCount;
int rowCounter = 2;
range = xlWorkSheet.get_Range("A1", misValue);

Excel.Worksheet worksheet = (Excel.Worksheet)xlWorkBook.Sheets.Add(misValue, misValue, 1, Excel.XlSheetType.xlWorksheet);
worksheet.Name = tab;

for (int n = 0; n < columnCount; n++)
{
createHeaders(worksheet, 1, n + 1, r.GetName(n));
}

while (r.Read())
{
for (int n = 0; n < columnCount; n++)
{
addData(worksheet, rowCounter, n + 1, r[r.GetName(n)].ToString());
}
rowCounter++;
}
r.Close();
}
}

else
MessageBox.Show("Devi selezionare una tabella.");

conn.Close();
// ts.Complete();
//}
Microsoft.Office.Interop.Excel.Sheets excelSheets;
excelSheets = xlWorkBook.Worksheets;
foreach (Microsoft.Office.Interop.Excel.Worksheet xlWorkSheet1 in excelSheets)
{
if (xlWorkSheet1.Name == "Foglio1" || xlWorkSheet1.Name == "Foglio2" || xlWorkSheet1.Name == "Foglio3")
{
xlWorkSheet1.Delete();
}
}
oleDbConnection.Close();
SaveWorkbook();
//xlApp.Visible = true;

}
catch (Exception ex) { MessageBox.Show("Error : " + ex.Message); }
1.976 messaggi dal 27 luglio 2005
Contributi
salve,
corsaronero wrote:
Ciao a tutti vi posto il codice perche questo codice funziona ma per un centinaio di righe il problema è quando inizio ad avere sopra 500 righe nel db per copiarle in excel ci mette una vita come posso fare a velocizzare?
.....

prova a vedere se le soluzioni del workbench di Phil Phactor (http://www.simple-talk.com/sql/t-sql-programming/sql-server-excel-workbench/) eseguito completamente lato server possono aiutarti.. il problema e' pero' che... "sono eseguite lato server", quindi su quella macchina, mentre il tuo codice e' completamente client (sulla macchina utente)..
saluti

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.