【问题标题】:Sql to select the prerequisite of a certain coursesql选择某门课程的先决条件
【发布时间】:2021-03-05 02:05:54
【问题描述】:

我有一张表,其中包含以下课程详细信息:

并且,在 Windows 中,我放置了一个文本框和一个按钮,当学生写下课程名称时,可以看到该课程的先决条件要求如下:

所以我尝试使用以下代码:

conn.Open();
        SqlCommand cmd = conn.CreateCommand();
        cmd.CommandType = CommandType.Text;
        cmd.CommandText = "select Name from Courses where (Name = '" + textBox2.Text + "') and  Preq = Code";
        cmd.ExecuteNonQuery();
        DataTable dt = new DataTable();
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        da.Fill(dt); 
        dataGridView3.DataSource = dt;
        conn.Close();
        textBox2.Text = "";

但是,代码给了我没有任何数据的名称列,如下所示:

另外,有没有办法在课程没有任何要求时显示消息,例如“本课程没有先决条件要求”之类的?

【问题讨论】:

  • 在表的所有行中,Preq 和 Code 列不相等。因此,Preq = Code 条件永远不会满足。
  • 删除cmd.ExecuteNonQuery(); 电话。完全没用。
  • 在sql查询中也使用参数而不是字符串连接。
  • 要“显示消息”,您可以通过int rows = cmd.ExecuteNonQuery();获取受影响的行数。
  • 请不要破坏您的帖子。通过在 Stack Exchange 网络上发帖,您已在 CC BY-SA 4.0 license 下授予 Stack Exchange 分发该内容的不可撤销的权利(即无论您未来的选择如何)。根据 Stack Exchange 政策,帖子的非破坏版本是分发的版本,因此,任何破坏行为都将被撤销。如果您想了解更多关于删除帖子的信息,请参阅:How does deleting work?

标签: c# sql visual-studio


【解决方案1】:

您的查询错误,以下查询返回给定课程名称所需的课程列表:

select Name from Courses 
where code IN ( select PREQ from Courses where 
Name = '" + textBox2.Text + "')

还可以更容易地处理在您的 c# 代码中显示一条消息以显示是否没有 preq。您可以检查 dt 是否为空。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-07
    • 1970-01-01
    相关资源
    最近更新 更多