错误 - "没有数据时无效尝试读取".即使数据存在,也使用SQLDataReader

Ana*_*nth 1 c# sql-server sql-server-2005 visual-studio-2010 visual-studio

当我收到此错误消息"没有数据时无效尝试读取"时,我试图使用数据读取器的参数化查询.

但数据是有读者的!

在此输入图像描述

以下是执行此任务的代码行

using (ConnectionManager connectionManager = new ConnectionManager())
{   
    string query = @"SELECT * FROM LoginTab WHERE username=@username " +
              "AND password=@password";

    List<SqlParameter> sqlParameterCollection = new List<SqlParameter>();
    sqlParameterCollection.Add(new SqlParameter("@username", SqlDbType.NVarChar) { Value = userName });
    sqlParameterCollection.Add(new SqlParameter("@password", SqlDbType.NVarChar) { Value = password });

    SqlDataReader sqlDataReader = connectionManager.ExecuteReader(query, CommandType.Text, sqlParameterCollection);

    String roles = sqlDataReader[0].ToString();
    return roles;
}
Run Code Online (Sandbox Code Playgroud)

ExecuteReader函数在另一个类中定义.

public SqlDataReader ExecuteReader(String strcmd, CommandType type, List<SqlParameter> Parametercollections)
{
    connnection = new SqlConnection(Connnectionstring);
    command = new SqlCommand(strcmd, connnection);
    command.CommandType = type;
    foreach (SqlParameter paras in Parametercollections)
    {
        command.Parameters.Add(paras);
    }
    try
    {
        connnection.Open();
        reader = command.ExecuteReader();
    }
    catch (SqlException E)
    {

    }
    finally
    {

    }

    return reader;
}
Run Code Online (Sandbox Code Playgroud)

这可能有什么问题?

Mic*_*Liu 7

当你打电话时SqlCommand.ExecuteReader(),SqlDataReader它给你的是最初定位第一个记录之前.SqlDataReader.Read()在尝试访问任何数据之前,您必须调用以移至第一条记录.SqlDataReader.Read()返回true如果它能够移动到第一条记录; false如果没有记录则返回.

if (sqlDataReader.Read())
{    
    String roles = sqlDataReader[0].ToString();
    return roles;
}
else
{
    // The user name or password is incorrect; return something else or throw an exception.
}
Run Code Online (Sandbox Code Playgroud)