繁体   English   中英

用C#在mysql中插入多行的最佳方法?

[英]Best way to insert multiple rows in mysql with c#?

我需要使用C#将多个数据行输入到此MySQL中。 在此处输入图片说明

我在下面有用于插入一行的这段代码,但是我不确定如何一次处理多行。 我最多需要在表中输入8行。 我应该让多个构造函数还是有更好的方法?

public class Vo2phases
{
    //properties for vo2max phases
    public int VO2TestID { get; set; }
    public int Phase { get; set; }
    public DateTime Time { get; set; }
    public int Intensity { get; set; }
    public double RER { get; set; }
    public int Borgscale { get; set; }
    public int Pulse { get; set; }

    public Vo2phases(int _vo2testid, int _phase, 
                     DateTime _time, int _intensity, 
                     double _rer, int _borgscale, int _pulse)
    {
        //set parameters for phases
        VO2TestID = _vo2testid;
        Phase = _phase;
        Time = _time;
        Intensity = _intensity;
        RER = _rer;
        Borgscale = _borgscale;
        Pulse = _pulse;
    }

    public void addToDB()
    {
        try
        {
            //prepare for query
            var cmd = MySQL.readyQuery();

            //insert testdata to Vo2test
            cmd.CommandText = "INSERT INTO vo2phases_tb (Vo2_TestID, Phase, Time, Intensity, RER, Borgscale, Pulse) VALUES (@Vo2testid, @phase, @time, @intensity, @rer, @borgscale, @pulse);";

            cmd.Prepare();
            cmd.Parameters.AddWithValue("@vo2testid", VO2TestID);
            cmd.Parameters.AddWithValue("@phase", Phase);
            string TimeString = "00:" + Convert.ToString(Time.TimeOfDay.Hours) + ":" + Convert.ToString(Time.TimeOfDay.Minutes);
            cmd.Parameters.AddWithValue("@time", TimeString);
            cmd.Parameters.AddWithValue("@intensity", Intensity);
            cmd.Parameters.AddWithValue("@rer", RER);
            cmd.Parameters.AddWithValue("@borgscale", Borgscale);
            cmd.Parameters.AddWithValue("@pulse", Pulse);

            cmd.ExecuteNonQuery();

            cmd.Connection.Close();
        }
        catch (MySqlException ex)
        {
            Console.WriteLine(ex.Message);
        }

    }

您的问题是您似乎只希望代码中有1个Vo2phase。

尽管这在概念上甚至在执行上都不是问题,但由于没有考虑提交的集合,因此缺少它。

我会重载addToDB以便它接受List作为参数。

public void addToDB(List<Vo2phase> phases)
{
    try
    {
        //prepare for query
        var cmd = MySQL.readyQuery();

        //insert testdata to Vo2test
        cmd.CommandText = "INSERT INTO vo2phases_tb (Vo2_TestID, Phase, Time, Intensity, RER, Borgscale, Pulse) VALUES (@Vo2testid, @phase, @time, @intensity, @rer, @borgscale, @pulse);";

        cmd.Prepare();
        foreach (Vo2phase phase in phases)
        {
            cmd.Parameters.AddWithValue("@vo2testid", VO2TestID);
            cmd.Parameters.AddWithValue("@phase", Phase);
            string TimeString = "00:" + Convert.ToString(Time.TimeOfDay.Hours) + ":" + Convert.ToString(Time.TimeOfDay.Minutes);
            cmd.Parameters.AddWithValue("@time", TimeString);
            cmd.Parameters.AddWithValue("@intensity", Intensity);
            cmd.Parameters.AddWithValue("@rer", RER);
            cmd.Parameters.AddWithValue("@borgscale", Borgscale);
            cmd.Parameters.AddWithValue("@pulse", Pulse);

            cmd.ExecuteNonQuery();

            cmd.Parameters.Clear();
        }
        cmd.Connection.Close();
    }
    catch (MySqlException ex)
    {
        Console.WriteLine(ex.Message);
    }

}

现在创建列表,您只需添加一大堆Vo2phases:

List<Vo2phase> Phases = new List<Vo2phase>
{
    new Vo2phase(VO2TestID = testId, Phase = i ...),
    new Vo2phase(VO2TestID = testId, Phase = i ...),
    new Vo2phase(VO2TestID = testId, Phase = i ...),
    new Vo2phase(VO2TestID = testId, Phase = i ...),
    new Vo2phase(VO2TestID = testId, Phase = i ...),
    new Vo2phase(VO2TestID = testId, Phase = i ...),
    new Vo2phase(VO2TestID = testId, Phase = i ...)

    // add the parameters as you normally would.
};

希望这可以帮助!

如果我期望有大量的插入,我的方法是使addToDB成为一个静态方法,该方法需要一个连接并收集Vo2phases 当您仅将其用于单个命令执行时,您几乎会为此prepare而失去任何利益,并实际上为此付出了一些成本。

除非准备好的命令可以作为静态成员变量进行维护,否则不会不断地重新创建它; 但是,您可能会花一些代码来验证该命令自上次使用以来没有“变坏”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM