【问题标题】:.NET Connector only returns first record.NET 连接器仅返回第一条记录
【发布时间】:2013-03-28 01:47:35
【问题描述】:

我有一个奇怪的“错误/错误”,在 .NET 连接器上只返回一条记录,而有 5 条记录。 MySQL 命令行也返回 1。这是我真正坚持的代码,我尝试创建一个客户端-服务器并让客户端从服务器计算机上的数据库登录:

代码:

string strConnect = "server=localhost;user=root;password=xxxx;database=MoopleDEV";
string query = "SELECT name FROM accounts;";

using (MySqlConnection connection = new MySqlConnection(strConnect))
using (MySqlCommand command = new MySqlCommand(query, connection))
using (MySqlDataReader reader = command.ExecuteReader())
{
    connection.Open();

    while (reader.Read())
    {
        Console.WriteLine(reader.GetString("name"));
    }

    connection.Close();
}

注意:它还在 MySQL 命令行客户端仅返回“iVision”。有谁知道该怎么做? Ps:它不会崩溃或返回任何异常。

【问题讨论】:

  • 您确定查看的是同一个数据库吗?您谈论“登录到服务器计算机”,但您的连接字符串指定了“localhost”(您自己的计算机)
  • 哦,是的,服务器和客户端是在我自己的计算机上调试的,并且我的计算机上正在运行 MySQL DB。 (这是服务器程序将在服务器计算机上运行的想法)
  • 你为什么要使用reader.GetString 我已经看到太多问题了确保您确实在查看正确的 DB database=MoopleDEV 可能不正确或指向物理机上的不同 IP 地址或位置
  • 还有 reader.GetString() 需要一个整数作为列索引而不是字符串名称(至少在 SqlDataReader 中)
  • @Steve 您可以输入索引或列名。

标签: c# mysql mysql-connector


【解决方案1】:

创建阅读器后,您将重新打开连接。在创建命令对象之前移动连接打开语句。

试试这个:

using (MySqlConnection connection = new MySqlConnection(strConnect))
{
    connection.Open();
    using (MySqlCommand command = new MySqlCommand(query, connection))
    using (MySqlDataReader reader = command.ExecuteReader())
    {

        while (reader.Read())
        {
            Console.WriteLine(reader.GetString("name"));
        }
    }
    connection.Close();
}

【讨论】:

  • 你是什么意思?我不重新打开吗?还是你的意思是 MySQLCommand 会自动打开连接?
  • 一旦你说command.ExecuteReader(),连接就会自动打开。然后,在打开的阅读器范围内,调用connection.Open(),它会切断并重新打开连接,但是阅读器的数据流已经被切断了。在您调用 reader.Read() 之前,流中有一条记录似乎很奇怪。不过,这就是你得到的。
  • 我不知道我是不是那么愚蠢,但您只将 connection.Close() 放在 using 语句的末尾,这甚至不需要,因为它会自动关闭和处置。对不起,如果我犯了一个愚蠢的错误哈哈
  • 是的。它是可选的。我只是出于习惯。
【解决方案2】:

IVision 我希望这会给你一个想法

你为什么使用 reader.GetString 我已经看到太多问题了,为什么不使用 (string)reader["name"] 方法,当你运行查询时,手动运行查询时返回多少行,还要确保你真的查看正确的 DB database=MoopleDEV 可能不正确或指向物理机上的不同 IP 地址或位置。我还将我的本地数据库实例命名为实际的 Name 也会减少混淆

【讨论】:

  • 就像我已经评论过您的评论一样,localhost 不知何故无法正常工作。如果我输入 127.0.0.1 作为 IP 它可以正常工作:) 谢谢你给我带来的想法 :) (PS:reader[] 顺便说一句:P)
猜你喜欢
  • 1970-01-01
  • 2022-01-27
  • 2018-09-13
  • 2023-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-04
相关资源
最近更新 更多