对代码进行一些更改,可以帮助我解决复制问题

时间:2014-03-07 10:43:20

标签: c# .net

是C#编码的业余爱好者。 请帮我优化此代码并解决复制问题。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            comboBox1.Items.Add("bora\\bora");
        }

       private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void connect_Click(object sender, EventArgs e)
        {
            try
            {
                comboBox2.Items.Clear();
                comboBox3.Items.Clear();
                dataGridView1.Rows.Clear();
                string sname = comboBox1.SelectedItem.ToString();
                string conString = @"server=" + sname + ";  Integrated Security=True";
                if (sname == "")
                {
                   MessageBox.Show("Please enter a Server name");
                }
                else
                {
                    using (SqlConnection con = new SqlConnection(conString))
                    {
                        con.Open();
                        MessageBox.Show("Connected");
                        using (SqlCommand cmd = new SqlCommand("SELECT name from sys.databases order by name asc", con))
                        {
                            using (IDataReader dr = cmd.ExecuteReader())
                            {
                                while (dr.Read())
                                {
                                    comboBox2.Items.Add(dr[0].ToString());
                                }
                            }
                        }
                    }
                    MessageBox.Show("Populated");
                }
                Console.WriteLine("Hello1223");
            }
            catch (Exception e1)
            {
                MessageBox.Show(e1.ToString());
            }
        }

        private void display_procs_Click(object sender, EventArgs e)
        {
            try
            {
                comboBox3.Items.Clear();
                dataGridView1.Rows.Clear();
                string sname = comboBox1.SelectedItem.ToString();
                string dname = comboBox2.SelectedItem.ToString();
                string conString = @"server=" + sname + ";  Integrated Security=True";

                using (SqlConnection con = new SqlConnection(conString))
                {
                    con.Open();
                    using (SqlCommand cmd = new SqlCommand("SELECT name from " + dname + ".sys.procedures order by name asc", con))
                    {
                        using (IDataReader dr = cmd.ExecuteReader())
                        {
                            while (dr.Read())
                            {
                                comboBox3.Items.Add(dr[0].ToString());
                            }
                        }
                    }
                }
                MessageBox.Show("Populated");
                Console.WriteLine("Hello");
            }
            catch (Exception e3)
            {
                MessageBox.Show(e3.ToString());
            }
        }
        **public void execution()
        {
            string sname = comboBox1.Text.Trim();
            string dname = comboBox2.SelectedItem.ToString();
            string pname = comboBox3.SelectedItem.ToString();
            string conString = @"server=" + sname + ";  Integrated Security=True; MultipleActiveResultSets=True;";
            SqlCommand s = new SqlCommand("exec " + dname + ".dbo." + pname + ";");
            SqlConnection conDataBase = new SqlConnection(conString);
            conDataBase.Open();
            s.Connection = conDataBase;
            s.CommandTimeout = 0;
            int i = 0;
            List<Action> a = new List<Action>();
            int j = Int32.Parse(exec.Text.ToString());
            for (i = 0; i < j; i++)
            {
                a.Add(new Action(() => s.ExecuteNonQueryAsync()));
            }
            Parallel.ForEach<Action>(a, (o => o()));
        }**

        List<Stats> list = new List<Stats>();
        private void get_stats_Click(object sender, EventArgs e)
        {
            try
            {
                list.Clear();
                //exec.Clear();
                string sname = comboBox1.Text.Trim();
                string dname = comboBox2.SelectedItem.ToString();
                string pname = comboBox3.SelectedItem.ToString();
                string conString = @"server=" + sname + ";  Integrated Security=True;";
                SqlConnection conDataBase = new SqlConnection(conString);
                conDataBase.Open();
                execution();
                SqlCommand cmdDataBase = new SqlCommand("SELECT ROW_NUMBER() OVER (ORDER BY sql_handle) AS Sl_no,last_elapsed_time, total_elapsed_time, min_elapsed_time, max_elapsed_time, total_elapsed_time/execution_count as average_elapsed_time FROM sys.dm_exec_query_stats WHERE sql_handle in (SELECT sql_handle FROM sys.dm_exec_procedure_stats WHERE object_id IN (SELECT object_id FROM " + dname + ".sys.procedures WHERE name='" + pname + "'));", conDataBase);
                try
                {
                    SqlDataAdapter sda = new SqlDataAdapter();
                    sda.SelectCommand = cmdDataBase;
                    DataTable dbadataset = new DataTable();
                    dbadataset.Dispose(); 
                    sda.Fill(dbadataset);

                    for (int k = 0; k < dbadataset.Rows.Count; k++)
                    {
                        Stats st = new Stats();
                        st.Sl_no = Int64.Parse(dbadataset.Rows[k][0].ToString());
                    st.last_elapsed_time = Int64.Parse(dbadataset.Rows[k][1].ToString());
                    st.total_elapsed_time = Int64.Parse(dbadataset.Rows[k][2].ToString());
                    st.min_elapsed_time = Int64.Parse(dbadataset.Rows[k][3].ToString());
                     st.max_elapsed_time = Int64.Parse(dbadataset.Rows[k][4].ToString());
                   st.average_elapsed_time = Int64.Parse(dbadataset.Rows[k][5].ToString());
                        list.Add(st);
                    }
                    BindingSource bSource = new BindingSource();
                    bSource.DataSource = list;
                    dataGridView1.DataSource = bSource;
                    sda.Update(dbadataset);
                    conDataBase.Close();
                    dbadataset.Dispose();
                    cmdDataBase.Dispose();
                }
                catch (Exception e5)
                {
                    MessageBox.Show(e5.Message);
                }
            }
            catch (Exception e4)
            {
                MessageBox.Show(e4.Message);
            }
        }
        private void display_graph_Click(object sender, EventArgs e)
        {
            try
            {
                Form2 form2 = new Form2();
                form2.Show();
                int i = 0;
                form2.chart1.ChartAreas["area"].AxisX.Maximum = list.Max(x => x.Sl_no);
                form2.chart1.ChartAreas["area"].AxisX.Minimum = list.Min(x => x.Sl_no);
                form2.chart1.ChartAreas["area"].AxisX.Interval = 1;

     form2.chart1.ChartAreas["area"].AxisY.Maximum = list.Max(x => x.average_elapsed_time);
                form2.chart1.ChartAreas["area"].AxisY.Minimum = 0;
                    //list.Min(x => x.average_elapsed_time);
                form2.chart1.ChartAreas["area"].AxisY.Interval = (form2.chart1.ChartAreas["area"].AxisY.Maximum) / 10;

                var l = list.Select(x => x.Sl_no);
                var l1 = list.Select(x => x.average_elapsed_time);
                while (i < list.Count)
                {
                    form2.chart1.Series["Query"].Points.AddXY(l.ElementAt(i), l1.ElementAt(i));
                    i++;
                }
            }
            catch (Exception e7)
            {
                MessageBox.Show(e7.Message);
            }
        }
        private void groupBox5_Enter(object sender, EventArgs e)
        {}
        private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
        {}
        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {}
        private void comboBox3_SelectedIndexChanged(object sender, EventArgs e)
        {
        }
        private void groupBox6_Enter(object sender, EventArgs e)
        {
        }
    }
}

图像显示对象ID包含重复项。在我更改代码之前它们没有出现(标记为Bold)。帮我解决这个问题

enter image description here

1 个答案:

答案 0 :(得分:0)

这不是问题:sys.dm_exec_procedure_stats很可能有重复项,因为它显示了各种类型的缓存查询计划。无论你的问题是什么,都不是这样。