我正在编写Web服务方法来检索用户的数据。为了清楚起见,我在我的数据库中有一个名为User的表,它有ID,fName,lName,emailAddress,username,password,reg_ID。如果我使用ID来检索数据,它将起作用,但如果我在“where”子句中使用emailAddress,它会给我以下错误。
网络服务方法
[WebMethod(Description = "Returns Details of User with username")]
public DataSet GetUser(string user)
{
DataSet dataSet = new DataSet();
OleDbConnection oleConn = new OleDbConnection(connString);
try
{
oleConn.Open();
string sql = "SELECT * FROM [User] WHERE [username]=" + user;
OleDbDataAdapter dataAdapter = new OleDbDataAdapter(sql, oleConn);
dataAdapter.Fill(dataSet, "User");
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
finally
{
oleConn.Close();
}
if (dataSet.Tables["User"].Rows.Count <= 0)
return null;
return dataSet;
}
错误
System.NullReferenceException: Object reference not set to an instance of an object.
at UserManagement.UserRegistration.GetUser(String user) in C:\Users\smartamrit\Desktop\SystemSoftware\UserManagement\UserRegistration.asmx.cs:line 170
第170行开始于
if (dataSet.Tables["User"].Rows.Count <= 0
)
答案 0 :(得分:0)
如果查询未返回任何行,则不会向DataSet添加任何表。因此
dataSet.Tables["User"]
可能是null。
您需要检查Fill方法的返回值以确保返回行。
每MSDN documentation填充方法返回一个表示以下内容的整数:
在DataSet中成功添加或刷新的行数。这不包括受不返回行的语句影响的行。
此外,您的查询对sql注入(安全漏洞)开放。您需要将其更改为使用parameterized queries。
答案 1 :(得分:0)
在传递电子邮件ID时是否使用单引号或在传递电子邮件ID时尝试使用like语句。您是否检查了catch块中是否有任何异常。
可能的原因是catch块中可能发生异常,它被抑制,之后if语句执行并抛出了一个错误,即找不到用户表。