Ejemplo n.º 1
0
        private void button2_Click(object sender, EventArgs e)
        {
            //如果没有选中表,则不执行
            if (string.IsNullOrEmpty(CurrentTableName.Text))
            {
                return;
            }

            //是否含有聚集索引
            bool hasClusteredIndex = (CSHelper.ifExist("select count(*) from sys.indexes where object_id=OBJECT_ID('" + CurrentTableName.Text + "') and type_desc='CLUSTERED'; ") == 1);
            //if (!hasClusteredIndex)
            //{
            //    MessageBox.Show("此表没有聚集索引,请先创建!");
            //    return;
            //}


            Thread worker = new Thread(delegate()
            {
                Stopwatch sw = new Stopwatch();
                try
                {
                    sw.Start();
                    ShowLoading(true);

                    if (hasClusteredIndex)
                    {
                        ApendLog(string.Format("正在对表[{0}]重建索引", CurrentTableName.Text));
                        CSHelper.exec_sql(string.Format("DBCC DBREINDEX ({0}, '', 90)  ", CurrentTableName.Text));
                    }
                    else
                    {
                        ApendLog(string.Format("准备对表[{0}]建立索引", CurrentTableName.Text));

                        var field = CSHelper.ExecuteScalar(string.Format("Select top 1 name from syscolumns Where ID=OBJECT_ID('{0}')", CurrentTableName.Text));
                        ApendLog(string.Format("查出表[{0}]第一个字段为:{1}", CurrentTableName.Text, field));
                        ApendLog(string.Format("正在为表[{0}]字段[{1}]建立临时ClusteredIndex索引...时间比较久", CurrentTableName.Text, field));
                        CSHelper.exec_sql(string.Format("create clustered index ClusteredIndex on {0}({1}) ", CurrentTableName.Text, field));

                        ApendLog(string.Format("删除临时索引中..."));
                        CSHelper.exec_sql(string.Format("DROP INDEX {0}.ClusteredIndex ", CurrentTableName.Text, field));
                    }
                }
                catch (Exception ex)
                {
                    ApendLog(ex.Message);
                }
                finally
                {
                    sw.Stop();
                    TimeSpan ts = sw.Elapsed;
                    ApendLog("重建索引完成,耗时:" + string.Format("{0}时{1}分{2}秒{3}毫秒", ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds));
                    isRuning = false;
                }
            });

            worker.IsBackground = true;
            worker.Start();
            t          = new System.Timers.Timer(3000);
            t.Elapsed += t_Elapsed;
            t.Enabled  = true;
        }