C#同步两个数据库中两张表的数据

从Mysql两个数据库中同步表数据

先上需要的实体类

public class ServerConnectInfo
{
    public string SERVER { get; set; }
    
    public string DATABASE { get; set; }
    
    public string UID { get; set; }

    public string PWD { get; set; }

}

用到的方法

 public static void SynchronizationTable(ServerConnectInfo sourseInfo, ServerConnectInfo targetInfo,string tableName)
 {
     try
     {
         //获得原始表结构
         DataTable dtSourseInfoTable = new DataTable();
         dtSourseInfoTable = DatabaseHelper.GetTableColumnsName(sourseInfo, tableName);
         string sql = "select ";
         foreach (DataRow item in dtSourseInfoTable.Rows)
         {
             sql += string.Format("CONCAT('',{0}) as {1},", item["Field"].ToString(), item["Field"].ToString());
         }
         sql = sql.Trim(',');
         sql += " from  "+ tableName;

         if (dtSourseInfoTable == null && dtSourseInfoTable.Columns.Count <= 0)
         {
             return ;
         }

         //获得原始表数据
         dtSourseInfoTable = new DataTable();
         dtSourseInfoTable = DatabaseHelper.GetTable(sourseInfo, sql);
         if (dtSourseInfoTable == null && dtSourseInfoTable.Columns.Count <=0)
         {
             return ;
         }

         //删除目标库的表数据
         bool result = DatabaseHelper.DeleteTable(targetInfo);
         if (!result)
         {
             return ;
         }
         
         //向目标库插入数据
         string insertStr = DataTableToInsertSql(dtSourseInfoTable, tableName);

         bool insertResult = DatabaseHelper.Insert(targetInfo, insertStr);

         if (!insertResult)
         {
             return ;
         }
     }
     catch
     {
         return ;
     }

 }


public static string DataTableToInsertSql1(DataTable dt, string table)
{
    string result = "";
    string cols = string.Join(",", dt.Columns.Cast<DataColumn>().Select(x => $"{x.ColumnName}").ToArray());
    result = $"insert into {table} ({cols}) values ";
    foreach (DataRow dr in dt.Rows)
    {
        var vals = "(";
        vals += string.Join(",", dr.ItemArray.Select(x =>
        {
            if (DBNull.Value.GetType() == x.GetType())
            {
                return "null";
            }
            else
            {
                return $"'{x}'";
            }
        }).ToArray());
        vals += "),";
        result += vals;
    }
    result = result.Trim(',');
    return result;
}

mysql DatabaseHelper 帮助类

       public static bool DeleteTable(ServerConnectInfo info)
       {
           string connectionString = string.Format("Allow Zero Datetime=True;database={0};server={1};uid={2};charset=utf8;pwd={3}", info.DATABASE, info.SERVER, info.UID, info.PWD);
           using (MySqlConnection mySqlConnection = new MySqlConnection(connectionString))
           {
               try
               {
                   mySqlConnection.Open();
                   MySqlCommand mySqlCommand = mySqlConnection.CreateCommand();
                   mySqlCommand.CommandText = "DELETE FROM cinema_info_report ";
                   mySqlCommand.CommandType = CommandType.Text;
                   int a = mySqlCommand.ExecuteNonQuery();
                   if (a >= 0)
                   {
                       return true;
                   }
               }
               catch (MySqlException ex)
               {
               }
               finally
               {
                   mySqlConnection.Close();
               }
           }
           return false;
       }


  public static DataTable GetTable(ServerConnectInfo info, string sql)
  {
      string connectionString = string.Format("Allow Zero Datetime=True;database={0};server={1};uid={2};charset=utf8;pwd={3}", info.DATABASE, info.SERVER, info.UID, info.PWD);
      using (MySqlConnection mySqlConnection = new MySqlConnection(connectionString))
      {
          try
          {
              mySqlConnection.Open();
              MySqlCommand mySqlCommand = mySqlConnection.CreateCommand();
              mySqlCommand.CommandText = @sql;
              mySqlCommand.CommandType = CommandType.Text;
              MySqlDataReader mySqlDataReader = mySqlCommand.ExecuteReader();
              DataTable dt = new DataTable();
              dt.Load(mySqlDataReader);
              return dt;
          }
          catch (MySqlException ex)
          {
          }
          finally
          {
              mySqlConnection.Close();
          }
      }
      return null;
  }



  public static bool Insert(ServerConnectInfo info, string strSql)
  {
      string connectionString = string.Format("Allow Zero Datetime=True;database={0};server={1};uid={2};charset=utf8;pwd={3}", info.DATABASE, info.SERVER, info.UID, info.PWD);
      using (MySqlConnection mySqlConnection = new MySqlConnection(connectionString))
      {
          try
          {
              mySqlConnection.Open();
              MySqlCommand mySqlCommand = mySqlConnection.CreateCommand();
              mySqlCommand.CommandText = strSql;
              mySqlCommand.CommandType = CommandType.Text;

              int a = mySqlCommand.ExecuteNonQuery();
              if (a > 0)
              {
                  return true;
              }
          }
          catch (MySqlException)
          {
          }
          finally
          {
              mySqlConnection.Close();
          }
      }
      return false;
  }

