C# 遍历列表循环写入MySQL

问题再现

之前的一个项目,需求是:根据输入的日期、开始时间、结束时间、项目、项目时长、连续发布天数生成项目数据。前端截图如图1所示。
在这里插入图片描述
图1. 前端截图

之前是使用PHP做的,核心代码如下所示:

for ($i = 0; $i < count($list); $i++) {
    $date = $list[$i];
    while ($startTime < $endTime) {
        $Time_1 = date("H:i", $startTime);
        $Time_2 = date("H:i", $startTime + $duration * 60); // 加时间(分钟)
        $sql = $sql . "('$testId','$date','$projectName','$tips','$Time_1','$Time_2','$duration'),";
        $startTime = $Time_2;
    }
    $startTime = $rStartTime;
    $endTime = $rEndTime;
}

现在项目重构,选用.NET WebAPI对其进行重构,由于C#中没有date类型,所以处理起来有些麻烦,需要进行类型转换。

解决方案

数据类型选择

首先,核心代码主题不需要大的改动,改动主要在数据处理上。主要的变量及数据类型如表1所示。

表1. 主要变量及数据类型

变量数据类型
dateDateTime
start_timeTimeSpan
end_timeTimeSpan
durationint

MySQL数据库连接

考虑到成本因素,项目采用的是MySQL数据库,一般简单的数据处理使用Entity Framework框架进行就可以,但是目前的这种需求采用原生sql语句更为方便。

// 连接数据库,执行sql语句
string constructorString = "server=XXXXXX;user id=XXXXXX;password=XXXXXX;port=XXXX;database=XXXXXX";
MySqlConnection myConnnect = new MySqlConnection(constructorString);
myConnnect.Open();                                       // 打开数据库连接
MySqlCommand myCmd = new MySqlCommand(sql, myConnnect);  // 实例化
myCmd.ExecuteNonQuery();                                 // 执行sql语句
myConnnect.Close();                                      // 关闭数据库连接

完整代码

/// <summary>
/// 发布课程表class_list
/// </summary>
/// <param name="openid"></param>
/// <param name="date"></param>
/// <param name="start_time"></param>
/// <param name="end_time"></param>
/// <param name="object_id"></param>
/// <param name="duration"></param>
/// <returns></returns>
public static appReturnResult InsertClass(string openid, DateTime date, TimeSpan start_time, TimeSpan end_time, int days, int object_id, int duration)
{
    appReturnResult obj = new appReturnResult();
    try
    {
        // 获取coach_id
        string str_1 = GetCoachInfoByOpenid(openid).data["coach_info"];
        string str_2 = str_1.Substring(1, str_1.Length - 2);
        int coach_id = JsonConvert.DeserializeObject<klc_coach_all>(str_2).id;
        int school_id = JsonConvert.DeserializeObject<klc_coach_all>(str_2).school_id;
        // 存储传入的start_tim,end_time
        TimeSpan input_start_time = start_time;
        TimeSpan input_end_time = end_time;

        // 开始拼装原生sql语句对MySQL数据库进行INSERT
        string sql = "INSERT INTO klc_classlist (date,start_time,end_time, coach_id, object_id, school_id, duration,gmt_create,gmt_modified) VALUES";
        // 将连续发布的开始日期和结束日期装入list
        var list = MySystem.DateList((ulong)new DateTimeOffset(date).ToUnixTimeSeconds(), (ulong)(new DateTimeOffset(date).ToUnixTimeSeconds() + days * 24 * 3600));
        // 遍历list中的日期
        for (var j = 0; j < list.Count(); j++)
        {
            DateTime new_date = Convert.ToDateTime(list[j]);
            while (start_time < end_time)
            {
                var time_1 = start_time;
                var time_2 = new TimeSpan(start_time.Hours, start_time.Minutes + duration, 0);
                sql += String.Format("('{0}','{1}','{2}',{3},{4},{5},{6},'{7}','{8}'),", new_date.ToString("yyyy-MM-dd"), time_1, time_2, coach_id, object_id, school_id, duration, DateTime.Now.ToString("yyyy-MM-dd"), DateTime.Now.ToString("yyyy-MM-dd"));
                start_time = time_2;
            }
            // 一个日期循环完成后重置start_time和end_time
            start_time = input_start_time;
            end_time = input_end_time;
        }
        // 去除拼装完成的sql语句最后的逗号
        sql = sql.Substring(0, sql.Length - 1);
        // 连接数据库,执行sql语句
        string constructorString = "server=XXXXXX;user id=XXXXXX;password=XXXXXX;port=XXXX;database=XXXXXX";
        MySqlConnection myConnnect = new MySqlConnection(constructorString);
        myConnnect.Open();                                       // 打开数据库连接
        MySqlCommand myCmd = new MySqlCommand(sql, myConnnect);  // 实例化
        myCmd.ExecuteNonQuery();                                 // 执行sql语句
        myConnnect.Close();                                      // 关闭数据库连接

        // 返回信息
        obj.message = "生成课程表成功";
        obj.result = true;
    }
    catch (Exception e)
    {
        obj.message = "生成课程表失败";
        obj.addValue("error", e.ToString());
        obj.result = false;
    }
    return obj;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

戴翔的技术博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值