c#asp.net web api控制器-使用sqlcommand从表中获取所有行

vojdkbi0  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(374)

我正在制作一个学校项目所需的webapi服务器,因为我们必须在不同的平台上制作几个应用程序,通过消息进行通信,webapi服务器有get、post和delete方法。
现在我有一个get方法,它将使用id返回表中的一行(例如http://localhost:1442/api/users/1将返回id为1的用户)
代码如下所示:

public User Get(int id)
    {
        SqlDataReader reader = null;
        SqlConnection myConnection = new SqlConnection();
        myConnection.ConnectionString = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=D:\Downloads\SERVER\SERVER\App_Data\dbCoffeeBreak_.mdf;Integrated Security=True";

        SqlCommand sqlCmd = new SqlCommand();
        sqlCmd.CommandType = CommandType.Text;
        sqlCmd.CommandText = "Select * from tbUsers where ID=" + id + "";
        sqlCmd.Connection = myConnection;
        myConnection.Open();
        reader = sqlCmd.ExecuteReader();
        User u = null;
        while (reader.Read())
        {
            u = new User();
            u.ID = Convert.ToInt32(reader.GetValue(0));
            u.Login = reader.GetValue(1).ToString();
            u.Password = reader.GetValue(2).ToString();
            u.Avatar = reader.GetValue(3).ToString();
            u.Email = reader.GetValue(4).ToString();
            u.Online = Convert.ToBoolean(reader.GetValue(5));
        }
        myConnection.Close();
        return u;
    }

但我不知道如何使它,以便通过键入例如只http://localhost:1442/api/users服务器将返回表中的所有列。我试着设置 sqlCmd.CommandText = 为了公正 Select * from tbUsers 但它只返回表中的最后一个用户,而不是所有用户。

ldfqzlk8

ldfqzlk81#

这是因为您只返回来自的最后一个用户 Reader.Read 有几个问题和建议给你
1制造 Id 作为可选参数 t pass any 身份证件 , it will query for all 用户。有了它,您就不需要创建单独的方法来获取所有用户。 2返回List而不是返回单User` ```
public List Get(int? id = null)
{
SqlDataReader reader = null;
SqlConnection myConnection = new SqlConnection();
myConnection.ConnectionString = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=D:\Downloads\SERVER\SERVER\App_Data\dbCoffeeBreak_.mdf;Integrated Security=True";

   SqlCommand sqlCmd = new SqlCommand();
   sqlCmd.CommandType = CommandType.Text;

   if(id !=null)
       sqlCmd.CommandText = "Select * from tbUsers where ID=" + id + "";
   else
       sqlCmd.CommandText = "Select * from tbUsers ";

   sqlCmd.Connection = myConnection;
   myConnection.Open();
   reader = sqlCmd.ExecuteReader();
   List<User> users = List<User>();
   while (reader.Read())
   {
      u = new User();
      u.ID = Convert.ToInt32(reader.GetValue(0));
      u.Login = reader.GetValue(1).ToString();
      u.Password = reader.GetValue(2).ToString();
      u.Avatar = reader.GetValue(3).ToString();
      u.Email = reader.GetValue(4).ToString();
      u.Online = Convert.ToBoolean(reader.GetValue(5));
      users.Add(u);
  }
  myConnection.Close();
  return users; 
}
另外,始终使用参数化查询来防止sql注入攻击
将建议您更新您的查询

sqlCmd.CommandText = "Select * from tbUsers where ID=@Id";
sqlCmd.Parameters.AddWithValue("@Id", id);

相关问题