コード例 #1
0
        private void SongDBUpdate_UpdateDatabaseFile(string UpdateType)
        {
            Global.TimerStartTime = DateTime.Now;
            OleDbConnection conn = new OleDbConnection();

            conn = CommonFunc.OleDbOpenConn(Global.CrazyktvDatabaseFile, "");
            OleDbCommand SongDBVerUpdatecmd       = new OleDbCommand();
            OleDbCommand GodLiuColumnDropcmd      = new OleDbCommand();
            string       SongDBBackupFile         = "";
            string       SongDBVerUpdatecmdSqlStr = "";
            string       GodLiuColumnDropSqlStr   = "";
            bool         UpdateError = false;

            if (!Directory.Exists(Application.StartupPath + @"\SongMgr\Backup"))
            {
                Directory.CreateDirectory(Application.StartupPath + @"\SongMgr\Backup");
            }
            SongDBBackupFile = Application.StartupPath + @"\SongMgr\Backup\" + DateTime.Now.ToLongDateString() + "_CrazySong.mdb";
            File.Copy(Global.CrazyktvDatabaseFile, SongDBBackupFile, true);

            List <string> CrazyktvDBTableList = new List <string>(CommonFunc.GetOleDbTableList(Global.CrazyktvDatabaseFile, ""));

            // 移除 ktv_AllSinger 資料表
            if (CrazyktvDBTableList.IndexOf("ktv_AllSinger") >= 0)
            {
                try
                {
                    OleDbCommand[] cmds =
                    {
                        new OleDbCommand("drop table ktv_AllSinger", conn),
                    };

                    foreach (OleDbCommand cmd in cmds)
                    {
                        cmd.ExecuteNonQuery();
                    }
                }
                catch
                {
                    UpdateError = true;
                    this.BeginInvoke((Action) delegate()
                    {
                        SongMaintenance_DBVerTooltip_Label.Text = "移除 ktv_AllSinger 資料表失敗,已還原為原本的資料庫檔案。";
                    });
                }
            }

            // 移除 ktv_Version 資料表
            if (CrazyktvDBTableList.IndexOf("ktv_Version") >= 0)
            {
                try
                {
                    OleDbCommand[] cmds =
                    {
                        new OleDbCommand("drop table ktv_Version", conn),
                    };

                    foreach (OleDbCommand cmd in cmds)
                    {
                        cmd.ExecuteNonQuery();
                    }
                }
                catch
                {
                    UpdateError = true;
                    this.BeginInvoke((Action) delegate()
                    {
                        SongMaintenance_DBVerTooltip_Label.Text = "移除 ktv_Version 資料表失敗,已還原為原本的資料庫檔案。";
                    });
                }
            }

            if (!UpdateError)
            {
                DataTable dt = new DataTable();

                OleDbCommand[] Scmds =
                {
                    new OleDbCommand("select * from ktv_Song",      conn),
                    new OleDbCommand("select * from ktv_Singer",    conn),
                    new OleDbCommand("select * from ktv_Phonetics", conn),
                    new OleDbCommand("select * from ktv_Langauage", conn),
                };

                foreach (OleDbCommand cmd in Scmds)
                {
                    OleDbDataReader Reader = cmd.ExecuteReader();
                    if (dt.Rows.Count == 0)
                    {
                        dt = Reader.GetSchemaTable();
                    }
                    else
                    {
                        foreach (DataRow row in Reader.GetSchemaTable().Rows)
                        {
                            dt.ImportRow(row);
                        }
                    }
                    Reader.Close();
                }

                bool UpdateKtvSong      = false;
                bool UpdateKtvSinger    = false;
                bool UpdatePhonetics    = false;
                bool UpdateLangauage    = true;
                bool RemoveGodLiuColumn = false;

                List <string> GodLiuColumnlist = new List <string>();

                foreach (DataRow row in dt.AsEnumerable())
                {
                    switch (row["ColumnName"].ToString())
                    {
                    case "Song_SongName":
                        if (row["ColumnSize"].ToString() != "80")
                        {
                            UpdateKtvSong = true;
                        }
                        break;

                    case "Song_Singer":
                        if (row["ColumnSize"].ToString() != "60")
                        {
                            UpdateKtvSong = true;
                        }
                        break;

                    case "Song_Spell":
                        if (row["ColumnSize"].ToString() != "80")
                        {
                            UpdateKtvSong = true;
                        }
                        break;

                    case "Song_FileName":
                        if (row["ColumnSize"].ToString() != "255")
                        {
                            UpdateKtvSong = true;
                        }
                        break;

                    case "Song_SpellNum":
                        if (row["ColumnSize"].ToString() != "80")
                        {
                            UpdateKtvSong = true;
                        }
                        break;

                    case "Song_PenStyle":
                        if (row["ColumnSize"].ToString() != "80")
                        {
                            UpdateKtvSong = true;
                        }
                        break;

                    case "Singer_Name":
                    case "Singer_Spell":
                    case "Singer_SpellNum":
                    case "Singer_PenStyle":
                        if (row["ColumnSize"].ToString() != "60")
                        {
                            UpdateKtvSinger = true;
                        }
                        break;

                    case "PenStyle":
                        if (row["ColumnSize"].ToString() != "40")
                        {
                            UpdatePhonetics = true;
                        }
                        break;

                    case "Langauage_KeyWord":
                        UpdateLangauage = false;
                        break;

                    case "Song_SongNameFuzzy":
                    case "Song_SingerFuzzy":
                    case "Song_FuzzyVer":
                    case "DLspace":
                    case "Epasswd":
                    case "imgpath":
                    case "cashboxsongid":
                    case "cashboxdat":
                    case "holidaysongid":
                        RemoveGodLiuColumn = true;
                        GodLiuColumnlist.Add(row["ColumnName"].ToString());
                        break;
                    }
                }
                dt.Dispose();
                dt = null;

                string       UpdateSqlStr = "";
                OleDbCommand UpdateCmd    = new OleDbCommand();

                if (UpdateKtvSong)
                {
                    UpdateSqlStr = "select * into ktv_Song_temp from ktv_Song";
                    UpdateCmd    = new OleDbCommand(UpdateSqlStr, conn);
                    UpdateCmd.ExecuteNonQuery();

                    UpdateSqlStr = "delete * from ktv_Song";
                    UpdateCmd    = new OleDbCommand(UpdateSqlStr, conn);
                    UpdateCmd.ExecuteNonQuery();

                    OleDbCommand[] Updatecmds =
                    {
                        new OleDbCommand("alter table ktv_Song alter column Song_SongName TEXT(80) WITH COMPRESSION",  conn),
                        new OleDbCommand("alter table ktv_Song alter column Song_Singer TEXT(60) WITH COMPRESSION",    conn),
                        new OleDbCommand("alter table ktv_Song alter column Song_Spell TEXT(80) WITH COMPRESSION",     conn),
                        new OleDbCommand("alter table ktv_Song alter column Song_FileName TEXT(255) WITH COMPRESSION", conn),
                        new OleDbCommand("alter table ktv_Song alter column Song_SpellNum TEXT(80) WITH COMPRESSION",  conn),
                        new OleDbCommand("alter table ktv_Song alter column Song_PenStyle TEXT(80) WITH COMPRESSION",  conn)
                    };

                    try
                    {
                        foreach (OleDbCommand cmd in Updatecmds)
                        {
                            cmd.ExecuteNonQuery();
                        }

                        UpdateSqlStr = "insert into ktv_Song select * from ktv_Song_temp";
                        UpdateCmd    = new OleDbCommand(UpdateSqlStr, conn);
                        UpdateCmd.ExecuteNonQuery();

                        UpdateSqlStr = "drop table ktv_Song_temp";
                        UpdateCmd    = new OleDbCommand(UpdateSqlStr, conn);
                        UpdateCmd.ExecuteNonQuery();
                    }
                    catch
                    {
                        UpdateError = true;
                        this.BeginInvoke((Action) delegate()
                        {
                            SongMaintenance_DBVerTooltip_Label.Text = "更新歌曲資料表失敗,已還原為原本的資料庫檔案。";
                        });
                    }
                }

                if (UpdateKtvSinger)
                {
                    OleDbCommand[] Updatecmds =
                    {
                        new OleDbCommand("alter table ktv_Singer alter column Singer_Name TEXT(60) WITH COMPRESSION",     conn),
                        new OleDbCommand("alter table ktv_Singer alter column Singer_Spell TEXT(60) WITH COMPRESSION",    conn),
                        new OleDbCommand("alter table ktv_Singer alter column Singer_SpellNum TEXT(60) WITH COMPRESSION", conn),
                        new OleDbCommand("alter table ktv_Singer alter column Singer_PenStyle TEXT(60) WITH COMPRESSION", conn)
                    };

                    try
                    {
                        foreach (OleDbCommand cmd in Updatecmds)
                        {
                            cmd.ExecuteNonQuery();
                        }
                    }
                    catch
                    {
                        UpdateError = true;
                        this.BeginInvoke((Action) delegate()
                        {
                            SongMaintenance_DBVerTooltip_Label.Text = "更新歌手資料表失敗,已還原為原本的資料庫檔案。";
                        });
                    }
                }

                if (UpdatePhonetics)
                {
                    OleDbCommand[] Updatecmds =
                    {
                        new OleDbCommand("alter table ktv_Phonetics alter column PenStyle TEXT(40) WITH COMPRESSION", conn)
                    };

                    try
                    {
                        foreach (OleDbCommand cmd in Updatecmds)
                        {
                            cmd.ExecuteNonQuery();
                        }
                    }
                    catch
                    {
                        UpdateError = true;
                        this.BeginInvoke((Action) delegate()
                        {
                            SongMaintenance_DBVerTooltip_Label.Text = "更新拼音資料表失敗,已還原為原本的資料庫檔案。";
                        });
                    }
                }

                if (UpdateLangauage)
                {
                    OleDbCommand[] Updatecmds =
                    {
                        new OleDbCommand("alter table ktv_Langauage add column Langauage_KeyWord TEXT(255) WITH COMPRESSION", conn)
                    };

                    try
                    {
                        foreach (OleDbCommand cmd in Updatecmds)
                        {
                            cmd.ExecuteNonQuery();
                        }
                    }
                    catch
                    {
                        UpdateError = true;
                        this.BeginInvoke((Action) delegate()
                        {
                            SongMaintenance_DBVerTooltip_Label.Text = "更新語系資料表失敗,已還原為原本的資料庫檔案。";
                        });
                    }
                }

                if (RemoveGodLiuColumn)
                {
                    foreach (string GodLiuColumn in GodLiuColumnlist)
                    {
                        switch (GodLiuColumn)
                        {
                        case "Song_SongNameFuzzy":
                            GodLiuColumnDropSqlStr = "alter table ktv_Song drop column Song_SongNameFuzzy";
                            break;

                        case "Song_SingerFuzzy":
                            GodLiuColumnDropSqlStr = "alter table ktv_Song drop column Song_SingerFuzzy";
                            break;

                        case "Song_FuzzyVer":
                            GodLiuColumnDropSqlStr = "alter table ktv_Song drop column Song_FuzzyVer";
                            break;

                        case "DLspace":
                            GodLiuColumnDropSqlStr = "alter table ktv_Song drop column DLspace";
                            break;

                        case "Epasswd":
                            GodLiuColumnDropSqlStr = "alter table ktv_Song drop column Epasswd";
                            break;

                        case "imgpath":
                            GodLiuColumnDropSqlStr = "alter table ktv_Song drop column imgpath";
                            break;

                        case "cashboxsongid":
                            GodLiuColumnDropSqlStr = "alter table ktv_Song drop column cashboxsongid";
                            break;

                        case "cashboxdat":
                            GodLiuColumnDropSqlStr = "alter table ktv_Song drop column cashboxdat";
                            break;

                        case "holidaysongid":
                            GodLiuColumnDropSqlStr = "alter table ktv_Song drop column holidaysongid";
                            break;
                        }
                        GodLiuColumnDropcmd = new OleDbCommand(GodLiuColumnDropSqlStr, conn);
                        GodLiuColumnDropcmd.ExecuteNonQuery();
                    }
                }
                conn.Close();
            }

            if (UpdateError)
            {
                File.Copy(SongDBBackupFile, Global.CrazyktvDatabaseFile, true);
            }
            else
            {
                conn = CommonFunc.OleDbOpenConn(Global.CrazyktvSongMgrDatabaseFile, "");
                SongDBVerUpdatecmdSqlStr = "update ktv_Version set SongDB = @SongDB where Id = @Id";
                SongDBVerUpdatecmd       = new OleDbCommand(SongDBVerUpdatecmdSqlStr, conn);
                SongDBVerUpdatecmd.Parameters.AddWithValue("@SongDB", Global.CrazyktvSongDBVer);
                SongDBVerUpdatecmd.Parameters.AddWithValue("@Id", "1");
                SongDBVerUpdatecmd.ExecuteNonQuery();
                SongDBVerUpdatecmd.Parameters.Clear();
                conn.Close();

                CommonFunc.CompactAccessDB("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Global.CrazyktvDatabaseFile + ";", Global.CrazyktvDatabaseFile);

                string VersionQuerySqlStr = "select * from ktv_Version";
                using (DataTable dt = CommonFunc.GetOleDbDataTable(Global.CrazyktvSongMgrDatabaseFile, VersionQuerySqlStr, ""))
                {
                    if (dt.Rows.Count > 0)
                    {
                        foreach (DataRow row in dt.Rows)
                        {
                            Global.CrazyktvSongDBVer = row["SongDB"].ToString();
                            Global.CashboxUpdDate    = DateTime.Parse(row["CashboxUpdDate"].ToString());
                        }
                    }
                }

                this.BeginInvoke((Action) delegate()
                {
                    Global.TimerEndTime = DateTime.Now;

                    SongMaintenance_DBVer1Value_Label.Text = Global.CrazyktvSongDBVer + " 版";
                    Cashbox_UpdDateValue_Label.Text        = (CultureInfo.CurrentCulture.Name == "zh-TW") ? Global.CashboxUpdDate.ToLongDateString() : Global.CashboxUpdDate.ToShortDateString();
                    Cashbox_UpdDate_Button.Enabled         = Cashbox.GetUpdDateButtonEnableStatus();

                    SongMaintenance_DBVerTooltip_Label.Text = "";
                    SongMaintenance_Tooltip_Label.Text      = "已完成歌庫版本更新,共花費 " + (long)(Global.TimerEndTime - Global.TimerStartTime).TotalSeconds + " 秒完成。";
                });
                SongDBUpdate_UpdateFinish();
            }
        }
コード例 #2
0
        // 頁籤切換處理
        private void MainTabControl_SelectedIndexChanged(object sender, EventArgs e)
        {
            Label[] Tooltip_Label =
            {
                SongQuery_QueryStatus_Label,
                SongAdd_Tooltip_Label,
                SingerMgr_Tooltip_Label,
                SongMgrCfg_Tooltip_Label,
                SongMaintenance_Tooltip_Label,
                Cashbox_QueryStatus_Label
            };

            int i = -1;

            switch (MainTabControl.SelectedTab.Name)
            {
            case "SongQuery_TabPage":
                i = 0;
                SongQuery_QueryValue_TextBox.Focus();
                SongQuery_QueryValue_TextBox.ImeMode = ImeMode.OnHalf;
                break;

            case "SongAdd_TabPage":
                i = 1;
                break;

            case "SingerMgr_TabPage":
                i = 2;
                break;

            case "SongMgrCfg_TabPage":
                i = 3;
                break;

            case "SongMaintenance_TabPage":
                i = 4;
                switch (SongMaintenance_TabControl.SelectedTab.Name)
                {
                case "SongMaintenance_CustomLang_TabPage":
                case "SongMaintenance_MultiSongPath_TabPage":
                case "SongMaintenance_DBVer_TabPage":
                    if (SongMaintenance_TabControl.Enabled == true)
                    {
                        SongMaintenance_Save_Button.Enabled = true;
                    }
                    break;

                default:
                    SongMaintenance_Save_Button.Enabled = false;
                    break;
                }
                break;

            case "Cashbox_TabPage":
                i = 5;
                Cashbox_QueryValue_TextBox.Focus();
                Cashbox_QueryValue_TextBox.ImeMode = ImeMode.OnHalf;
                Cashbox_UpdDate_Button.Enabled     = Cashbox.GetUpdDateButtonEnableStatus();
                break;
            }

            if (i >= 0)
            {
                if (!Global.CrazyktvDatabaseStatus)
                {
                    if (!File.Exists(Global.CrazyktvDatabaseFile))
                    {
                        Tooltip_Label[i].Text = "CrazyKTV 資料庫檔案不存在!";
                    }
                    else if (!File.Exists(Global.CrazyktvSongMgrDatabaseFile))
                    {
                        Tooltip_Label[i].Text = "加歌程式參考資料庫檔案不存在!";
                    }
                    else if (Global.CrazyktvDatabaseError)
                    {
                        Tooltip_Label[i].Text = "資料庫檔案不是 CrazyKTV 資料庫!";
                    }
                    else if (Global.SongMgrDatabaseError)
                    {
                        Tooltip_Label[i].Text = "加歌程式參考資料庫不是最新版本!";
                    }
                    else if (Global.CrazyktvDatabaseIsOld)
                    {
                        Tooltip_Label[i].Text = "資料庫檔案為舊版本!";
                    }
                    else if (!Global.CrazyktvDatabaseMaxDigitCode)
                    {
                        Tooltip_Label[i].Text = "歌庫編碼混雜 5 及 6 位數編碼!";
                    }
                    else if (!Directory.Exists(Global.SongMgrDestFolder))
                    {
                        Tooltip_Label[i].Text = "請先設定歌庫資料夾!";
                    }
                }
                else
                {
                    List <string> ErrorTextList = new List <string>()
                    {
                        "CrazyKTV 資料庫檔案不存在!",
                        "加歌程式參考資料庫檔案不存在!",
                        "資料庫檔案不是 CrazyKTV 資料庫!",
                        "加歌程式參考資料庫不是最新版本!",
                        "資料庫檔案為舊版本!",
                        "歌庫編碼混雜 5 及 6 位數編碼!",
                        "請先設定歌庫資料夾!"
                    };
                    if (ErrorTextList.IndexOf(Tooltip_Label[i].Text) >= 0)
                    {
                        Tooltip_Label[i].Text = "";
                    }
                    ErrorTextList.Clear();
                }
            }
        }
コード例 #3
0
        private void SongDBUpdate_CheckDatabaseVersion()
        {
            bool   UpdateDBStatus = false;
            double SongDBVer      = 1.00;
            string CashboxUpdDate = "";

            string VersionQuerySqlStr = "select * from ktv_Version";

            using (DataTable dt = CommonFunc.GetOleDbDataTable(Global.CrazyktvSongMgrDatabaseFile, VersionQuerySqlStr, ""))
            {
                if (dt.Rows.Count > 0)
                {
                    foreach (DataRow row in dt.Rows)
                    {
                        SongDBVer      = Convert.ToDouble(row["SongDB"]);
                        CashboxUpdDate = row["CashboxUpdDate"].ToString();
                    }
                    Global.CashboxUpdDate = DateTime.Parse(CashboxUpdDate);

                    this.BeginInvoke((Action) delegate()
                    {
                        SongMaintenance_DBVer1Value_Label.Text = SongDBVer.ToString("F2") + " 版";
                        Cashbox_UpdDateValue_Label.Text        = (CultureInfo.CurrentCulture.Name == "zh-TW") ? DateTime.Parse(CashboxUpdDate).ToLongDateString() : DateTime.Parse(CashboxUpdDate).ToShortDateString();
                        Cashbox_UpdDate_Button.Enabled         = Cashbox.GetUpdDateButtonEnableStatus();
                    });

                    if (Global.DBVerEnableDBVerUpdate == "True")
                    {
                        if (!Directory.Exists(Application.StartupPath + @"\SongMgr\Update"))
                        {
                            Directory.CreateDirectory(Application.StartupPath + @"\SongMgr\Update");
                        }
                        bool DownloadStatus = CommonFunc.DownloadFile(Application.StartupPath + @"\SongMgr\Update\UpdateDB.tmp", "https://raw.githubusercontent.com/KenLuoTW/CrazyKTVSongMgr/master/CrazyKTV_SongMgr/SongMgr/Update/UpdateDB.xml");
                        if (DownloadStatus)
                        {
                            Global.CrazyktvSongDBVer = CommonFunc.LoadConfigXmlFile(Application.StartupPath + @"\SongMgr\Update\UpdateDB.tmp", "SongDBVer");
                            CommonFunc.SaveConfigXmlFile(Global.CrazyktvSongDBUpdateFile, "SongDBVer", Global.CrazyktvSongDBVer);
                        }
                        File.Delete(Application.StartupPath + @"\SongMgr\Update\UpdateDB.tmp");
                    }

                    if (Global.DBVerEnableDBVerUpdate == "True")
                    {
                        if (File.Exists(Global.CrazyktvDatabaseFile))
                        {
                            if (Convert.ToDouble(Global.CrazyktvSongDBVer) > SongDBVer)
                            {
                                this.BeginInvoke((Action) delegate()
                                {
                                    if (MessageBox.Show("你確定要更新歌庫版本嗎?", "偵測到歌庫版本更新", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                                    {
                                        Common_SwitchDBVerErrorUI(false);
                                        MainTabControl.SelectedIndex             = MainTabControl.TabPages.IndexOf(SongMaintenance_TabPage);
                                        SongMaintenance_TabControl.SelectedIndex = SongMaintenance_TabControl.TabPages.IndexOf(SongMaintenance_DBVer_TabPage);
                                        SongMaintenance_DBVerTooltip_Label.Text  = "開始進行歌庫版本更新...";
                                        UpdateDBStatus   = true;
                                        var UpdateDBTask = Task.Factory.StartNew(() => SongDBUpdate_UpdateDatabaseFile("UpdateVersion"));
                                    }
                                });
                            }
                        }
                    }
                }
                if (!UpdateDBStatus)
                {
                    SongDBUpdate_UpdateFinish();
                }
            }
        }