Explication détaillée de l'exemple de code C# pour l'insertion simultanée de données dans DataTable dans la base de données

黄舟
Libérer: 2017-03-25 11:57:26
original
1925 Les gens l'ont consulté

Cet article présente principalement la méthode détaillée d'insertion C#des données du DataTable dans la bibliothèque data Il a une certaine valeur de référence. Ceux qui sont intéressés peuvent en savoir plus.

La situation actuelle est la suivante :

Le client dispose d'une machine de pointage et toutes les informations de pointage des employés sont désormais stockées dans la base de données Access de la machine de pointage. le client a introduit un nouveau système de gestion, il est nécessaire de synchroniser les données d'entrée dans la base de données Access avec la base de données SQL Server. En raison du temps long, plus de 400 000 données ont été accumulées.

Fonctions du logiciel :

Sélectionnez le fichier de base de données Access, remplissez l'adresse IP de la base de données SQL Server cible, puis démarrez la synchronisation.

Méthode d'implémentation :

1. Tout d'abord, stockez les données à importer de la base de données Access dans la DataTable

Connexion à la base de données dans le fichier de configuration String

<connectionStrings>
  <add name="oleConStr" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="/>
  
  <add name="sqlConStr" connectionString ="server=tiantiankaixing;database=新建数据库;trusted_connection=sspi"/>
 </connectionStrings>
Copier après la connexion
encapsule la méthode de lecture des données de la base de données Access dans DataTable

public static string OleConStr = ConfigurationManager.ConnectionStrings["oleConStr"].ConnectionString ;

 public static DataTable OleGetDataTable(string sql, string filePath)
    {
      
      string a = OleConStr + filePath;
      using (OleDbConnection conn = new OleDbConnection(a))
      {

        using (OleDbDataAdapter da = new OleDbDataAdapter(sql, conn))
        {
          try
          {
            conn.Open();
            DataTable dt = new DataTable();
            da.Fill(dt);
            return dt;
          }
          catch (Exception ex)
          {
            throw ex;
          }
          finally
          {
            if (conn.State == ConnectionState.Open)
              conn.Close();
          }
        }
      }
    }
Copier après la connexion
Lecture de la base de données Access cible dans Datatable

string sql = "select Id,Time from checkinout";
DataTable dt = AcHelper.OleGetDataTable(sql, @"F:\project\tiantiankaixing\admin.mdb");
Copier après la connexion
2. Méthode d'encapsulation de l'insertion par lots de données SQL Server

public static void DataTableToSQLServer(DataTable dt,string connectString)
    {
      string connectionString = connectString;

      using (SqlConnection destinationConnection = new SqlConnection(connectionString))
      {
        destinationConnection.Open();

        using (SqlBulkCopy bulkCopy = new SqlBulkCopy(destinationConnection))
        {


          try
          {

            bulkCopy.DestinationTableName = "checkinout";//要插入的表的表名
            bulkCopy.BatchSize = dt.Rows.Count;
            bulkCopy.ColumnMappings.Add("ID", "ID");//映射字段名 DataTable列名 ,数据库 对应的列名 
            bulkCopy.ColumnMappings.Add("TIME", "TIME");
            
            bulkCopy.WriteToServer(dt);
            System.Windows.Forms.MessageBox.Show("插入成功");
          }
          catch (Exception ex)
          {
            Console.WriteLine(ex.Message);
          }
          finally
          {
            

          }
        }


      }

    }
Copier après la connexion
3. Appelez la méthode DataTableToSQlServer()

string localCon = "server=tiantiankaixing;database=Test;trusted_connection=sspi";
Entity.DataTableToSQLServer(dt, localCon);
Copier après la connexion
pour insérer toutes les données du DataTable dans la base de données

. 🎜>

Pièce jointe : Utilisation simple de SqlBulkCopy
public void Test()
    {
      string connectionString = "server=tiantiankaixing;database=新建数据库;trusted_connection=sspi";
      
      using (SqlConnection sourceConnection =
            new SqlConnection(connectionString))
      {
        sourceConnection.Open();
        //获取读取的表总行数
        SqlCommand commandRowCount = new SqlCommand("select count(*) from student",sourceConnection);
        long countStart = System.Convert.ToInt32(commandRowCount.ExecuteScalar());
        

        //使用SqlDataReader读取源数据
        SqlCommand commandSourceData = new SqlCommand("select * from student", sourceConnection);
        SqlDataReader reader =commandSourceData.ExecuteReader();

        //测试用,把数据从一个表批量插入到另一个表
        //现实生活中肯定不会
        using (SqlConnection destinationConnection =new SqlConnection(connectionString))
        {
          destinationConnection.Open();

          //创建一个SQlBulkCopy对象
          //指定目标表名
          //指定要插入的行数
          //指定对应的映射
          using (SqlBulkCopy bulkCopy =new SqlBulkCopy(destinationConnection))
          {
            bulkCopy.DestinationTableName ="test";
            bulkCopy.BatchSize = 1;
            bulkCopy.ColumnMappings.Add("数据源列名","目标列名");

            try
            {
              
              bulkCopy.WriteToServer(reader);
            }
            catch (Exception ex)
            {
              Console.WriteLine(ex.Message);
            }
            finally
            {
              reader.Close();
            }
          }
        }


      }
    }
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!