C# sql数据读取器在我想要使用它时变为空
我真的需要你的帮助,我正在做一个学校的项目。 我使用SqlDataReader来存储我的数据,在存储数据后(在调试SqlDataReader结果视图时,我检查了它,结果视图中充满了我的数据),当我尝试使用SqlDataReader变量时,它直接将所有数据变为空?? 在到达if行之前,我的sqlreader中有所有的数据,但是当我调试if行时,它显示sqlreader是空的C# sql数据读取器在我想要使用它时变为空,c#,C#,我真的需要你的帮助,我正在做一个学校的项目。 我使用SqlDataReader来存储我的数据,在存储数据后(在调试SqlDataReader结果视图时,我检查了它,结果视图中充满了我的数据),当我尝试使用SqlDataReader变量时,它直接将所有数据变为空?? 在到达if行之前,我的sqlreader中有所有的数据,但是当我调试if行时,它显示sqlreader是空的 class ServicesProvider { public static SqlConnection
class ServicesProvider
{
public static SqlConnection connection = new SqlConnection(myprovider);
public static bool LogInVerification(string NickName,string Password)
{
SqlDataReader SqlReader;
SqlCommand command;
try
{
command = new SqlCommand("Check_LogIn", connection);
command.CommandType = CommandType.StoredProcedure;
SqlParameter prm=null;
prm = new SqlParameter("@Password", SqlDbType.VarChar);
prm.Value=NickName;
prm.Direction=ParameterDirection.Input;
command.Parameters.Add(prm);
prm = new SqlParameter("@NickName", SqlDbType.VarChar);
prm.Value=Password;
prm.Direction=ParameterDirection.Input;
command.Parameters.Add(prm);
try
{
connection.Open();
SqlReader = command.ExecuteReader();
if (SqlReader["NickName"].ToString()== "1")
return true;;
}
catch (Exception ERROR)
{
Console.WriteLine(ERROR.Message);
}
}
catch (Exception error)
{
Console.WriteLine(error.Message);
}
return false;
}
}
此代码就是问题所在:
SqlReader = command.ExecuteReader();
if (SqlReader["NickName"].ToString()== "1")
当ExecuteReader
返回时,读卡器位于第一个结果之前。您需要调用Read
读取结果。通常是:
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
// Handle the data for this row
}
}
注:
-
< LI>如果只想读取单个值,请考虑使用<代码> Excel UndoSCAR < /COD>
- 对于每个可使用的资源(连接、命令、读取器),您应该有一个
语句using
- 局部变量通常采用camelCased(不像
那样使用PASCALCASE)SqlReader
- 使用单个静态连接是一个非常糟糕的主意。创建连接,并在每次执行数据库操作时打开它,并在完成该操作时进行处理(使用
语句将自动执行该操作)
- 看起来您可能正在以纯文本形式存储密码。这显然是一个巨大的安全问题
- 此代码就是问题所在:
SqlReader = command.ExecuteReader();
if (SqlReader["NickName"].ToString()== "1")
当ExecuteReader
返回时,读卡器位于第一个结果之前。您需要调用Read
读取结果。通常是:
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
// Handle the data for this row
}
}
注:
-
< LI>如果只想读取单个值,请考虑使用<代码> Excel UndoSCAR < /COD>
- 对于每个可使用的资源(连接、命令、读取器),您应该有一个
语句using
- 局部变量通常采用camelCased(不像
那样使用PASCALCASE)SqlReader
- 使用单个静态连接是一个非常糟糕的主意。创建连接,并在每次执行数据库操作时打开它,并在完成该操作时进行处理(使用
语句将自动执行该操作)
- 看起来您可能正在以纯文本形式存储密码。这显然是一个巨大的安全问题