C# 使用参数插入到表中

C# 使用参数插入到表中,c#,asp.net,sql,sql-server,C#,Asp.net,Sql,Sql Server,我的问题是,我试图通过在Sql代码中使用2个where语句来插入到表中 我的代码: using (SqlConnection conn = new SqlConnection(@"Connection String")) { conn.Open(); using (var cmd = new SqlCommand(@"INSERT INTO AssignPlan (Reps, Sets, WeightOrTime, Date, MemberId, Exercise

我的问题是,我试图通过在Sql代码中使用2个where语句来插入到表中

我的代码:

using (SqlConnection conn = new SqlConnection(@"Connection String"))
{
   conn.Open();

   using (var cmd = new SqlCommand(@"INSERT INTO AssignPlan
         (Reps, Sets, WeightOrTime, Date, MemberId, ExerciseId) 
         Select @Reps, @Sets, @WeightOrTime, @Date, 
         Members.MemberId From Members Where Members.Username = @Username, 
         ExerciseDisplay.ExerciseId From ExerciseDisplay 
         Where ExerciseDisplay.ExerciseName = @Exercise", conn))
   {
      cmd.Parameters.AddWithValue("@Reps", txtReps.Text);
      cmd.Parameters.AddWithValue("@Sets", txtSets.Text);
      cmd.Parameters.AddWithValue("@WeightOrTime", txtWeight.Text);
      cmd.Parameters.AddWithValue("@Date", txtDate.Text);
      cmd.Parameters.AddWithValue("@Username", lblRegistered.Text);
      cmd.Parameters.AddWithValue("@Exercise", txtName.Text);

      cmd.ExecuteNonQuery();

      Response.Redirect("Success.aspx");
   }

   conn.Close();

有没有关于如何重新表述我的SQL语句的想法?任何帮助都将不胜感激

假设成员和ExerciseDisplay之间没有关系,您可以执行交叉联接并过滤结果:

using (var cmd = new SqlCommand(
    " INSERT INTO AssignPlan " + 
    " (Reps, Sets, WeightOrTime, Date, MemberId, ExerciseId)  " + 
    " Select  " + 
    " @Reps, @Sets, @WeightOrTime, @Date, Members.MemberId, ExerciseDisplay.ExerciseId " + 
    " From Members, ExerciseDisplay  " + 
    " Where ExerciseDisplay.ExerciseName = @Exercise " + 
    " AND Members.Username = @Username ", conn)) 
或者,由于您只是从每个表中提取一个值,子查询也应该可以工作:

using (var cmd = new SqlCommand(
    " INSERT INTO AssignPlan " + 
    " (Reps, Sets, WeightOrTime, Date, MemberId, ExerciseId)  " + 
    " Select  " + 
    " @Reps, @Sets, @WeightOrTime, @Date, " +
    " (SELECT MemberId FROM Members WHERE Username = @Username), " +
    " (SELECT ExerciseId FROM ExerciseDisplay WHERE ExerciseName = @Exercise) "  
    , conn)) 

但这要求每个子查询只返回一个值。

假设成员和ExerciseDisplay之间没有关系,则可以执行交叉联接并过滤结果:

using (var cmd = new SqlCommand(
    " INSERT INTO AssignPlan " + 
    " (Reps, Sets, WeightOrTime, Date, MemberId, ExerciseId)  " + 
    " Select  " + 
    " @Reps, @Sets, @WeightOrTime, @Date, Members.MemberId, ExerciseDisplay.ExerciseId " + 
    " From Members, ExerciseDisplay  " + 
    " Where ExerciseDisplay.ExerciseName = @Exercise " + 
    " AND Members.Username = @Username ", conn)) 
或者,由于您只是从每个表中提取一个值,子查询也应该可以工作:

using (var cmd = new SqlCommand(
    " INSERT INTO AssignPlan " + 
    " (Reps, Sets, WeightOrTime, Date, MemberId, ExerciseId)  " + 
    " Select  " + 
    " @Reps, @Sets, @WeightOrTime, @Date, " +
    " (SELECT MemberId FROM Members WHERE Username = @Username), " +
    " (SELECT ExerciseId FROM ExerciseDisplay WHERE ExerciseName = @Exercise) "  
    , conn)) 

但这要求每个子查询只返回一个值。

假设成员和ExerciseDisplay之间没有关系,则可以执行交叉联接并过滤结果:

using (var cmd = new SqlCommand(
    " INSERT INTO AssignPlan " + 
    " (Reps, Sets, WeightOrTime, Date, MemberId, ExerciseId)  " + 
    " Select  " + 
    " @Reps, @Sets, @WeightOrTime, @Date, Members.MemberId, ExerciseDisplay.ExerciseId " + 
    " From Members, ExerciseDisplay  " + 
    " Where ExerciseDisplay.ExerciseName = @Exercise " + 
    " AND Members.Username = @Username ", conn)) 
或者,由于您只是从每个表中提取一个值,子查询也应该可以工作:

using (var cmd = new SqlCommand(
    " INSERT INTO AssignPlan " + 
    " (Reps, Sets, WeightOrTime, Date, MemberId, ExerciseId)  " + 
    " Select  " + 
    " @Reps, @Sets, @WeightOrTime, @Date, " +
    " (SELECT MemberId FROM Members WHERE Username = @Username), " +
    " (SELECT ExerciseId FROM ExerciseDisplay WHERE ExerciseName = @Exercise) "  
    , conn)) 

但这要求每个子查询只返回一个值。

假设成员和ExerciseDisplay之间没有关系,则可以执行交叉联接并过滤结果:

using (var cmd = new SqlCommand(
    " INSERT INTO AssignPlan " + 
    " (Reps, Sets, WeightOrTime, Date, MemberId, ExerciseId)  " + 
    " Select  " + 
    " @Reps, @Sets, @WeightOrTime, @Date, Members.MemberId, ExerciseDisplay.ExerciseId " + 
    " From Members, ExerciseDisplay  " + 
    " Where ExerciseDisplay.ExerciseName = @Exercise " + 
    " AND Members.Username = @Username ", conn)) 
或者,由于您只是从每个表中提取一个值,子查询也应该可以工作:

using (var cmd = new SqlCommand(
    " INSERT INTO AssignPlan " + 
    " (Reps, Sets, WeightOrTime, Date, MemberId, ExerciseId)  " + 
    " Select  " + 
    " @Reps, @Sets, @WeightOrTime, @Date, " +
    " (SELECT MemberId FROM Members WHERE Username = @Username), " +
    " (SELECT ExerciseId FROM ExerciseDisplay WHERE ExerciseName = @Exercise) "  
    , conn)) 


但这要求每个子查询只返回一个值。

最简单的解决方案是在应该是不同的列上进行排序。您应该解释users表和ExerciseDisplay表之间的关系。由于此查询不是有效的SQL语句,您不能有两个from语句,您必须将Members表连接到公共字段上的ExerciseDisplay表,然后只使用一个Where语句。我完全不清楚此查询。您是想在一次操作中插入两个表,还是想在一个表中插入参数值以及其他两个表之间的联接结果?尽管我很欣赏使用语句和参数化查询的热情。。。我觉得这是一个悲伤的日子,因为这让你获得了3张选票;)也就是说,您需要加入表。此查询将无法按原样工作。最简单的解决方案是在应该不同的列上进行查询。您应该解释users表和ExerciseDisplay表之间的关系。由于此查询不是有效的SQL语句,您不能有两个from语句,您必须将Members表连接到公共字段上的ExerciseDisplay表,然后只使用一个Where语句。我完全不清楚此查询。您是想在一次操作中插入两个表,还是想在一个表中插入参数值以及其他两个表之间的联接结果?尽管我很欣赏使用语句和参数化查询的热情。。。我觉得这是一个悲伤的日子,因为这让你获得了3张选票;)也就是说,您需要加入表。此查询将无法按原样工作。最简单的解决方案是在应该不同的列上进行查询。您应该解释users表和ExerciseDisplay表之间的关系。由于此查询不是有效的SQL语句,您不能有两个from语句,您必须将Members表连接到公共字段上的ExerciseDisplay表,然后只使用一个Where语句。我完全不清楚此查询。您是想在一次操作中插入两个表,还是想在一个表中插入参数值以及其他两个表之间的联接结果?尽管我很欣赏使用语句和参数化查询的热情。。。我觉得这是一个悲伤的日子,因为这让你获得了3张选票;)也就是说,您需要加入表。此查询将无法按原样工作。最简单的解决方案是在应该不同的列上进行查询。您应该解释users表和ExerciseDisplay表之间的关系。由于此查询不是有效的SQL语句,您不能有两个from语句,您必须将Members表连接到公共字段上的ExerciseDisplay表,然后只使用一个Where语句。我完全不清楚此查询。您是想在一次操作中插入两个表,还是想在一个表中插入参数值以及其他两个表之间的联接结果?尽管我很欣赏使用语句和参数化查询的热情。。。我觉得这是一个悲伤的日子,因为这让你获得了3张选票;)也就是说,您需要加入表。此查询不会按原样工作。我想知道WHERE的存在是否有助于减少两个表的笛卡尔乘积的影响。我想知道WHERE的存在是否有助于减少两个表的笛卡尔乘积的影响。我想知道WHERE的存在是否有助于减少两个表的笛卡尔乘积的影响WHERE有助于减少两个表的笛卡尔乘积的影响。我想知道WHERE的存在是否有助于减少两个表的笛卡尔乘积的影响。