Пример #1
0
        /// <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;
        }
Пример #2
0
        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;
        }
Пример #3
0
        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;
        }
Пример #4
0
        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;
        }
Пример #5
0
        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;
            }
        }
Пример #6
0
        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;
        }