DataBinding非常慢

时间:2015-10-10 11:44:19

标签: c# .net sql-server datagridview

我正在使用Windows应用程序c#。当我将数据表绑定到Datagridview时,它变慢,我收到SQL连接超时错误。

同时我的数据表有批量记录。我该如何解决这个问题?

代码:

private void Window_Loaded(object sender, RoutedEventArgs e)
{
   con.StatisticsEnabled = true;
   con.Open();

   DataTable dt = new DataTable();

   SqlCommand cmd = new SqlCommand("select * from Stktrn_table", con);
   SqlDataAdapter adp = new SqlDataAdapter(cmd);           
   adp.Fill(dt);

   GridDisplay.ItemsSource = dt.DefaultView;
 }

 SqlCommand cmdVoid = new SqlCommand("select party_no, smas_rtno,convert(numeric(18,2),SUM(smas_NetAmount)) as Amount from salmas_table where ctr_no=@tCounter and Smas_Cancel<>1 and smas_rtno<>0 and Smas_billdate=@tDate group by smas_rtno, party_no", con); 
cmdVoid.Parameters.AddWithValue("@tDate", dpBillDate.SelectedDate.Value);
cmdVoid.Parameters.AddWithValue("@tCounter", tCounterNoNew); 
SqlDataAdapter adpVoid = new SqlDataAdapter(cmdVoid); 
adpVoid.Fill(dtVoid); 

2 个答案:

答案 0 :(得分:1)

这一行

 SqlCommand cmd = new SqlCommand("select * from Stktrn_table", con);

将是你的问题。不要从数据库中选择所有行,使用TOP

限制它
SELECT TOP 100 Column1, Column2, Column3 FROM Stktrn_table

一般SELECT *是不好的做法。

或者,实现分页,以便按需加载行而不是预先加载。

查询如何在SQL Server管理工作室中运行?这应该是查询将从数据库返回多长时间的初始指示。

您还可以使用存储过程,这可以提供比原始SQL查询更高的性能。

答案 1 :(得分:0)

首先,您不应该像Select * from table_name这样使用,而应使用select column_1,column_2,column3,column_n,即只选择您需要的列。

第二件事总是使用类(BLL和DLL),而不是在页面加载或任何形式下直接为数据库编码。

第三个总是使用try catch块。

每当你创建一个对象时,你应该把它放在try catch的finally块中。 对于前。

DataTable dt = null;

SqlDataAdapter da = null;

SqlConnection con = null;
try

{

con=new SqlConnection("Connection_Source");

con.Open();

da = new DataAdapter("select * from table_name",con);

dt=new DataTable();

da.Fill(dt);

dataGridViewObj.DataSource=dt;

}

catch(Exception ex)

{

MessageBox.Show(ex.Message);

}

finally

{

if(con.State==ConnectionState.Open)

con.Close();

dt.Dispose();

if(dt!=null)

dt=null;

da.Dispose();
if(da!=null) da=null;
}