代码之家  ›  专栏  ›  技术社区  ›  Anjali

优化将数据插入access数据库代码

c#
  •  0
  • Anjali  · 技术社区  · 5 年前

    我正在尝试使用C#从sql表插入数据以访问数据库。在access数据库中插入操作花费了太多时间。它运行了将近一个小时。有谁能提出任何优化代码的方法吗

    下面是我将数据插入Access数据库的代码

     using (OleDbConnection connection = new OleDbConnection(_configuration.GetConnectionString("AccessConnection")))
                {
                    using (OleDbCommand cmd = new OleDbCommand("INSERT INTO RecsCD(RecordingDate, Gr,Grant,DocType,  DocNumber,UserDocNumber,NumOfPages) values (?, ?, ?, ?, ?, ?, ?)", connection))
                    {
                        connection.Open();
    
                        foreach (var records in recList)
                        {
    
                            cmd.Parameters.Add("@RecordingDate", OleDbType.VarChar).Value = records.RecordingDate == null ? "" : records.RecordingDate;
                            cmd.Parameters.Add("GR", OleDbType.VarChar).Value = records.Grantor == null ? "": records.Gr;
                            cmd.Parameters.Add("Grant", OleDbType.VarChar).Value = records.Grantee == null? "": records.Grant;
                            cmd.Parameters.Add("DocType", OleDbType.VarChar).Value = records.DocType == null ? "" : records.DocType; ;
                            cmd.Parameters.Add("DocNumber", OleDbType.VarChar).Value = records.DocNumber == null ? "" : records.DocNumber; ;
                            cmd.Parameters.Add("UserDocNumber", OleDbType.VarChar).Value = records.InternalDocNumber == null ? "" : records.InternalDocNumber; ;
                            cmd.Parameters.Add("NumOfPages", OleDbType.VarChar).Value = records.NumberPages == null ? "" : records.NumberPages; ;
                            cmd.ExecuteNonQuery();
                        }
                    }
    

    我用来插入数据的查询只是一个选择查询:

    更改过程重新加载

    作为

     SELECT 
           [RecLoadId]
          ,[DocNumber]
          ,[InternalDocNumber]
          ,[RecordingDate]
          ,[DocType]
          ,[DocDescription]
          ,[Gr]
          ,[Grant]
          ,[NumberPages]
          ,[SourceCode]
          ,[Parcel_No]
      FROM [db_recload].[dbo].[RecLoadSplit]
    

    公共列表getPrimeData() {

        return _context.RecLoad
             .FromSql("EXECUTE RecLoad_GetPrimeparsedData").ToList();
    
    }
    

    表中共有6843行

    1 回复  |  直到 5 年前
        1
  •  1
  •   Oguz Ozgul    5 年前

    您似乎未清除就附加到参数集合。

    尝试 cmd.Parameters.Clear();

    的Add方法的源代码中的所有重载 ParameterCollection

                    foreach (var records in recList)
                    {
                        cmd.Parameters.Clear();
                        cmd.Parameters.Add("@RecordingDate", OleDbType.VarChar).Value = records.RecordingDate == null ? "" : records.RecordingDate;
                        cmd.Parameters.Add("GR", OleDbType.VarChar).Value = records.Grantor == null ? "": records.Gr;
                        cmd.Parameters.Add("Grant", OleDbType.VarChar).Value = records.Grantee == null? "": records.Grant;
                        cmd.Parameters.Add("DocType", OleDbType.VarChar).Value = records.DocType == null ? "" : records.DocType; ;
                        cmd.Parameters.Add("DocNumber", OleDbType.VarChar).Value = records.DocNumber == null ? "" : records.DocNumber; ;
                        cmd.Parameters.Add("UserDocNumber", OleDbType.VarChar).Value = records.InternalDocNumber == null ? "" : records.InternalDocNumber; ;
                        cmd.Parameters.Add("NumOfPages", OleDbType.VarChar).Value = records.NumberPages == null ? "" : records.NumberPages; ;
                        cmd.ExecuteNonQuery();
                    }