单个或多个mysqldatareader

本文关键字:mysqldatareader 单个 | 更新日期: 2023-09-27 18:17:31

我有两个数据库,一个是本地的,另一个是远程的。我可以从本地使用MySqlDataReader获取数据,但即使我成功连接也不能从远程获取。我试图创建另一个MySqlDataReader对象,但再次失败。下面是我的代码:

        using(MySqlCommand cmd2 = connL.CreateCommand())
        {
            using (DataTable dt = new DataTable())
            {
                cmd2.CommandType = CommandType.Text;
                cmd2.CommandText = "SELECT userid FROM users";
                for (int i = 0; i < count; i++)
                {
                    dr = cmd2.ExecuteReader();
                    dr.Read();
                    string userid = dr[i].ToString();
                    dr.Close();
                    MessageBox.Show(userid);
                    //here, I can see the id
                    MySqlCommand cmd3 = connR.CreateCommand();
                    cmd3.CommandType = CommandType.Text;
                    cmd3.CommandText = "SELECT * FROM users WHERE userid = '"" + userid + "'"";
                    dr = cmd3.ExecuteReader();
                    dr.Read();
                    if (!dr[0].Equals("")) //! but in this line it says:
                    //Invalid attempt to access a field before calling Read()
                    {
                        MessageBox.Show(dr[0].ToString());
                    }
                        dr.Close();
                }

            }
        }

我找不到这个错误的解决方案:(,顺便说一下,我是c#的新手,抱歉,如果它是重复的。

单个或多个mysqldatareader

您是否检查过您的DataReader是否包含任何数据?您正在接收的越界异常表明您正在尝试访问一个没有您所请求的键的数组。

我已经测试了你的代码,它可以正常工作。试着替换这个:

cmd3.CommandText = "SELECT * FROM users WHERE userid = '"" + userid + "'"";
与这个:

cmd3.CommandText = "SELECT * FROM users";

只是为了看看你是否收到了任何数据。

您还可以在DataReader周围使用while。读取以防止任何越界异常。

while (dr.Read())
{
    MessageBox.Show(dr.ToString());
}