【问题标题】:Return an Empty list rather than throwing null exception in c#在 c# 中返回一个空列表而不是抛出空异常
【发布时间】:2018-04-20 14:58:28
【问题描述】:

我正在编写一个 sql 服务来获取服务的项目列表。 方法是这样的,

public List<Items> GetList(string username)
        {
            string sql = "Select * From Items Where username = '{0}'";
            sql = string.Format(sql, Username);
            return base.Get(sql);
        }

Get 方法执行所有代码以从数据库中获取数据并返回列表。 我的问题是,当数据库中不存在用户名时,它会抛出异常“对象引用未设置为对象实例”。我不想抛出异常,而是想返回一个空的项目列表。 Item 对象由属性(ItemID、ItemName、ItemPlace)组成 或者给我任何建议以不同的方式实现它。

ItemID = null,
ItemName = null,
ItemPlace = null

【问题讨论】:

  • 1) 是usernameUsername。选一个。 2)给你带来麻烦的代码在你的基类中,你没有提供,所以没有人可以回答你的问题。
  • return base.Get(sql) ?? new List&lt;Items&gt;(); 可以正常工作,前提是您解决了 username 套管的其他问题。
  • 如果我输入Blacksilver'; DROP TABLE Items; -- 作为我的用户名怎么办?
  • 正如 Blacksilver 指出的那样,如果用户正在输入用户名,那么肯定存在 SQL 注入的可能性。如果不是,它可能是安全的,但不是最佳做法。我希望您有某种非字符串 ID 来识别用户名以外的用户。您应该改用它。您的问题显然在 base.Get() 中。您可以按照 Ron 的建议作为一种解决方法,但如果可以的话,应该修复 Get 以您希望的方式工作。如果因为这不是您的代码而无法实现,请采纳 Ron 的建议。

标签: c#


【解决方案1】:

看一下代码,你必须相应地修改你的代码。

Public List<Items> Get(string sql)
{

 using (SqlConnection connection = new SqlConnection(
               connectionString))
    {
        var  ItemsList = new List<Items>();
        var Items = new Items()
        SqlCommand command = new SqlCommand(sql, connection);       
        SqlDataReader dr = command.ExecuteReader();
        dr = cmd.ExecuteReader();

        while (dr.Read())
        {
               Items.ItemID  = dr["ItemID"].ToString();
               Items.ItemName = dr["ItemName"].ToString();                        
               Items.ItemPlace = dr["ItemPlace"].ToString();
               ItemsList.Add(Items);
        }

        if(ItemsList.Count == 0)
          {
             Items.ItemID = null;
             Items.ItemName = null;
             Items.ItemPlace = null;
             ItemsList.Add(Items);
          }

        return ItemsList;
    } 
}

【讨论】:

  • 我想返回一个空的项目列表,而不是抛出异常这个问题的答案是什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-17
  • 2021-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多