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)
这可能有什么问题?
当你打电话时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)
| 归档时间: |
|
| 查看次数: |
8037 次 |
| 最近记录: |