C# 无法从while函数返回字符串

C# 无法从while函数返回字符串,c#,mariadb,mysql.data,C#,Mariadb,Mysql.data,我试图解析来自MariaDB MySQL数据库的数据,但在尝试返回代码时遇到了问题。下面给出的公共静态字符串工作得很好,我只想在另一个类中使用解析后的数据,但是每当代码通过而(rdr.Read())函数时,字符串OTP就会消失 我还尝试将返回代码部分移到函数大括号之外,但随后出现以下错误: “当前上下文中不存在名称“CODE” 我的代码: public static string TESTCODE() { string connStr = "server=XX.XX.XX.XX;user

我试图解析来自MariaDB MySQL数据库的数据,但在尝试返回代码时遇到了问题。下面给出的公共静态字符串工作得很好,我只想在另一个类中使用解析后的数据,但是每当代码通过
而(rdr.Read())
函数时,字符串OTP就会消失

我还尝试将
返回代码
部分移到
函数大括号之外,但随后出现以下错误:

“当前上下文中不存在名称“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;
}

提前感谢。

您应该定义
字符串代码
之前,而
循环,不在内部。

SharpLab不支持SQL类,但这些类无论如何都不重要。除预期的警告(无法访问的返回null)外,它还编译:

这只留下一个结论:这不是导致问题的原因


其他一些东西使编译器出错。它把事情搞砸了,甚至不能告诉你问题在哪里。请修复代码中的所有其他问题。

正如我在评论中提到的-您应该阅读更多关于变量范围的内容。定义在lambda、whiles、usings、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 ;
}

你在哪一行从上面的代码中得到错误信息?嗨,史蒂夫。上面给出的代码没有错误。我想做的就是在另一个类中使用字符串代码,但只要代码在循环时通过,字符串代码就不会返回,它只会消失:(您正在返回它,所以它的值不会消失,您只需要从TESTCODE中获取返回值并赋给另一个局部变量。比如string ANewCODE=TESTCODE();如果(!string.IsNullOrEmpty(ANewCode)){….}顺便说一句,如果编译器给了你一个错误,它也会告诉你错误发生的地方。如果你不把代码发到哪里,那么你的问题就完全符合没有给出错误的原因。虽然这是一个不错的一般性建议,但它一点也不能解释这个编译器错误。我也尝试过这种方法,但是我得到了错误<代码>使用未赋值局部变量代码
@Christopher-它解释了“我还尝试将返回代码部分移到while函数大括号之外”。如果只移动了return,那么这就是错误。此外,如果您想在第一个循环时返回,为什么要在所有时候使用?编译器会详细地告诉您问题所在-这是变量范围的问题。在循环、usings、If等内部定义的变量只能在内部看到,而不能在外部看到。您需要在外部定义它们。然后,在外部定义时,我会在de您只需以某种方式初始化它=可能
var code=string.Empty;
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 ;
}