我在应用程序中显示 SQL 数据库中的数据时遇到性能问题。问题是我有大量需要显示的参数(客户的个人数据、他当前的统计数据等)。
到目前为止,我已经使用了 SqlCommand.ExecuteScalar
(对于单个参数)或 DataTable.Rows[].ItemArray.GetValue()
(对于多个参数 -我用 SqlDataAdapter
填充 DataTable,它的查询从数据库中提取必要的数据)并将它们的值分配给适当的控件。假设该命令是 SqlCommand 类型:
对于单个参数
command.CommandText = "SELECT Parameter1 FROM MyTable WHERE Condition = Value";
textBox1.Text = command.ExecuteScalar().ToString();
对于多个参数(SDA 是一个 SqlDataAdapter):
command.CommandText="SELECT Parameter1 - ParameterN FROM MyTable WHERE Condition = Value";
SDA.SelectCommand = command;
SDA.Fill(MyDataTable);
textBox1.Text = MyDataTable.Rows[0].ItemArray.GetValue(0).ToString();
comboBox1.Text = MyDataTable.Rows[0].ItemArray.GetValue(1).ToString();
/*
I repeat similar lines of code for each parameter and display it in the appropriate control.
*/
这种方法工作正常,但是当我有大量参数(20+)时,它的工作速度非常慢。
有没有更有效的方法来显示这些数据量,我将如何实现它?
谢谢
最佳答案
对于第二个示例,SqlDataReader 的性能可能会更好,因为您只需读取一次值,而使用 DataAdapter 时,您需要加载 DataTable,然后循环遍历表的行(有效地读取数据两次)。
command.CommandText="SELECT Field1,...,FieldN FROM MyTable WHERE Condition = Value";
SqlDataReader reader = command.ExecuteReader();
while(reader.Read())
{
// Of course this works correctly just if your query returns one row....
textBox1.Text = reader.GetString(0);
comboBox1.Text = reader.GetString(n);
}
您也可以尝试使用 Field<T>
DataRow 的扩展
command.CommandText="SELECT Field1,...,FieldN FROM MyTable WHERE Condition = Value";
SqlDataAdapter SDA = new SqlDataAdapter(command);
SDA.Fill(MyDataTable);
textBox1.Text = MyDataTable.Rows[0].Field<string>("Field1");
comboBox1.Text = MyDataTable.Rows[0].Field<string>("FieldN");
但是,我认为真正的性能提升在于您提交给数据库引擎的查询以及表上索引的正确工作。 尝试检索可能的最小行数、搜索索引字段和/或更改存储过程。
关于c# - 在 C# WinForm 控件(文本框、组合框、标签)中显示 SQL 数据库中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16414759/