C#返回数据对象问题

时间:2013-02-06 12:31:32

标签: c# sql object

我正在尝试从我的数据库返回一个数据对象,以便我可以访问(例如)我的ASP.NET网站中的客户ID。在客户登录对象时返回。但是,我收到了错误:

   'Invalid attempt to read when no data is present.' 

我已经在数据库(执行我的存储过程)上完成了一个sql查询,它返回了正确的信息,所以我知道它就在那里。我只能假设以下方法有问题:

    using (SqlConnection sqlConn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
        {
            using (SqlCommand sqlComm = new SqlCommand("Select_Customer_By_UserName_And_Password", sqlConn))
            {
                sqlComm.Connection.Open();
                try
                {
                    sqlComm.CommandType = CommandType.StoredProcedure;
                    sqlComm.Parameters.Add("@Username", SqlDbType.NVarChar, 25).Value = pUsername;
                    sqlComm.Parameters.Add("@Password", SqlDbType.NVarChar, 25).Value = pPassword;

                    using (SqlDataReader sqlDR = sqlComm.ExecuteReader(CommandBehavior.SingleRow))
                    {
                        if (sqlDR.HasRows)
                        {
                            //Creating the new object to be returned by using the data from the database.
                            return new Customer
                            {
                                CustomerID = Convert.ToInt32(sqlDR["CustomerID"])
                            };
                        }
                        else
                            return null;
                    }
                }
                catch (Exception)
                {
                    throw;
                }
                finally
                {
                    sqlComm.Connection.Close();
                }
            }
        }

1 个答案:

答案 0 :(得分:3)

您需要调用sqlDR.Read(),否则“记录指针”将指向记录。 HasRows仅表示您实际可以阅读的行。要阅读每一行(或只是第一行),您需要拨打Read一次或while循环。

例如:

if (reader.HasRows)
{
    while (reader.Read())
        ...
}

您的代码应为:

using (SqlDataReader sqlDR = sqlComm.ExecuteReader(CommandBehavior.SingleRow))
{
    if (sqlDR.Read())
    {
        //Creating the new object to be returned by using the data from the database.
        return new Customer
        {
            CustomerID = Convert.ToInt32(sqlDR["CustomerID"])
        };
    }
    else
        return null;
}

顺便说一下:祝贺使用using和参数化查询!