无法从while函数返回字符串

时间:2019-11-22 08:46:44

标签: c# mariadb mysql.data

我正在尝试从MariaDB MySQL数据库解析数据,但是当我尝试返回CODE时遇到问题。下面给出的公共静态字符串非常有效,我只想在另一个类中使用已解析的数据,但是只要代码通过while (rdr.Read())函数,字符串OTP就会消失。

我还尝试将return CODE部分移到while函数括号之外,但是随后出现以下错误:

  

“名称“ CODE”在当前上下文中不存在。”

我的代码:

public static string TESTCODE()
{
    string connStr = "server=XX.XX.XX.XX;user=username;database=dbname;password=password;";
    MySqlConnection conn = new MySqlConnection(connStr);
    conn.Open();

    string query = "Select * from testbase where name='George' and lastname='Brown' order by number desc limit 1";

    MySqlCommand cmd = new MySqlCommand(query, conn);

    using (MySqlDataReader rdr = cmd.ExecuteReader())
    {
        while (rdr.Read())
        {
            string result= rdr.GetString(0);
            string CODE;
            CODE = Regex.Match(result, @"\d+").Value;
            return CODE ;
        }
    }

    return null;
}

谢谢。

3 个答案:

答案 0 :(得分:0)

SharpLab不支持SQL类,但是无论如何都不应支持。 I punched this code into SharpLab并编译,除了预期的警告(返回不可返回的null):

using System;

public class C {
    public void M() {
    }

    public static string TESTCODE()
    {
        while(true){
          string CODE;
          CODE = "not a null";
          return CODE ;
        }

        return null;
    }
}

仅得出一个结论:这不是引起问题的那一行。

编译器崩溃了。而且它跳得很厉害,甚至无法告诉您问题出在哪里。请解决代码中的所有其他问题。

答案 1 :(得分:-1)

您应在string CODE;循环之前而不是在内部定义while

答案 2 :(得分:-1)

正如我在评论中提到的-您应该阅读有关变量范围的更多信息。只能在lambda,whiles,uses,ifs等内部定义的一个,而不是在外部。这就是为什么如果要在外部使用它们-您需要在外部定义它们。您还需要以某种方式对其进行初始化。尝试以下代码:

using (MySqlDataReader rdr = cmd.ExecuteReader())
{
   string CODE = string.Empty;
   while (rdr.Read())
   {
      string result= rdr.GetString(0);
      CODE = Regex.Match(result, @"\d+").Value;
   }
   return CODE ;
}
相关问题