c# - 在 C# WinForm 控件(文本框、组合框、标签)中显示 SQL 数据库中的数据

标签 c# sql data-binding

我在应用程序中显示 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/

相关文章:

c# - 无论如何,有没有办法检测方法将调用什么?

c# - "block"的最佳方法,直到满足特定条件

php - MySQL选择表中特定id的两个时间戳列之间的平均时间差

sql - 为什么 Oracle 中使用 CASE 进行子选择比 JOIN WITH OR 更快

javascript - 根据搜索字段和值过滤 $scope

c# - String.Equals 的 StringComparison 类型的文化是否重要?

c# - 在其他使用 Mono 的平台上使用 Java 代码

sql - 如何比较Postgresql中的两个表?

javascript - Knockout js可见绑定(bind)似乎不起作用

wpf - 忽略由于数据绑定(bind)而导致的文本/值更改