[英]C# to mysql - inserting new row to table with foreign key
我需要使用C#在mysql表中插入新行。 该表如下所示 ,并包含一个外键列。 我使用下面的代码连接到数据库并插入数据。
public virtual void addToDB()
{
try
{
//prepare for query
var cmd = MySQL.readyQuery();
//insert testdata to Vo2test
cmd.CommandText = "INSERT INTO vo2test_tb(ClientID, Weight, Methods, TimeOfDay, Date, StartResistance, Endresistance, TheoreticalMaxPulse, FatPercent3point, FatPercent7point, VO2_max, FitnessRating, HRmax, RERmax, TestTime, Raw_test_data) VALUES((SELECT UserID from user_tb WHERE UserID = '@UserID'), '@Weight', '@Method', '@Timeofday', '@Date', '@Startresistance', '@Endresistance', '@Theoreticalmaxpulse', '@Fatprocent3p', '@Fatprocent7p', '@vo2max', '@fitnessrating', '@hrmax', '@rermax', '@testtime', '@rawtestdata')";
cmd.Prepare();
//insert parameters som skal ændres:
cmd.Parameters.AddWithValue("@UserID", UserID);
cmd.Parameters.AddWithValue("@Weight", Weight);
cmd.Parameters.AddWithValue("@Method", Method);
//coverts date to 0000-00-00
string DateString = Convert.ToString(TestDate.Date.Date.Year) + "-" + Convert.ToString(TestDate.Date.Month) + "-" + Convert.ToString(TestDate.Date.Day);
cmd.Parameters.AddWithValue("@Date", DateString);
//converts time to 00:00:00.
string TimeString = Convert.ToString(TimeOfDay.Hour) + ":" + Convert.ToString(TimeOfDay.Minute) + ":00";
cmd.Parameters.AddWithValue("@Timeofday", TimeString);
cmd.Parameters.AddWithValue("@Startresisstance", StartResistance);
cmd.Parameters.AddWithValue("@Endressistance", EndResistance);
cmd.Parameters.AddWithValue("@TheoreticalMaxPulse", TheoreticMaxPulse);
cmd.Parameters.AddWithValue("@FatPercent3point", FatPercent3Point);
cmd.Parameters.AddWithValue("@FatPercent7point", FatPercent7Point);
cmd.Parameters.AddWithValue("@VO2_max", Vo2Max);
cmd.Parameters.AddWithValue("@FitnessRating", FitnessRating);
cmd.Parameters.AddWithValue("@HRmax", HRmax);
cmd.Parameters.AddWithValue("@RERmax", RERmax);
cmd.Parameters.AddWithValue("@TestTime", TimeOfDay);
cmd.Parameters.AddWithValue("@Raw_test_data", RawTestData);
cmd.ExecuteNonQuery();
//close connection
cmd.Connection.Close();
}
catch (MySqlException ex)
{
Console.WriteLine(ex.Message);
}
}
当我运行它时,会告诉我ClientID不能为null,但是如果我只是在Adminer中运行sql查询,则效果很好。
您的插入查询中的sub select没有意义。 为什么要进行子选择以插入您已经拥有的值。
SELECT UserID from user_tb WHERE UserID = '@UserID'
只需直接插入@UserID。
同样,您已将所有@参数包装在查询字符串中的单引号中。 您不需要这个。 参数化将在后台为您处理引号。 删除所有单引号,使其仅显示为:
cmd.CommandText = "INSERT INTO vo2test_tb(ClientID, Weight, Methods, TimeOfDay, Date,
StartResistance, Endresistance, TheoreticalMaxPulse, FatPercent3point, FatPercent7point,
VO2_max, FitnessRating, HRmax, RERmax, TestTime, Raw_test_data)
VALUES((SELECT ClientID from user_tb WHERE UserID = @UserID), @Weight, @Method, @Timeofday,
@Date, @Startresistance, @Endresistance, @Theoreticalmaxpulse, @Fatprocent3p, @Fatprocent7p,
@vo2max, @fitnessrating, @hrmax, @rermax, @testtime, @rawtestdata)";
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.