我使用数据表作为页面上某些下拉列表的数据源,但是注意到在回发期间页面非常慢。
我已经跟踪到了这里:
DataTable dt = new DataTable();
dt.Load(sqlCmd.ExecuteReader()); // this takes ages
sql命令是一个参数化查询,而不是一个存储过程(返回值和哪里是非常'动态'所以这是不切实际的),但仍然是一个简单的选择联合查询。 通常每个下拉列表返回5到20个选项,具体取决于在其他下拉列表中选择的内容。 当我在管理工作室中运行查询时,它在一秒钟内完成。在这里,每个下拉列表最多可能需要7秒钟,页面上有6个下拉列表,很快就会增加。 我也尝试过使用SqlDataAdapter:
SqlDataAdapter sqlDa = new SqlDataAdapter(sqlCmd);
sqlDa.Fill(dt); // this takes ages
但这也很慢。 我在2个不同的系统上都有这个,并且两者都有相同的性能问题。
如果有人知道一个更好(更快)的方法,或者知道为什么这么慢就会很棒。
答案 0 :(得分:1)
这不是我在这个问题上看过的最好的主题,但内部有很好的链接,&这是我的帖子历史:
SQL Query that runs fine in SSMS runs very slow in ASP.NET
SQL Optimizer有时喜欢决定什么是最好的&你必须通过一些跟踪和记录数据执行计划来突破你的查询。它可能很好地被埋没为坏索引,或者您的查询代码可能需要优化。因为我们没有查询代码,并且拥有它可能有用也可能没用。我建议您按照上述帖子中链接的指南进行操作并关闭您的问题。
答案 1 :(得分:0)
这里有一个示例,说明如何快速加载DataTable,注意我如何显示我想要返回的特定Columns
private DataTable GetTableData()
{
string sql = "SELECT Id, FisrtName, LastName, Desc FROM MySqlTable";
using (SqlConnection myConnection = new SqlConnection(connectionString))
{
using (SqlCommand myCommand = new SqlCommand(sql, myConnection))
{
myConnection.Open();
using (SqlDataReader myReader = myCommand.ExecuteReader())
{
DataTable myTable = new DataTable();
myTable.Load(myReader);
myConnection.Close();
return myTable;
}
}
}
}
如果您想DataAdapter
使用Fill the DataTable
这是一个简单的示例
private void FillAdapter()
{
using (SqlConnection conn = new SqlConnection(Your ConnectionString))
{
conn.Open();
using (SqlDataAdapter dataAdapt = new SqlDataAdapter("SELECT * FROM EmployeeIDs", conn))
{
DataTable dt = new DataTable();
dataAdapt.Fill(dt);
// dataGridView1.DataSource = dt;//if you want to display data in DataGridView
}
}
}