繁体   English   中英

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

[英]Cannot retrive data using dataset from database

我正在编写Web服务方法来检索用户的数据。 为了清楚起见,我在数据库中有一个名为User的表,该表具有ID,fName,lName,emailAddress,用户名,密码和reg_ID。 如果我使用ID来检索数据,它将可以工作,但是如果我在“ where”子句中使用emailAddress,则会出现以下错误。

Web服务方式

 [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 )开始

如果查询不返回任何行,则不会将任何表添加到DataSet中。 从而

dataSet.Tables["User"]

可能为空。

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

根据MSDN文档 ,fill方法返回一个整数,表示:

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

此外,您的查询对sql注入(一个安全漏洞)开放。 您将需要更改它以使用参数化查询

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM