通过sqlReader获取多个结果

时间:2016-07-30 10:47:42

标签: c#

我遇到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();
            }

请帮助。

1 个答案:

答案 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语句允许您删除管理连接关闭的所有行。连接在使用块退出时自动关闭。