Exemplo n.º 1
0
        static void Main()
        {
            String strExePath = System.Reflection.Assembly.GetExecutingAssembly().GetModules()[0].FullyQualifiedName;

            ExeDir = strExePath.Substring(0, strExePath.LastIndexOf('\\') + 1);


            //ContractSelector.LoadGraphicsResources();
            //ContractSelector.SetCoordinates();



            // ------------------ start: XML ------------------
            if (System.IO.File.Exists(Program.ExeDir + "BridgeNote.xml") == false)
            {
                MessageBox.Show("Не найден файл BridgeNote.xml!", "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                return;
            }
            String            strDBPath        = "";
            String            strTempDir       = "";
            String            strDBPath_final  = "";
            String            strTempDir_final = "";
            bool              absDBPath        = true;
            bool              absTempDir       = true;
            bool              useTempDir       = false;
            XmlReaderSettings xml_settings     = new XmlReaderSettings();

            xml_settings.ConformanceLevel = ConformanceLevel.Fragment;
            xml_settings.IgnoreWhitespace = true;
            xml_settings.IgnoreComments   = true;
            XmlParserContext xml_context = new XmlParserContext(null, null, null, XmlSpace.Default, System.Text.Encoding.Default);
            XmlReader        xml_reader  = null;

            try
            {
                xml_reader = XmlReader.Create(Program.ExeDir + "BridgeNote.xml", xml_settings, xml_context);
                xml_reader.Read();
                xml_reader.ReadStartElement("Settings");
                xml_reader.ReadStartElement("Database");
                if (xml_reader.IsStartElement("File"))
                {
                    strDBPath = xml_reader.GetAttribute("path");
                    if (strDBPath == null || strDBPath.Length == 0)
                    {
                        xml_reader.Close();
                        MessageBox.Show("Не указан путь к файлу БД!", "BridgeNote.xml", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                        return;
                    }

                    try
                    {
                        absDBPath = bool.Parse(xml_reader.GetAttribute("absolute"));
                    }
                    catch (Exception e)
                    {
                        xml_reader.Close();
                        MessageBox.Show("Ошибка в Settings.Database.File.absolute:\n" + e.Message, "BridgeNote.xml", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                        return;
                    }
                }
                else
                {
                    xml_reader.Close();
                    MessageBox.Show("Не найден тег File!", "BridgeNote.xml", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                    return;
                }
                xml_reader.Skip();

                if (xml_reader.IsStartElement("TempDir"))
                {
                    try
                    {
                        useTempDir = bool.Parse(xml_reader.GetAttribute("use"));
                    }
                    catch (Exception e)
                    {
                        xml_reader.Close();
                        MessageBox.Show("Ошибка в Settings.Database.TempDir.use:\n" + e.Message, "BridgeNote.xml", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                        return;
                    }

                    try
                    {
                        absTempDir = bool.Parse(xml_reader.GetAttribute("absolute"));
                    }
                    catch (Exception e)
                    {
                        xml_reader.Close();
                        MessageBox.Show("Ошибка в Settings.Database.TempDir.absolute:\n" + e.Message, "BridgeNote.xml", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                        return;
                    }

                    strTempDir = xml_reader.GetAttribute("path");
                    if (useTempDir && (strTempDir == null || absTempDir && strTempDir.Length == 0))
                    {
                        xml_reader.Close();
                        MessageBox.Show("Не указана временная папка для БД!", "BridgeNote.xml", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                        return;
                    }
                }
                else
                {
                    xml_reader.Close();
                    MessageBox.Show("Не найден тег TempDir!", "BridgeNote.xml", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                    return;
                }
                xml_reader.Skip();
                xml_reader.ReadEndElement();
                xml_reader.ReadEndElement();
            }
            catch (XmlException e)
            {
                if (xml_reader != null)
                {
                    xml_reader.Close();
                }
                MessageBox.Show(e.Message, "BridgeNote.xml", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                return;
            }

            xml_reader.Close();
            // ------------------ end: XML ------------------



            strDBPath_final  = (absDBPath ? strDBPath : (Program.ExeDir + strDBPath));
            strTempDir_final = (useTempDir ? (absTempDir ? strTempDir : (Program.ExeDir + strTempDir)) : "");

            // Проверить временную папку
            if (useTempDir && System.IO.Directory.Exists(strTempDir_final) == false)
            {
                MessageBox.Show("Неправильно указана временная папка для БД!", "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                return;
            }

            // Инициализировать строку подключения
            DB.InitializeConnectionString(strDBPath_final, strTempDir_final);

            // Создать БД, если нужно
            if (System.IO.File.Exists(strDBPath_final) == false)
            {
                if (MessageBox.Show("База данных не найдена!\nСоздать новую БД и проинициализировать ее?", "db create", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == DialogResult.Yes)
                {
                    if (DB.CreateDatabase(strDBPath_final) == false)
                    {
                        return;
                    }
                    DB.CreateTables(false);
                    DB.Disconnect();
                }
                else
                {
                    return;
                }
            }

            // Подключиться к базе данных
            DB.ReConnect();

            // Следить за подключением
            DB.sqlConnection.StateChange += new StateChangeEventHandler(sqlConnection_StateChange);


            // Запуск главной формы, большой try-catch если DEBUG
#if DEBUG
            try
            {
                Application.Run(MainForm = new Form1());
            }
            catch (Exception e)
            {
                System.IO.StreamWriter sw = System.IO.File.AppendText(Program.ExeDir + "debug.txt");
                sw.Write(DateTime.Now.ToString() + "\n");
                sw.Write(e.Message + "\n");
                sw.Write(e.StackTrace + "\n");
                if (e.GetType() == typeof(System.Data.SqlServerCe.SqlCeException))
                {
                    System.Data.SqlServerCe.SqlCeException ex = (System.Data.SqlServerCe.SqlCeException)e;
                    sw.Write("[SQL] NativeError = " + ex.NativeError + "\n");
                    for (int i = 0; i < ex.Errors.Count; i++)
                    {
                        sw.Write("[SQL_err_" + i + "] " + ex.Errors[i].Message + " * " + ex.Errors[i].NativeError + "\n");
                    }
                }
                sw.Write("-------------" + "\n");
                sw.Close();
                throw;
            }
#else
            Application.Run(MainForm = new Form1());
#endif
        }