首页 > 解决方案 > REST Web 服务不会返回仅输入一个人的数据

问题描述

我正在尝试使用 REST api 从 mssql 数据库中获取有关说用户的单个信息

当我打电话给这个

https://localhost:44320/api/EmployeeDB

它使用此代码加载所有信息

    public IEnumerable<EmployeeDB> Get()
    {
        SqlConnection con = new SqlConnection(connectionstring);
        DataTable dt = new DataTable();
        con.Open();

        string query = "select* from [EmployeeDB].[dbo].[EmployeeTable]";
        SqlDataAdapter adapter = new SqlDataAdapter(query, con);
        adapter.Fill(dt);

        List<EmployeeDB> empdb = new List<Models.EmployeeDB>(dt.Rows.Count);
        if (dt.Rows.Count > 0)
        {
            foreach (DataRow empdbrecord in dt.Rows)
            {
                empdb.Add(new ReadEmployee(empdbrecord));
            }
        }
        return empdb;
    }

这完美地工作。

现在我想用这个代码库为单个用户使用相同的假脱机信息

    public IEnumerable<EmployeeDB> FetchStaffInfoByName(string Fullname) 
    {
        SqlConnection con = new SqlConnection(connectionstring);
        DataTable dt = new DataTable();
        con.Open();

        string query = "select * from [EmployeeDB].[dbo].[EmployeeTable] where Fullname =" + Fullname;
        SqlDataAdapter adapter = new SqlDataAdapter(query, con);
        adapter.Fill(dt);

        List<EmployeeDB> empdb = new List<Models.EmployeeDB>(dt.Rows.Count);
        if (dt.Rows.Count > 0)
        {
            foreach (DataRow empdbrecord in dt.Rows)
            {
                empdb.Add(new ReadEmployee(empdbrecord));
            }
        }
        return empdb;
    }

并像这样在 Postman 中运行它

https://localhost:44320/api/EmployeeDB?fullname=James Hall

这失败了。我不想只返回 James Hall(例如)的结果,而是返回数据库中的所有内容,我想在这种情况下进行一些认真的过滤,请就我必须做的事情提出建议。

标签: c#sqlsql-serverrest

解决方案


您必须在查询中的全名属性周围放置单引号(就像您通过 sql 查询它一样):

"select * from [EmployeeDB].[dbo].[EmployeeTable] where Fullname = '" + Fullname + "'"";

我还建议检查通过参数添加这样的动态属性: https ://docs.microsoft.com/en-us/dotnet/api/system.data.sqlclient.sqldataadapter.selectcommand?view=dotnet-plat-ext -3.1


推荐阅读