使用示例

将ipA库的table_name表数据 每十分钟一次同步到ipB库的table_name表中

 static void Main(string[] args)
 {  
     Timer t = new Timer();
     t.Elapsed += new ElapsedEventHandler(SynchronizationEvent);
     t.Interval = 600000;
     t.Enabled = true;
     Console.Read();

 }


 public static void SynchronizationEvent(object source, System.Timers.ElapsedEventArgs e)
 {
     ServerConnectInfo sourseinfo = new ServerConnectInfo() { SERVER = "数据库ipA", DATABASE = "数据库名A", UID = "数据库账号A", PWD = "密码A" };
     ServerConnectInfo targetinfo = new ServerConnectInfo() { SERVER = "数据库ipB", DATABASE = "数据库名B", UID = "数据库账号B", PWD = "密码B" };//目标库账号要有写权限
     string tableName = "table_name";
     SynchronizationTable(sourseinfo, targetinfo, tableName);
 }

  • 9
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C#三层架构,可以使用ADO.NET来连接数据库,并执行相关的数据库操作。以下是从数据库获取数据的一些示例代码: 1. 使用SqlDataAdapter来获取数据 ```csharp using System.Data; using System.Data.SqlClient; // 数据库连接字符串 string connectionString = "Server=数据库服务器地址;Database=数据库名称;User Id=用户名;Password=密码;"; // SQL查询语句 string sql = "SELECT * FROM 名"; // 创建数据库连接对象 using (SqlConnection connection = new SqlConnection(connectionString)) { // 创建SqlDataAdapter对象 SqlDataAdapter adapter = new SqlDataAdapter(sql, connection); // 创建数据集对象 DataSet dataset = new DataSet(); // 使用SqlDataAdapter对象填充数据集 adapter.Fill(dataset, "名"); // 获取数据 DataTable table = dataset.Tables["名"]; // 处理数据 // ... } ``` 2. 使用SqlCommand对象来获取数据 ```csharp using System.Data; using System.Data.SqlClient; // 数据库连接字符串 string connectionString = "Server=数据库服务器地址;Database=数据库名称;User Id=用户名;Password=密码;"; // SQL查询语句 string sql = "SELECT * FROM 名"; // 创建数据库连接对象 using (SqlConnection connection = new SqlConnection(connectionString)) { // 打开数据库连接 connection.Open(); // 创建SqlCommand对象 SqlCommand command = new SqlCommand(sql, connection); // 创建数据适配器对象 SqlDataAdapter adapter = new SqlDataAdapter(command); // 创建数据集对象 DataSet dataset = new DataSet(); // 使用数据适配器对象填充数据集 adapter.Fill(dataset, "名"); // 获取数据 DataTable table = dataset.Tables["名"]; // 处理数据 // ... } ``` 以上就是从数据库获取数据的示例代码,需要根据实际情况进行调整和修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值