c# - 加载数据的时间很长。大量数据。 C# 中的 SQL 查询

标签 c# sql wpf oledb

我在 C# WPF 中有以下代码

ConsultaDB consulta = new ConsultaDB();
foreach (var item in lista)
{
    var cp = consulta.returnCP(item.Key);
    if (cp.Length != 5)
    {
        //Some code here with the data returned
    }
}

list 是超过 100K 元素的集合,ConsultaDB 对象具有以下代码:

class ConsultaDB
{
    string CP;
    OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=CCPP.accdb");
    public string returnCP(string id)
    {
        var comm = conn.CreateCommand();
        comm.CommandType = CommandType.Text;
        comm.CommandText = "SELECT CP FROM CP WHERE ID='" + id+ "'";
        var returnValue = comm.ExecuteScalar();
        CP = returnValue.ToString();
        return CP;
    }

    public ConsultaDB()
    {
        conn.Open();
    }
}

这里的问题是所有对数据库的请求都需要花费大量时间才能完成。我看到循环运行良好,但肯定没有优化。

那么,如何提高该过程的速度?

最佳答案

不要逐一获取 CP,而是执行单个查询,该查询选择整个表,然后在表中进行迭代。将会大大提高速度。 您的查询将是:

"SELECT * FROM CP";

然后做类似的事情:

 List<string> cps = table_name.AsEnumerable()
                           .Select(r=> r.Field<string>("...."))
                           .ToList();

来自一位经常使用 Access DB 的人的建议 - 始终使用参数化查询。它将为您节省大部分不兼容的类型错误。尤其是当您处理日期时...

关于c# - 加载数据的时间很长。大量数据。 C# 中的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33605832/

相关文章:

c# - Double.TryParse 或 Convert.ToDouble - 哪个更快更安全?

c# - 将图像插入段落的内联列表中

mysql - 如何加入同一张 table 两次?

c# - 如何在 C# 中处理客户端-服务器应用程序中的数据库并发?

wpf - 数据模板中的数据绑定(bind)不起作用

c# - 银光反射

c# - UWP - 框架导航仅在传递参数时崩溃

SQL Postgres - 插入到不存在的地方

sql - Oracle - 通过创建重复行进行分组

WPF 选项卡控件 : Sliding effect on tab item selection