【问题标题】:return in while loop在while循环中返回
【发布时间】:2019-05-08 10:08:55
【问题描述】:

我在 c# 中有一个带有数据库的方法。现在我尝试返回该值,但因为该字符串是在 while 循环中创建的,所以它说它不存在。有没有办法返回字符串kampioen及其在while读取循环中创建的值?

public string getkampioen(string selecteditem)
{
    using (MySqlConnection connection = new MySqlConnection(connectionString))
    {
        connection.Open();
        string query = ("select * FROM clubs where naam = '" + selecteditem + "'");
        MySqlCommand cmd = new MySqlCommand(query, connection);
        MySqlDataReader Reader = cmd.ExecuteReader();
        while (Reader.Read())
        {
           string kampioen = (string)Reader["aantalkampioenschappen"].ToString();
        }
        return kampioen; 
    }
}

【问题讨论】:

  • 将变量的声明移出while作用域
  • 按照您编写的代码,如果您的结果集返回n 记录,您将读取所有n 值,但会丢弃第一个n - 1。你确定那是你想要的吗?根据您对这些数据集的确切期望,也许最好的方法根本不使用循环。
  • 如果只想返回最后一条,为什么还要读取多条记录?为什么不首先获取您想要的一条记录?另外,请注意您的代码容易受到 SQL 注入的影响。您应该使用查询参数并将输入视为值而不是可执行代码。
  • 另外,我认为值得指出的是(1)你不需要select *,因为你只对一个字段的值感兴趣——select aantalkampioenschappen就足够了——和(2 ) 您应该使用参数而不是将selectedItem 的值直接写入查询中。您现有的代码容易受到 SQL 注入攻击。

标签: c# mysql methods while-loop


【解决方案1】:

只需将声明移到循环之外:

public string getkampioen(string selecteditem)
{
    string kampioen; //declare here
    using (MySqlConnection connection = new MySqlConnection(connectionString))
    {
        connection.Open();
        string query = ("select * FROM clubs where naam = '" + selecteditem + "'");
        MySqlCommand cmd = new MySqlCommand(query, connection);
        MySqlDataReader Reader = cmd.ExecuteReader();
        while (Reader.Read())
        {
           kampioen = (string)Reader["aantalkampioenschappen"].ToString();
        }
        return kampioen; 
    }
}

【讨论】:

    【解决方案2】:

    你可以在while循环之前声明字符串。

    public string getkampioen(string selecteditem)
    {
        using (MySqlConnection connection = new MySqlConnection(connectionString))
        {
            connection.Open();
            string query = ("select * FROM clubs where naam = '" + selecteditem + "'");
            MySqlCommand cmd = new MySqlCommand(query, connection);
            MySqlDataReader Reader = cmd.ExecuteReader();
            string kampioen = "";
            while (Reader.Read())
            {
               kampioen = (string)Reader["aantalkampioenschappen"].ToString();
            }
            return kampioen; 
        }
    }
    

    【讨论】:

      【解决方案3】:

      正如其他人所说,将kampioen 移出循环。但是,如果您要获取特定值而不是随机值(如果返回多条记录),您可能希望连接字符串或将结果限制在第一行,如下所示:

      public string getkampioen(string selecteditem)
      {
          string kampioen = string.empty; // declared outside of the while 
          using (MySqlConnection connection = new MySqlConnection(connectionString))
          {
              connection.Open();
              string query = ("select * FROM clubs where naam = '" + selecteditem + "' limit one");
              MySqlCommand cmd = new MySqlCommand(query, connection);
              MySqlDataReader Reader = cmd.ExecuteReader();
              while (Reader.Read())
              {
                 kampioen = (string)Reader["aantalkampioenschappen"].ToString();
              }
              return kampioen; 
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2015-11-17
        • 2015-02-24
        • 1970-01-01
        • 1970-01-01
        • 2016-05-29
        • 1970-01-01
        • 2016-11-30
        • 2017-11-09
        相关资源
        最近更新 更多