【问题标题】:HTTPGet With Multiple Fields To Get Data From DatabaseHTTPGet 使用多个字段从数据库中获取数据
【发布时间】:2020-08-04 11:44:22
【问题描述】:

我有一个包含学生的数据库。为了让学生通过他们的 Id 使用 HTTP Get,这里是我的操作方法的一个片段:

    [HttpGet("{id}", Name = "Get")]
 public Student Get(int id)
{
     DataSet data = objDB.GetDataSet("SELECT * FROM Students WHERE Id = " + id.ToString());
}

现在我想创建另一个 HTTP Get,它可以通过学生的姓氏和年级来获取学生。在我的数据库中,我有一个姓氏和年级的字段,就像 id 一样。但是我无法同时检查它们。我稍后将有 2 个文本框,用户可以在其中输入姓氏和成绩,并且将显示与输入的姓氏和成绩匹配的所有学生。到目前为止,这是我的代码:(我的数据库中的姓氏和等级是 varchar)

[HttpGet("{lastname}/{grade}", Name = "GetLastNameGrade")]
public Student Get (string lastname, string grade)
{
DataSet ds = objDB.GetDataSet("SELECT * FROM Students WHERE LastName = " + lastname.ToString() + "AND" + "SELECT * FROM Students WHERE Grade = " + grade.ToString());

}

这是我的学生课

public int StudentID { get; set; }
public string LastName { get; set; }
public string Grade { get; set; }

我在使用姓氏和年级的 SQL 语句时遇到问题。当我尝试在 Postman 中运行该方法时,我没有显示任何内容。我对自己做错了什么感到困惑。

【问题讨论】:

  • lastname.ToString() 和另一个用单引号括起来。 = '" + lastname.ToString() + "' AND ... 更好的是,您应该使用参数化查询。最好使用 ORM 工具、EF、Dapper、wahtever。
  • 我不确定什么是 ORM 工具,EF,Dapper,我刚开始学习如何制作自己的 Web API 并联系我的数据库。这是你的意思吗:“SELECT * FROM Students WHERE LastName =” + 'lastname.ToString()' + “AND” + “SELECT * FROM Students WHERE Grade =” + 'grade.ToString()');? @OguzOzgul

标签: c# mysql postman asp.net-core-webapi http-get


【解决方案1】:

为了有格式化的代码;

DataSet ds = objDB.GetDataSet("SELECT * FROM Students WHERE LastName = '" + lastname.ToString() + "' AND Grade = '" + grade.ToString() + "'");

这将产生一个有效的 Sql 语句,如

SELECT * FROM Students WHERE LastName = 'OZGUL' AND Grade = 'B+'

【讨论】:

  • 你能解释一下为什么需要那些 ' 而不是 " " 吗?
  • 因为 SQL 标准对字符串内容使用单引号。当您像 LastName = " + lastName.ToString() 这样编写时,它会转换为 LastName = Oguz SQL 语句,这是无效的。您可以对数字类型执行此操作,但不能对 char 类型(char、nchar、varchar、nvarchar)执行此操作跨度>
  • 如果我也想按性别获取它们,它会是 DataSet ds = objDB.GetDataSet("SELECT * FROM Students WHERE Gender = ' " + gender.ToString()'); ?我不确定 OR 部分是否只让男学生或女学生进入 ' 引号。 @OguzOzgul
  • 无论是 char、varchar 等,都应该放在单引号之间。对于布尔类型(Sql 数据类型 BIT)使用 1 或 0。如果 Gender 为 char(1)(F 或 M),请使用单引号,例如 "WHERE Gender = '" + gender.ToString() + "'"
  • 我的数据库中有一些预填充的学生,而性别是一个 varchar,所以它会在单引号之间。但我不确定如何检查男性是否为女性这是正确的方法吗? DataSet ds = objDB.GetDataSet("SELECT * FROM Students WHERE Gender = 'Female' OR 'Male' " + gender.ToString()');? @newtosvelte
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-17
  • 2019-05-01
  • 1970-01-01
  • 2013-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多