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