我正在使用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);
答案 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;
}