Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 返回空读取器值的Getter_C#_Mysql - Fatal编程技术网

C# 返回空读取器值的Getter

C# 返回空读取器值的Getter,c#,mysql,C#,Mysql,我试图通过Getter返回一个字符串,该字符串是从循环通过mysql查询的DataRead对象获得的。问题是,在加载时,字符串不会加载到主窗体的标签上,它返回一个空字符串,如果我在声明时为变量分配一个字符串,它会将该字符串返回到主窗体。代码如下: string text; public string Text { get { return text; } } public void DBConn() { MySqlConnection conn = new MySqlConnecti

我试图通过Getter返回一个字符串,该字符串是从循环通过mysql查询的DataRead对象获得的。问题是,在加载时,字符串不会加载到主窗体的标签上,它返回一个空字符串,如果我在声明时为变量分配一个字符串,它会将该字符串返回到主窗体。代码如下:

string text;
public string Text { get { return text; } }

public void DBConn()
{
     MySqlConnection conn = new MySqlConnection(connStr);
     DataSet ds = new DataSet();
     MySqlDataReader reader = null;

     try
     {
          // connection to DB
          reader = cmd.ExecuteReader();
          if (reader != null && reader.HasRows)
            {
                while (reader.Read())
                {
                    text = reader["string1"].ToString() + " " + reader["string2"].ToString() + " " + reader["string3"].ToString();
                }
            }
     }
      // try, catch. conn.close()
}
读取器很好地将值赋给文本,但在此之外,该值并没有赋给全局声明的变量,它似乎在离开循环时就被销毁了。有人能帮忙吗


谢谢。

感谢帮助我找到所述问题解决方案的人。正如你们中的一些人善意地解释的那样(在做了大量研究之前,我一开始缺乏理解的知识),这个问题最终变成了一个问题,因为我的主要形式与第一个调用包含Getter的类的情况不同。我知道现在我应该在原来的帖子中提到所有这些细节,我向那些试图从一小段代码中理解的人道歉。在对实例进行了大量研究之后,我找到的解决方案是首先创建一个类,该类包含静态getter和setter
公共静态字符串文本{set;get;}
(这就是我希望从其他类轻松访问它的方式)这有助于使它们从所有实例中都可以访问,这可能不是最好的解决方案,尤其是在OOP上——在我的研究中,我在某个地方读到,使用setter和getter是浪费时间,而且不是程序员的最佳实践,最好是进行封装,但因为我仍然很新鲜,我将在稍后查找如何做到这一点


再次感谢各位。

感谢帮助我找到所述问题解决方案的人。正如你们中的一些人善意地解释的那样(在做了大量研究之前,我一开始缺乏理解的知识),这个问题最终变成了一个问题,因为我的主要形式与第一个调用包含Getter的类的情况不同。我知道现在我应该在原来的帖子中提到所有这些细节,我向那些试图从一小段代码中理解的人道歉。在对实例进行了大量研究之后,我找到的解决方案是首先创建一个类,该类包含静态getter和setter
公共静态字符串文本{set;get;}
(这就是我希望从其他类轻松访问它的方式)这有助于使它们从所有实例中都可以访问,这可能不是最好的解决方案,尤其是在OOP上——在我的研究中,我在某个地方读到,使用setter和getter是浪费时间,而且不是程序员的最佳实践,最好是进行封装,但因为我仍然很新鲜,我将在稍后查找如何做到这一点


再次感谢各位。

实际上,您的循环正在重置每次迭代中文本的值。可能是上一次迭代的值为空吗?是否使用Fody或任何其他AOP东西在编译后转换程序集?@hectormtnezg:那么我的猜测是:当您访问Text属性时,您正在使用类的其他实例(在不同的实例上调用DBConn()方法)请检查。@hectormtnezg-帖子中显示的代码不太可能与您的问题有关。请确保提供复制问题的最小样本。我感觉a)
Text
正在另一个进程中设置,或者b)在声明
Text
实际属于的任何进程的
new
实例后正在另一个进程中使用。正如其他一些人提到的,这个问题似乎发生在这个代码示例之外。事实上,您的循环在每次迭代中重置文本的值。可能是上一次迭代的值为空吗?是否使用Fody或任何其他AOP东西在编译后转换程序集?@hectormtnezg:那么我的猜测是:当您访问Text属性时,您正在使用类的其他实例(在不同的实例上调用DBConn()方法)请检查。@hectormtnezg-帖子中显示的代码不太可能与您的问题有关。请确保提供复制问题的最小样本。我感觉a)
Text
正在另一个进程中设置,或者b)在声明
Text
实际属于的任何进程的
new
实例后正在另一个进程中使用。正如其他一些人提到的,这个问题似乎发生在这个代码示例之外。