我的问题是我试图通过在我的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语句的任何想法?任何帮助将不胜感激!
答案 0 :(得分:3)
假设会员与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))
但这要求每个子查询只返回一个值。