我遇到sqlreader问题。它只显示第一个结果,当我需要它来显示列中的所有记录。 我在这个网站上进行了彻底搜索,每个答案似乎都不适合我。 这是我的代码:
str2 = "SELECT CPU FROM Clients";
connection = new SqlConnection(str);
connection.Open();
command = new SqlCommand(str2, connection);
reader = command.ExecuteReader();
try
{
while (reader.Read())
{
num = 0;
string col1Value = reader[0].ToString();
if (reader.HasRows)
{
enumerator = reader.GetEnumerator();
record = (DbDataRecord)enumerator.Current;
if (j.Connect(out j))
{
//string col1Value = reader[0].ToString();//str3 = reader["CPU"].ToString();
num += 1;
MessageBox.Show(col1Value);
if (col1Value == j.GetCPUKey())
{
this.j.XNotify("Connected! Welcome: " + j.GetCPUKey());
MessageBox.Show(col1Value);
connection.Close();
CheckAuth();
break;
}
else
{
MessageBox.Show("You Are Not Authorised!");
connection.Close();
}
if (!j.Connect(out j))
{
MessageBox.Show("Could Not Connect to Default Console");
connection.Close();
}
}
}
}
}
catch (Exception ex)
{
MessageBox.Show("" + ex);
Environment.Exit(0);
connection.Close();
}
请帮助。
答案 0 :(得分:0)
如果这就是您要做的全部(检查“' CPU'是否获得授权)”,那么您有很多代码并不是您真正需要的。
只需要求数据库搜索您想要的CPU值
try
{
if (j.Connect(out j))
{
string cpuToSearchFor = j.GetCPUKey();
str2 = "SELECT CPU FROM Clients WHERE CPU = @cpu";
using(connection = new SqlConnection(str))
using(SqlCommand command = new SqlCommand(str2, connection);
{
connection.Open();
command.Parameters.Add("@cpu", SqlDbType.NVarChar).Value = cpuToSearchFor;
using(reader = command.ExecuteReader())
{
if(reader.HasRows)
{
MessageBox.Show("Authenticated");
j.XNotify("Connected! Welcome: " + cpuToSearchFor);
CheckAuth();
}
else
MessageBox.Show("Unauthorized");
}
}
}
}
catch(Exception ex)
{
MessageBox.Show("" + ex);
Environment.Exit(0);
}
在这种方法中,不需要循环查询返回的记录,因为如果数据库找不到请求的CPU,则没有记录。因此,只需检查读者是否有记录。
另请注意,using语句允许您删除管理连接关闭的所有行。连接在使用块退出时自动关闭。