我有两个数据库,一个是本地数据库,另一个是远程数据库。我可以使用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#的新手,对不起,如果它是重复的。
答案 0 :(得分:0)
您是否确实检查过您的DataReader是否包含任何数据? 您收到的Out of bounds异常表示您正在尝试访问没有您要求的密钥的数组。
我已经测试了你的代码,它可以正常工作。尝试替换它:
cmd3.CommandText = "SELECT * FROM users WHERE userid = \"" + userid + "\"";
用这个:
cmd3.CommandText = "SELECT * FROM users";
只是为了看你是否收到任何数据。
您还可以在DataReader.Read周围使用一段时间来防止任何越界异常。
while (dr.Read())
{
MessageBox.Show(dr.ToString());
}