/// <summary> /// Metode for imprtering av Elguide transaksjoner fra Program 137 /// </summary> /// <param name="bw">Backgroundworker</param> /// <param name="unattended">Vil ikke bruke dialogbokser ved unattended kjøring</param> /// <returns>Success or not</returns> public bool DoImportTransactions(BackgroundWorker bw, bool unattended) { if (bw == null) throw new ArgumentNullException("Backgroundworker er null!"); if (csvFilesToImport.Count == 0) csvFilesToImport.Add(main.appConfig.csvElguideExportFolder + @"\irank.csv"); this.returnCode = 0; this.importReadErrors = 0; //this.importTimerLastValue = DateTime.MinValue; //this.importTimerLastValueChanged = DateTime.MinValue; csvImport[] csvTransAll = new csvImport[] { }; main.processing.SetValue = 0; try { // Les inn alle CSV filene til csvTransAll.. foreach (String file in csvFilesToImport) { if (bw.CancellationPending) { this.returnCode = 2; return true; } if (!File.Exists(file)) { Log.n("Finner ikke fil " + file, Color.Red); if (unattended) { if (MessageBox.Show("Finner ikke fil " + file + "\n\nKontroller import lokasjon!", "KGSA - Finner ikke fil", MessageBoxButtons.OKCancel, MessageBoxIcon.Error) == System.Windows.Forms.DialogResult.Cancel) continue; } else this.returnCode = 9; } FileInfo f = new FileInfo(file); decimal s1 = f.Length; this.csvSizeGuess = Math.Round(s1 / numberScale, 2); Log.n("Leser CSV fra Elguide '" + file + "'.."); var csvTrans = ReadCsv(file, bw, unattended); if (csvTrans == null) { this.returnCode = 9; return false; } int oldLength = csvTransAll.Length; Array.Resize<csvImport>(ref csvTransAll, oldLength + csvTrans.Length); Array.Copy(csvTrans, 0, csvTransAll, oldLength, csvTrans.Length); Log.d("Lest ferdig '" + file + "' - Totalt: " + csvTrans.Length); } if (bw.CancellationPending) { this.returnCode = 2; return false; } if (csvTransAll.Length < 25) { Log.n("Import: Ingen eller for få transaksjoner funnet!" + "Kontroller om eksportering er korrekt eller sjekk innstillinger.", Color.Red); { this.returnCode = 4; return false; } } int csvLengde = csvTransAll.Length; Log.n("Prosesserer " + csvLengde.ToString("#,##0") + " transaksjoner.."); main.processing.SetText = "Prosesserer " + csvLengde.ToString("#,##0") + " transaksjoner.."; main.processing.SetProgressStyle = ProgressBarStyle.Marquee; DateTime dtFirst = DateTime.MaxValue; DateTime dtLast = DateTime.MinValue; int valider = 0; List<string> avd = new List<string>(); // sjekk for først og siste dato, samt hvilke avdelinger den inneholder string csvAvdelinger = ""; for (int i = 0; i < csvLengde; i++) { if (bw.CancellationPending) { this.returnCode = 2; return false; } if (!csvAvdelinger.Contains(csvTransAll[i].Avd)) csvAvdelinger += csvTransAll[i].Avd.ToString() + ";"; DateTime dtTemp = DateTime.ParseExact(csvTransAll[i].Dato.ToString(), dateFormat, FormMain.norway); //DateTime dtTemp = Convert.ToDateTime(csvTransAll[i].Dato.ToString()); if (DateTime.Compare(dtTemp, dtFirst) < 0) dtFirst = dtTemp; if (DateTime.Compare(dtTemp, dtLast) > 0) dtLast = dtTemp; if (valider < 25) { if (csvTransAll[i].Kgm.StartsWith("2") || csvTransAll[i].Kgm.StartsWith("4") || csvTransAll[i].Kgm.StartsWith("5")) valider++; } } string[] arrayAvdelinger = csvAvdelinger.Split(';'); Log.d("Avdelinger funnet i fil (funnetAvdelinger): Antall: (" + arrayAvdelinger.Length + ") Innhold: " + csvAvdelinger); string sqlRemoveAvd = ""; if (main.appConfig.importSetting.Equals("FullFavoritt")) // vi skal bare importere favoritt avdelinger foreach (string arrayAvd in arrayAvdelinger) foreach (string avdel in FormMain.Favoritter) if (arrayAvd.Equals(avdel)) // Avdelingen finnes i csv OG som favoritt avdeling.. sqlRemoveAvd += " Avdeling = '" + arrayAvd + "' OR "; // legger til avdeling for sletting før import if (main.appConfig.importSetting.Equals("Full")) // vi skal importere ALLE avdelinger i CSV, derfor må vi slette alle avdelinger før import foreach (string arrayAvd in arrayAvdelinger) sqlRemoveAvd += " Avdeling = '" + arrayAvd + "' OR "; // legger til avdeling for sletting før import if (sqlRemoveAvd.Length > 3) // Fjen sist "OR" fra sql string for å gjøre den gyldig sqlRemoveAvd = sqlRemoveAvd.Remove(sqlRemoveAvd.Length - 3); Log.n("Import: CSV inneholder " + csvLengde + " transaksjoner, solgt mellom " + dtFirst.ToString("dddd d. MMMM yyyy", FormMain.norway) + " og " + dtLast.ToString("dddd d. MMMM yyyy", FormMain.norway) + ".", Color.Black, true); string strSqlDateFirst = dtFirst.ToString("yyy-MM-dd"); string strSqlDateLast = dtLast.ToString("yyy-MM-dd"); if (valider < 25) { Log.n("Import: Bare et begrenset antall transaksjoner var gyldig (" + valider + "), kan ikke fortsett. Eksporter transaksjoner på nytt!", Color.Red); { this.returnCode = 1; return false; } } bool addPrize = false; Dictionary<string, decimal> dictPrizes = new Dictionary<string, decimal>(); if (main.appConfig.dbObsoleteUpdated != FormMain.rangeMin) addPrize = true; var table = new DataTable(); table.Columns.Add("Selgerkode", typeof(string)); table.Columns.Add("Varegruppe", typeof(Int16)); table.Columns.Add("Varekode", typeof(string)); table.Columns.Add("Dato", typeof(DateTime)); table.Columns.Add("Antall", typeof(int)); table.Columns.Add("Btokr", typeof(decimal)); table.Columns.Add("Avdeling", typeof(Int16)); table.Columns.Add("Salgspris", typeof(decimal)); table.Columns.Add("Bilagsnr", typeof(int)); table.Columns.Add("Mva", typeof(decimal)); main.processing.SetText = "Prosesserer " + csvLengde.ToString("#,##0") + " transaksjoner.. (Konverterer)"; for (int i = 0; i < csvLengde; i++) { if (bw.CancellationPending) { this.returnCode = 2; return false; } if (ImportThisLine(csvTransAll[i])) { int varegruppe = 0, avdeling = 0, bilagsnr = 0; int.TryParse(csvTransAll[i].Kgm.Substring(0, 3), out varegruppe); int.TryParse(csvTransAll[i].Avd, out avdeling); int.TryParse(csvTransAll[i].BilagsNr, out bilagsnr); DataRow dtRow = table.NewRow(); dtRow[0] = csvTransAll[i].Sk; // Selgerkode dtRow[1] = varegruppe; // varegruppe dtRow[2] = csvTransAll[i].Varenummer; // varekode dtRow[3] = csvTransAll[i].Dato; dtRow[4] = csvTransAll[i].Antall; dtRow[5] = csvTransAll[i].Btokr; dtRow[6] = avdeling; dtRow[7] = csvTransAll[i].Salgspris; dtRow[8] = bilagsnr; if (csvTransAll[i].Mva == 0) dtRow[9] = 1; else dtRow[9] = (csvTransAll[i].Mva / 100) + 1; // Lagre salgsprisen.. if (addPrize) if (csvTransAll[i].Rab == 0 && csvTransAll[i].Antall > 0 && csvTransAll[i].Dato.AddDays(main.appConfig.storeMaxAgePrizes) > main.appConfig.dbObsoleteUpdated) if (!dictPrizes.ContainsKey(csvTransAll[i].Varenummer)) dictPrizes.Add(csvTransAll[i].Varenummer, csvTransAll[i].Salgspris); // sjekk lengde på fields før vi legger dem til.. if (dtRow[0].ToString().Length < 11 && dtRow[2].ToString().Length < 25) table.Rows.Add(dtRow); else { importReadErrors++; Log.n("Import: Format feil ved linje " + i + ": Felt var for lange for databasen, hopper over.", Color.Orange); Log.d("Linje: " + dtRow[0] + ";" + dtRow[1] + ";" + dtRow[2] + ";" + dtRow[3] + ";" + dtRow[4] + ";" + dtRow[5] + ";" + dtRow[6] + ";" + dtRow[7] + ";" + dtRow[8] + ";" + dtRow[9]); } } } if (addPrize && dictPrizes.Count > 0) { Log.n("Lager: Oppdaterer vareinfo med priser fra " + dictPrizes.Count + " forskjellige varer..", null, true); UpdatePrizes(dictPrizes); Log.n("Lager: Ferdig med oppdatering av priser", null, true); } // På ditte tidspunktet kan ikke prosessen avbrytes.. main.processing.SetText = "Sletter gamle transaksjoner.."; main.processing.SupportsCancelation = false; if (table.Rows.Count >= 25) { Log.n("Import: Klar til å lagre transaksjoner. Sletter overlappende transaksjoner nå.."); try { // Slett overlappende transaksjoner vi har i databasen fra før.. string sqlRemove = "DELETE FROM tblSalg WHERE (Dato >= '" + strSqlDateFirst + "') AND (Dato <= '" + strSqlDateLast + "')"; if (!main.appConfig.importSetting.Equals("Normal")) sqlRemove += " AND (" + sqlRemoveAvd + ")"; SqlCeCommand command = new SqlCeCommand(sqlRemove, main.connection); var result = command.ExecuteNonQuery(); Log.d("Import: Slettet " + result + " transaksjoner fra databasen."); } catch (Exception ex) { Log.Unhandled(ex); } } Log.n("Import: Lagrer " + table.Rows.Count.ToString("#,##0") + " transaksjoner.."); main.processing.SetText = "Lagrer " + table.Rows.Count.ToString("#,##0") + " transaksjoner.. (kan ta litt tid)"; TimeWatch timewatch = new TimeWatch(); timewatch.Start(); // Send data til SQL server og avslutt forbindelsen main.database.DoBulkCopy(table, "tblSalg"); Log.n("Import: Lagring av " + table.Rows.Count.ToString("#,##0") + " transaksjoner tok " + timewatch.Stop() + " sekunder.", Color.Black, true); main.processing.SupportsCancelation = true; // nuller ut database periode fra-til, tvinger oppdatering ved reload senere main.appConfig.dbFrom = DateTime.MinValue; main.appConfig.dbTo = DateTime.MinValue; Log.n("Import: Importering ferdig (Tid: " + timewatch.Stop() + ")"); main.processing.SetText = "Fullført importering av transaksjoner! Vent litt.."; main.processing.SetProgressStyle = ProgressBarStyle.Continuous; main.processing.SetValue = 90; this.importCount = table.Rows.Count; this.returnCode = 0; return true; } catch (Exception ex) { FormError errorMsg = new FormError("Sorry! Kritisk uhåndtert feil oppstod under importering.", ex, "CSV filer: " + String.Join("\n", csvFilesToImport.ToArray())); errorMsg.ShowDialog(main); } this.returnCode = -1; return false; }
private bool MatchEanToDatabase(DataTable tableEan) { try { DataView view = tableEan.DefaultView; view.Sort = TableEan.KEY_PRODUCT_TEXT + " ASC"; tableEan = view.ToTable(); List<string> notFoundList = new List<string> { }; int countEans = tableEan.Rows.Count; int countProductCodes = 0; int countFound = 0; int countNotFound = 0; string sql = "SELECT " + TableVareinfo.KEY_VAREKODE + ", SUBSTRING(" + TableVareinfo.KEY_TEKST + ", 1, 29) AS " + TableVareinfo.KEY_TEKST + " FROM " + TableVareinfo.TABLE_NAME; main.processing.SetText = "Henter varekoder fra databasen.."; using (DataTable tableProducts = main.database.GetSqlDataTable(sql)) { if (tableProducts == null) throw new NullReferenceException("DataTable tableInfo retrieved from database returned NULL"); countProductCodes = tableProducts.Rows.Count; if (countProductCodes == 0) { Log.e("Ingen varer funnet i databasen. Importer lager først"); return false; } Log.d("Started matching new EAN codes to product database.."); TimeWatch time = new TimeWatch(); time.Start(); for (int i = 0; i < countEans; i++) { if (main.worker.CancellationPending) return false; if (i % 114 == 0) { main.worker.ReportProgress(i, new StatusProgress(countProductCodes, null, 30, 60)); main.processing.SetText = "Søker i produkt databasen..: " + string.Format("{0:n0}", i) + " / " + string.Format("{0:n0}", countEans); } DataRow[] result = tableProducts.Select("Varetekst = '" + tableEan.Rows[i][TableEan.INDEX_PRODUCT_TEXT].ToString().Replace("'", "''") + "'"); if (result.Count() > 0) { tableEan.Rows[i][TableEan.INDEX_PRODUCT_CODE] = result[0][0]; countFound++; } else { if (notFoundList.Count < 25) notFoundList.Add(countNotFound + ";" + tableEan.Rows[i][TableEan.INDEX_BARCODE] + ";" + tableEan.Rows[i][TableEan.INDEX_PRODUCT_TEXT]); countNotFound++; } } Log.d("Matching search took " + time.show + " seconds"); if (main.appConfig.debug) { Log.d(string.Format("{0:n0}", countFound) + " new rows with matching ProductCodes"); Log.d(string.Format("{0:n0}", countNotFound) + " rows with no ProductCodes"); Log.d("-------------- NOT FOUND ------------------ START"); foreach (string line in notFoundList) Log.d(line); Log.d("-------------- NOT FOUND ------------------ END"); } } if (countFound > 0) { Log.n("Lagrer endringer i EAN databsen.. (" + string.Format("{0:n0}", countEans) + " oppføringer)"); main.processing.SupportsCancelation = false; main.processing.SetText = "Lagrer endringer i EAN databasen.. (" + string.Format("{0:n0}", countEans) + " oppføringer)"; main.database.tableEan.Reset(); main.database.DoBulkCopy(tableEan, TableEan.TABLE_NAME); Log.n("Fullført EAN importering: EAN databasen oppdatert med " + string.Format("{0:n0}", countFound) + " nye varekoder", Color.Green); } else Log.n("Fullført EAN importering: Ingen nye EAN koder funnet etter å ha søkt igjennom " + string.Format("{0:n0}", countEans) + " koder", Color.Blue); return true; } catch (Exception ex) { Log.Unhandled(ex); Log.e("Kritisk feil i MatchEanToDatabase: Importering avbrutt. Se logg for detaljer."); } return false; }
private bool ImportEanCodes(List<string> eanfiles) { try { DataTable tableFile = new DataTable(); tableFile.Columns.Add(TableEan.KEY_BARCODE, typeof(string)); tableFile.Columns.Add(TableEan.KEY_PRODUCT_TEXT, typeof(string)); foreach (string file in eanfiles) { if (main.worker != null && main.worker.CancellationPending) return false; if (!File.Exists(file) || string.IsNullOrEmpty(file)) throw new IOException("Fant ikke fil eller ble nektet tilgang: " + file); Log.n("Leser bærbar telle-penn fil \"" + file + "\".."); using (StreamReader fileReader = new StreamReader(file, System.Text.Encoding.GetEncoding(865))) { string fileLine; while ((fileLine = fileReader.ReadLine()) != null) { if (main.worker != null && main.worker.CancellationPending) return false; string line = fileLine.Trim(); if (line.Length > 13) { if (Regex.IsMatch(line.Substring(0, 13), @"^\d+$")) { string tekst = line.Substring(13, line.Length - 13); DataRow dtRow = tableFile.NewRow(); dtRow[0] = line.Substring(0, 13); if (tekst.Length > 29) dtRow[1] = line.Substring(13, 29).Trim(); else dtRow[1] = line.Substring(13, line.Length - 13).Trim(); tableFile.Rows.Add(dtRow); } } } fileReader.Close(); } } int countFile = tableFile.Rows.Count; if (countFile == 0) { Log.e("Fant ingen EAN koder fra fil(er)"); return false; } Log.d(string.Format("{0:n0}", countFile) + " rows read from file(s)"); Log.n("Henter EAN koder fra databasen.."); main.processing.SetText = "Henter EAN koder fra databasen.."; DataTable tableEan = main.database.tableEan.GetAllRows(); if (tableEan == null) throw new NullReferenceException("DataTable tableEan retrieved from database returned null"); int countEan = tableEan.Rows.Count; Log.d(string.Format("{0:n0}", countEan) + " EAN codes read from database"); Log.n("Behandler EAN databasen.."); main.processing.SetText = "Behandler EAN databasen.."; TimeWatch time = new TimeWatch(); time.Start(); for (int i = 0; i < countFile; i++) { if (main.worker.CancellationPending) return false; if (i % 134 == 0) { main.worker.ReportProgress(i, new StatusProgress(countFile, null, 0, 30)); main.processing.SetText = "Leser EAN koder..: " + string.Format("{0:n0}", i) + " / " + string.Format("{0:n0}", countFile); } DataRow[] result = tableEan.Select(TableEan.KEY_BARCODE + " = '" + tableFile.Rows[i][TableEan.KEY_BARCODE] + "'"); if (result.Count() == 0) { DataRow dtRow = tableEan.NewRow(); dtRow[TableEan.INDEX_BARCODE] = tableFile.Rows[i][0]; dtRow[TableEan.INDEX_PRODUCT_TEXT] = tableFile.Rows[i][1]; dtRow[TableEan.INDEX_PRODUCT_CODE] = ""; tableEan.Rows.Add(dtRow); } else if (result.Count() >= 1) { for (int d = 0; d < result.Count(); d++) { if (!result[d][TableEan.INDEX_PRODUCT_TEXT].Equals(tableFile.Rows[i][1])) { Log.d("Updating known EAN (" + result[d][TableEan.INDEX_BARCODE] + ") with new data.."); result[0][TableEan.INDEX_BARCODE] = tableFile.Rows[i][0]; result[0][TableEan.INDEX_PRODUCT_TEXT] = tableFile.Rows[i][1]; result[0][TableEan.INDEX_PRODUCT_CODE] = ""; result[0].EndEdit(); tableEan.AcceptChanges(); } } } else Log.e("Error while searching for EAN (" + tableFile.Rows[i][TableEan.KEY_BARCODE] + ") - This should not happen!"); } int countAfter = tableEan.Rows.Count; int countNew = countAfter - countEan; Log.d("Searched " + string.Format("{0:n0}", countFile) + " EAN codes in " + time.show + " seconds"); if (countNew == 0) { Log.n("Fullført EAN importering: Ingen nye EAN koder funnet", Color.Blue); return true; } else { Log.n("Fant " + string.Format("{0:n0}", countNew) + " EAN koder. Starter søk i databasen etter varekoder.."); return MatchEanToDatabase(tableEan); } } catch (Exception ex) { Log.Unhandled(ex); Log.e("Kritisk feil i ImportEanCodes: Importering avbrutt. Se logg for detaljer."); } return false; }
public bool StartProcessingPrisguide(BackgroundWorker bw) { try { Log.n("Laster ned populære produkter side fra prisguide.no.."); main.processing.SetText = "Laster ned liste fra Prisguide.no.."; TimeWatch tw = new TimeWatch(); tw.Start(); string data = FetchPage(urlPrisguide + main.appConfig.onlinePrisguidePagesToImport); //string data = DownloadDocument(urlPrisguide + main.appConfig.onlinePrisguidePagesToImport); if (data == null) { Log.n("Error: Nedlastet data er NULL!", Color.Red); return false; } Log.n("Nedlasting ferdig. Prosesserer.."); HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); doc.LoadHtml(data); HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("//div[@class='product-info']/a"); if (nodes == null || nodes.Count == 0) { Log.n("Fant ingen produkter på siden: " + urlPrisguide + main.appConfig.onlinePrisguidePagesToImport + " Prøv igjen senere?", Color.Red); return false; } List<string> productUrls = new List<string>(); foreach (HtmlNode link in nodes) { HtmlAttribute att = link.Attributes["href"]; productUrls.Add(att.Value); } Log.d("Produktsider funnet: " + productUrls.Count); List<PrisguideProduct> prisguideProducts = new List<PrisguideProduct>(); main.processing.SetText = "Henter ut produktdata fra produktsider.."; Log.n("Henter ut produktdata fra Prisguide.no produktsider.."); prisguideProducts = ProcessProductUrls(productUrls, bw); if (prisguideProducts == null || prisguideProducts.Count == 0) { Log.n("Ingen produkter funnet. Prisguide er nede eller vi har problemer med internett forbindelsen. Prøv igjen senere!", Color.Red); return false; } Log.d("Produkter funnet på prisguide.no: " + prisguideProducts.Count); DataTable table = main.database.tablePrisguide.GetDataTable(); DataTable tableStock = main.database.tableUkurans.GetProductCodesInStock(main.appConfig.Avdeling); DateTime dateNow = DateTime.Now; foreach (PrisguideProduct product in prisguideProducts) { if (bw != null) if (bw.CancellationPending) return false; if (product.productCodes.Count > 0) { foreach (ProductCode productCode in product.productCodes) { DataRow dtRow = table.NewRow(); dtRow[0] = product.prisguideId; dtRow[1] = product.status; dtRow[2] = dateNow; dtRow[3] = main.appConfig.Avdeling; dtRow[4] = product.position; dtRow[5] = productCode.productCode; dtRow[6] = 0; if (tableStock != null && tableStock.Rows.Count > 0) { foreach (DataRow dtStockRow in tableStock.Rows) { if (dtStockRow["Varekode"].Equals(productCode.productCode)) { dtRow[6] = Convert.ToInt32(dtStockRow["Antall"]); break; } } } dtRow[7] = productCode.productInternetPrize; dtRow[8] = productCode.productInternetStock; table.Rows.Add(dtRow); } } else { DataRow dtRow = table.NewRow(); dtRow[0] = product.prisguideId; dtRow[1] = product.status; dtRow[2] = dateNow; dtRow[3] = main.appConfig.Avdeling; dtRow[4] = product.position; dtRow[5] = ""; dtRow[6] = 0; dtRow[7] = 0; dtRow[8] = 0; table.Rows.Add(dtRow); } } if (bw != null) if (bw.CancellationPending) return false; main.processing.SupportsCancelation = false; Log.d("Sletter eksisterende oppføringer for i dag fra prisguide tabellen.."); main.database.tablePrisguide.RemoveDate(DateTime.Now); Log.d("Lagrer prisguide produkter i databasen.."); main.database.DoBulkCopy(table, "tblPrisguide"); Log.n("Ferdig uten feil oppdaget (Tid: " + tw.Stop() + ")", Color.Green); return true; } catch (Exception ex) { Log.Unhandled(ex); Log.n("Kritis feil under prosessering av prisguide produkter: " + ex.Message, Color.Red); } return false; }
public DataTable GetSqlDataTable(string sql) { try { if (main.connection.State != ConnectionState.Open) { Log.n("Database: Forbindelsen til databasen er lukket. Vent til forbindelsen er gjenopprettet eller start om programmet.", Color.Red); return null; } string hash = sql.GetHashCode().ToString(); TimeWatch tw = new TimeWatch(); tw.Start(); Log.DebugSql("SQL Reader (" + hash + "): " + sql); if (main.appConfig.useSqlCache) { if (hash.Length > 1 && sql.Length > 5) { for (int i = 0; i < sqlCache.Tables.Count; i++) { if (sqlCache.Tables[i].TableName.Equals(hash)) { Log.DebugSql("SQL Reader (" + hash + "): Hentet MELLOMLAGRET tabell med " + sqlCache.Tables[i].Rows.Count + " linjer etter " + tw.Stop() + " sekunder."); return sqlCache.Tables[i]; } } } } SqlCeCommand command = new SqlCeCommand(sql, main.connection); SqlCeDataReader reader = command.ExecuteReader(); DataTable table = new DataTable(); table.Load(reader); reader.Dispose(); command.Dispose(); if (main.appConfig.useSqlCache) { bool found = false; if (hash.Length > 1 && sql.Length > 5 && table.Rows.Count > 0) { for (int i = 0; i < sqlCache.Tables.Count; i++) { if (sqlCache.Tables[i].TableName.Equals(hash)) found = true; } if (!found) { table.TableName = hash; sqlCache.Tables.Add(table.Copy()); } } } Log.DebugSql("SQL Reader (" + hash + "): Hentet tabell med " + table.Rows.Count + " linjer etter " + tw.Stop() + " sekunder."); return table; } catch (SqlCeException ex) { FormError errorMsg = new FormError("SQLCE uhåndtert unntak oppstod ved main.database.GetSqlDataTable()", ex); errorMsg.ShowDialog(); return null; } catch (Exception ex) { FormError errorMsg = new FormError("Generelt uhåndtert unntak oppstod ved main.database.GetSqlDataTable()", ex); errorMsg.ShowDialog(); return null; } }
public int GetCount(string sql) { try { if (main.connection.State != ConnectionState.Open) { Log.e("Database: Forbindelsen til databasen er lukket. Vent til forbindelsen er gjenopprettet eller start om programmet."); return 0; } TimeWatch tw = new TimeWatch(); tw.Start(); Log.DebugSql("SQL GetCount: " + sql); int count = 0; using (SqlCeCommand command = new SqlCeCommand(sql, main.connection)) { count = (Int32)command.ExecuteScalar(); } Log.DebugSql("SQL GetCount: Retrieved row count (" + count + ") after " + tw.Stop() + " seconds."); return count; } catch (SqlCeException ex) { FormError errorMsg = new FormError("SQLCE uhåndtert unntak oppstod ved main.database.GetCount(string sql)", ex); errorMsg.ShowDialog(); } catch (Exception ex) { FormError errorMsg = new FormError("Generelt uhåndtert unntak oppstod ved main.database.GetCount(string sql)", ex); errorMsg.ShowDialog(); } return 0; }