【C#】创建项目简单开发实现数据库表记录迁移功能

258 阅读3分钟

我正在参加「掘金·启航计划」

在实际项目中,很大可能会遇到数据迁移的情况
特别是对于系统升级或者旧表转移到新表,新旧表很可能是字段都不一样的情况,本篇文章就是在两个不同数据库不同表之间数据整合
同时也回顾下ADO.NET的ORM框架基础知识

  • 主要知识点列表 | 编号 | 语言或插件 | 知识点 | 说明 | | --- | --- | --- | --- | | 1 | C# | Task | 任务对象,异常线程操作 | | 2 | C# | using(){} | 执行完花括号内的代码后,实放对象 | | 3 | C# | SqlConnection | 连接数据库类 | | 4 | C# | ConnectionState | 连接状态类 | | 5 | C# | SqlCommand | sql命令操作类 | | 6 | C# | CommandType | 命令操作类型类 | | 7 | C# | SqlParameter | 参数化类 | | 8 | C# | SqlDataAdapter | 数据适配器类 |

【窗体界面简单设计】

1、原始库连接字符串 - 文本框控件

2、目标库连接字符串 - 文本框控件

3、若干个标签文本

4、数据迁移 - 按钮控件

5、数据迁移过程信息输出富文本框

image.png

【开始按钮】

1、在线程内操作控件,需要在线程外设置属性 CheckForIllegalCrossThreadCalls=false; 如果不设置,那么会出现如下错误提示

image.png

2、using(){}
此语句,能够在括号内定义对象,以及在花括号内执行完代码后能够实放对象,因此using 语句中使用的对象必须实现 IDisposable 接口

3、连接数据库对象类 - SqlConnection
在.net framework框架下,属于System.Data.dll封装好的类,一般在实例化时即可传连接字符串给构造函数,一般还有一个连接状态使用的比较多,默认实例化时后也是处于关闭状态,用来判断减少重复连接。默认是操作时开操作完自动关闭,即时没有用using的情况下也是一样

image.png

using (SqlConnection conn=new SqlConnection(conn_str))
{

}

4、sql命令操作类 - SqlCommand

会用到的三个主要成员

1)数据库连接对象类,上一步实例化的值赋值给它

2)操作的sql语句文本,或者存储过程名称

3)操作类型

用的比较多的还是Text和StoreProcedure

1655540520011.jpg

5、参数类 - SqlParameter

为什么需要这个参数化类,主要是为了防止sql注入,通过经过处理,这里暂不使用,后续会单独在一篇文章里讲。一般分为输出和输入参数

6、数据适配器类 - SqlDataAdapter

主要用于查询操作

相当于运输车,运输目标数据,有个Fill填充数据的操作,定义一个DataTable,相当先定义一个大的集装箱,最后将数据装进集装箱里,然后运输到目标对象里

image.png

private DataTable GetTable(string conn_str, string sql_text)
{
    DataTable dt = new DataTable();

    using (SqlConnection conn = new SqlConnection(conn_str))
    {
        if (conn.State != ConnectionState.Open) conn.Open();

        SqlCommand command = new SqlCommand();

        command.Connection = conn;
        command.CommandText = sql_text;
        command.CommandType = CommandType.Text;

        using (SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(command))
        {
            sqlDataAdapter.Fill(dt);
        }
    }

    return dt;
}

7、增删改操作 - ExecuteNonQuery 命令操作类下的方法

private int AddData(string conn_str, string sql_text)
{
    int rows = 0;

    using (SqlConnection conn = new SqlConnection(conn_str))
    {
        if (conn.State != ConnectionState.Open) conn.Open();

        SqlCommand command = new SqlCommand();

        command.Connection = conn;
        command.CommandText = sql_text;
        command.CommandType = CommandType.Text;

        command.ExecuteNonQuery();
    }

    return rows;
}