mysql批量插入

题目:

1、控制台应用程序

2、参考“即堂练习-4月2日”中随机码的生成算法,生成多个随机码,并且塞到Mysql数据库中,具体要求如下:

  • 随机码的字母表为:0123456789ABCDEFGHJKLMNPQRSTUVWXYZ
  • 随机码的长度为32位

以上两个值都固定在代码中,程序运行后,输入生成的随机码个数,程序根据输入个数生成随机码,生成随机码后把对应的随机码都塞到Mysql数据库中

3、Mysql数据库采用《阅读材料:MySQL与C#》中直接解压安装的Mysql数据库,建立一个名为Test0507的数据库,此数据库只有一张表:t_RandomCode,表结构为:fRandomCode char(32), fInputDate DateTime两个字段(其中fRandomCode为生成的随机码,fInputDate为此随机码插入数据库具体日期)

4、随机码生成时可不考虑重复的问题(即生成重复和在数据库中重复)

5、数据库采用Mysql数据库,每次生成一定数量的随机码,都必须保存到数据表t_RandomCode中

注意:插入到数据库的随机码数目每次不少于100000(10万)条。

6、最后针对t_RandomCode表中全部的随机码(多次生成的)做统计,统计字母表各个字符出现的统计结果输出格式如下:

7、程序界面如上图,输入随机码数量后,首先把随机码保存到数据库中,然后输出数据库中全部随机码的各字符统计

8、本项目把整套源代码压缩为rar后提交,不需要提交数据库内容



代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Threading.Tasks;
using MySql.Data.MySqlClient;
namespace Test0507.cs
{
    class Program
    {
        public static string connStr = string.Format("server={0};Port={1};User Id={2};database={3};password={4};Charset=utf8", "localhost", 3300, "root", "Test0507", "123456");

        static void Main(string[] args)
        {
            int len = Convert.ToInt32(args[0]);
            Console.WriteLine("len = "+len);
            string code= "0123456789ABCDEFGHJKLMNPQRSTUVWXYZ";
            Random random = new Random();
            int  num = 0;

            MySqlConnection conn;
            try
            {
                conn = new MySqlConnection(connStr);
                conn.Open();
                List<string> sqlStringList = new List<string>();
                List<MySqlParameter[]> sqlStringParaList = new List<MySqlParameter[]>();
               
            //    List<string> param_list = new List<string>();
                for (int i = 0; i < len; i++) {
                    string sqltext = "insert into t_randomcode (fRandomCode,fInputDate) values (@fRandomCode,@fInputDate)"; 
                     num = random.Next(0, code.Length);
                     string data = code.Substring(num, 1);
                     Console.Write(data+" ");
                     MySqlParameter[] parameters = { 
                            new MySqlParameter("?fRandomCode",MySqlDbType.VarChar,32),
                            new MySqlParameter("?fInputDate",MySqlDbType.Date)
                     };
                     parameters[0].Value = Convert.ToChar(data);
                     parameters[1].Value = DateTime.Now;
                     Console.WriteLine("param="+parameters[0].Value+","+parameters[1].Value);
                     sqlStringParaList.Add(parameters);
                     sqlStringList.Add(sqltext);
                } 
                Console.WriteLine();
                int count = Convert.ToInt32(ExcuteSQLTrans(sqlStringList, sqlStringParaList));
                Console.WriteLine("count="+count);
                string sql = String.Format("select fRandomCode from t_RandomCode");
                MySqlDataAdapter adapter = new MySqlDataAdapter(sql,conn);
                
                Dictionary<char, int> dict = new Dictionary<char,int>();
                char c;
                
                DataSet ds = new DataSet();
                adapter.Fill(ds,"result");
                
                foreach(DataRow row in ds.Tables["result"].Rows){
                    c = Convert.ToChar(row["fRandomCode"]);
                    //c为双重循环遍历时的具体每个随机码中的元素
                    //加入统计字典中
                    if (!dict.ContainsKey(c))
                    {
                        dict.Add(c, 1);
                    }
                    else
                    {
                        dict[c]++;
                    }
                };
                Console.WriteLine("在数据库中各字符的统计如下:");
                for (int i = 0; i < code.Length; i++)
                {
                    if (dict.ContainsKey(code[i]))
                    {
                        Console.WriteLine("{0}:{1}%", code[i], Convert.ToDouble(dict[code[i]]) / Convert.ToDouble(code.Length) / 32f);
                    }
                    else
                    {
                        Console.WriteLine("{0}:0%", code[i]);
                    }
                }          
            }
            catch (Exception ee)
            {
                Console.WriteLine("打开数据库异常:" + ee.Message);
            }
        }

        public static object ExcuteSQLTrans(List<string> sqlStringList, List<MySqlParameter[]> sqlStringParaList)
        {
            using (MySqlConnection conn = new MySqlConnection(connStr))
            {
                conn.Open();
                using (MySqlTransaction trans = conn.BeginTransaction())
                {
                    MySqlCommand cmd = new MySqlCommand { CommandTimeout = 0 };
                    try
                    {
                        if (sqlStringList.Count != sqlStringParaList.Count)
                        {
                            return 0;
                        }
                        int count = 0;
                        //循环
                        for (int i = 0; i < sqlStringList.Count; i++)
                        {
                            string cmdText = sqlStringList[i];
                            MySqlParameter[] cmdParms = sqlStringParaList[i];
                            Console.WriteLine("cmdText = "+cmdText+",cmdParms[0] = "+cmdParms[0].Value+",cmdParms[1]="+cmdParms[1].Value);
                            PrepareCommand(cmd, conn, trans, cmdText, cmdParms);
                            count += cmd.ExecuteNonQuery();
                            //cmd.CommandText = cmdText;
                            //cmd.Parameters.Add(cmdParms);
                            cmd.Parameters.Clear();
                        }
                        trans.Commit();
                        return count;
                    }
                    catch (Exception ex)
                    {
                        trans.Rollback();
                        return 0;
                    }
                }
            }
        }

        private static void PrepareCommand(MySqlCommand cmd, MySqlConnection conn, MySqlTransaction trans, string cmdText, MySqlParameter[] cmdParms)
        {
            if (conn.State != ConnectionState.Open)
                conn.Open();
            cmd.Connection = conn;
            cmd.CommandText = cmdText;
            if (trans != null)
                cmd.Transaction = trans;
            cmd.CommandType = CommandType.Text;//cmdType;
            if (cmdParms != null)
            {
                foreach (MySqlParameter parameter in cmdParms)
                {
                    if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) &&
                        (parameter.Value == null))
                    {
                        parameter.Value = DBNull.Value;
                    }
                    cmd.Parameters.Add(parameter);
                }
            }
        }

    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值