首页 > 开发 > 综合 > 正文

c#将指定数据库中所有数据由简体转换为繁体

2024-07-21 02:26:26
字体:
来源:转载
供稿:网友

/*
a、注意数据库编码要能兼容gb2312和big5,比如mysql中使用utf8
b、该代码采用遍历的方式,并用mysqlcommandbuilder进行批量更新,所以能转换的表必须包含主键,不包括主键的表则不能转换
c、引用了microsoft.visualbasic.dll进行简繁转换
*/
using system;
using system.data;
using mysql.data;
using mysql.data.mysqlclient;
using system.collections.generic;
using system.text;
using microsoft.visualbasic;

namespace gb2312tobig5
{
    class program
    {
        static void main(string[] args)
        {
            //入口
            console.writeline("请输入数据库所在ip:");
            string ip = console.readline().trim();

            console.writeline("请输入数据库名称:");
            string db = console.readline().trim();

            console.writeline("请输入登录数据库用户名:");
            string user = console.readline().trim();

            console.writeline("请输入登录数据库密码:");
            string psw = console.readline();

            string connectionstring = "data source=" + ip + ";user id=" + user + ";password=" + psw + ";database=" + db + ";allow zero datetime=true;charset=utf8;";

            console.writeline("生成的数据库连接字符串为:{0},继续吗?(y/n)", connectionstring);
            if (console.readline().tostring().toupper() == "y")
            {
                //包含所有表名称的datatable
                datatable dtall = tablelist(connectionstring);
                if (dtall != null)
                {
                    if (dtall.rows.count > 0)
                    {
                        console.write("转换中,请稍候:");
                        for (int i = 0; i < dtall.rows.count; i++)
                        {
                            dtconvert(dtall.rows[i][0].tostring(), connectionstring);
                        }
                    }
                }
            }
        }

        //将datatable中每行每列转为繁体
        private static void dtconvert(string dtname, string connectionstring)
        {
            string sql = "";
            mysqlcommand cmd = null;
            mysqldataadapter da = null;
            datatable dt = null;
            mysqlcommandbuilder builder = null;

            using (mysqlconnection conn = new mysqlconnection(connectionstring))
            {
                try
                {
                    sql = "select * from " + dtname;
                    cmd = new mysqlcommand(sql, conn);
                    conn.open();
                    da = new mysqldataadapter(cmd);
                    //添加主键映射
                    da.missingschemaaction = missingschemaaction.addwithkey;
                    dt = new datatable();
                    da.fill(dt);

                    //遍历dt做替换
                    if (dt.rows.count > 0)
                    {
                        //如果表包含主键
                        if (dt.primarykey.length > 0)
                        {
                            #region 遍历
                            for (int i = 0; i < dt.rows.count; i++)
                            {
                                for (int j = 0; j < dt.columns.count; j++)
                                {
                                    if (dt.columns[j].datatype.tostring() == "system.string")
                                    {
                                        if (dt.rows[i][j] != null)
                                        {
                                            if (dt.rows[i][j].tostring() != string.empty)
                                            {
                                                dt.rows[i][j] = getbig5(dt.rows[i][j].tostring());
                                                console.write(".");
                                            }
                                        }
                                    }
                                }
                            }
                            #endregion

                            builder = new mysqlcommandbuilder(da);
                            da.update(dt);
                        }
                    }
                    //释放资源
                    builder.dispose();
                    cmd.dispose();
                    da.dispose();
                    dt.clear();
                    dt.dispose();
                   
                }
                catch (exception error)
                {
                    console.writeline(error.tostring());
                }
                finally
                {
                    conn.close();
                }
               
            }
        }

        //遍历每个表
        private static datatable tablelist(string connectionstring)
        {
            datatable dt = new datatable();

            using (mysqlconnection conn = new mysqlconnection(connectionstring))
            {
                //show tables为mysql列出所有表,如sqlserver请使用相关命令
                mysqlcommand cmd = new mysqlcommand("show tables",conn);
                mysqldataadapter da = new mysqldataadapter(cmd);
                dataset ds = new dataset();

                try
                {
                    conn.open();
                    da.fill(ds, "temp_tables");
                    dt = ds.tables["temp_tables"];
                }
                catch (exception error)
                {
                    console.writeline(error.tostring());
                }
                finally
                {
                    conn.close();
                }
            }

            return dt;
        }

        //简体转繁体
        private static string getbig5(string gb2312)
        {
            string big5 = "";
            if ((gb2312 != null) && (gb2312 != string.empty))
            {
                gb2312 = gb2312.trim();
                big5 = strings.strconv(gb2312,vbstrconv.traditionalchinese,0);
            }
            return big5;
        }

    }
}

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表