Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C到mysql-使用外键向表插入新行_C#_Mysql - Fatal编程技术网

C# C到mysql-使用外键向表插入新行

C# C到mysql-使用外键向表插入新行,c#,mysql,C#,Mysql,我需要使用C在mysql表中插入一个新行。 该表将显示,并包含一个外键列。 我使用以下代码连接到数据库并插入数据 public virtual void addToDB() { try { //prepare for query var cmd = MySQL.readyQuery(); //insert testdata to Vo2test cmd

我需要使用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查询,它就可以正常工作

插入查询中的子选择没有意义。为什么要进行子选择以插入已有的值

SELECT UserID from user_tb WHERE UserID = '@UserID'
直接插入@UserID即可

此外,您还将所有@parameters包装在查询字符串中的单引号中。你不需要这个。参数化在后台为您处理引号。删除所有单引号,使其仅显示:

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)";

您确定为ClientID选择的子项正确吗。如果您将UserID与FIrstName进行比较并返回UserID,则看起来不正确。您是否尝试将@by替换为是为了SQLServer@MarrowGnawer在mysqlname中是@,其中FirstName='@UserID'是子查询中的正确比较??删除查询字符串中参数周围的引号。例如“@testtime”应该只是@testtimesorry,Firstname=只是一个测试,我忘了更改。我在代码中更改了I,现在是从user_tb中选择UserID,其中UserID='@UserID'我仍然存在samem问题。@R0ede您的编辑仍然在子查询中返回UserID。它不应该返回ClientID。UserID和ClientID实际上是相同的。我有一个名为user_tb的表,其中有不同类型的用户,其中一个是客户机。clientID是来自user_tb表的外键,该表称为UserID。@R0ede如果UserID是clientID,那么为什么要进行子选择。为什么不直接将@UserID插入ClientID?据我所知,我不能这样做,因为它是一个外键,我需要告诉它从user_tb中的哪一行获取外键。有更好的办法吗?容忍我,我是新手。