0

我正在尝试解析 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;
}

先感谢您。

4

3 回答 3

0

SharpLab 不支持 SQL 类,但无论如何这些都不重要。我将此代码打入 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;
    }
}

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

其他东西使编译器绊倒了。它把它绊倒了,它甚至不能告诉你问题出在哪里。请修复代码中的所有其他问题。

于 2019-11-22T08:57:56.517 回答
-1

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

于 2019-11-22T08:50:51.330 回答
-1

正如我在评论中提到的 - 你应该阅读更多关于变量范围的信息。在 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 ;
}
于 2019-11-22T09:02:35.833 回答