我正在尝试从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;
}
谢谢。
答案 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 ;
}