[英]Best way to insert multiple rows in mysql with c#?
我在下面有用于插入一行的这段代码,但是我不确定如何一次处理多行。 我最多需要在表中输入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.