是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)。帮我解决这个问题
答案 0 :(得分:0)
这不是问题:sys.dm_exec_procedure_stats很可能有重复项,因为它显示了各种类型的缓存查询计划。无论你的问题是什么,都不是这样。