无法使用数据库中的数据集检索数据

时间:2012-10-19 17:05:26

标签: c# web-services

我正在编写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

2 个答案:

答案 0 :(得分:0)

如果查询未返回任何行,则不会向DataSet添加任何表。因此

dataSet.Tables["User"]

可能是null。

您需要检查Fill方法的返回值以确保返回行。

MSDN documentation填充方法返回一个表示以下内容的整数:

  

在DataSet中成功添加或刷新的行数。这不包括受不返回行的语句影响的行。

此外,您的查询对sql注入(安全漏洞)开放。您需要将其更改为使用parameterized queries

答案 1 :(得分:0)

在传递电子邮件ID时是否使用单引号或在传递电子邮件ID时尝试使用like语句。您是否检查了catch块中是否有任何异常。

可能的原因是catch块中可能发生异常,它被抑制,之后if语句执行并抛出了一个错误,即找不到用户表。