C# 获取异常:当读卡器关闭时读取的尝试无效

C# 获取异常:当读卡器关闭时读取的尝试无效,c#,mysql,database-connection,sqldatareader,C#,Mysql,Database Connection,Sqldatareader,我正在尝试使用MySQL站点上的.net MySQL驱动程序从我的C#项目中读取MySQL数据库 虽然我对此做了一些研究(包括),但我仍然对为什么会发生这种情况感到困惑。后来我跑了一个尖峰,我仍然得到相同的错误。(在运行这个之前,我用一些默认值填充了数据库。)下面是总计的spike代码 class Program { static void Main (string[] args) { Console.WriteLine (GetUserAge ("john")); //

我正在尝试使用MySQL站点上的.net MySQL驱动程序从我的C#项目中读取MySQL数据库

虽然我对此做了一些研究(包括),但我仍然对为什么会发生这种情况感到困惑。后来我跑了一个尖峰,我仍然得到相同的错误。(在运行这个之前,我用一些默认值填充了数据库。)下面是总计的spike代码

class Program {
    static void Main (string[] args) {
        Console.WriteLine (GetUserAge ("john")); // o/p's -1
    }

    static int GetUserAge (string username) {
        string sql = "select age from users where name=@username";

        int val = -1;
        try {
            using (MySqlConnection cnn = GetConnectionForReading ()) {
                cnn.Open ();
                MySqlCommand myCommand = new MySqlCommand (sql, cnn);
                myCommand.Parameters.AddWithValue ("@username", username);

                using (MySqlDataReader reader = myCommand.ExecuteReader ()) {
                    DataTable dt = new DataTable ();
                    dt.Load (reader);

                    if (reader.Read ()) {
                        val = reader.GetInt32 (0);
                    }
                }
            }
        } catch (Exception ex) {
            Console.WriteLine (ex.Message);
        } finally {
        }

        return val;
    }

    private static MySqlConnection GetConnectionForReading () {
        string conStr = "Data Source=localhost;Database=MyTestDB;User ID=testuser;Password=password";
        return new MySqlConnection (conStr);
    }
}
上面的代码给了我一个例外:“当读卡器关闭时,读取的尝试无效。”

后来我修改了if条件,如下所示:

if (reader.HasRows && reader.Read ()) {
    val = reader.GetInt32 (0);
}
现在o/p是-1。(数据在表中。)如果由于某种原因,结果集有零行,那么读取器不应该首先进入If块。我的意思是,Read()方法的全部要点是首先检查结果集中是否有行

在我的智慧的尽头这里。。。只是不知道我哪里出了问题


谢谢你的帮助!:)

我认为使用
DataTable.Load
会“消耗”读卡器,至少会将其放在末尾。它甚至可以解释封闭的连接(但我只是在这里猜测)。如果你去掉那条线怎么办?我认为这在这里没有任何意义。

@harpo:你应该把这句话当作一个评论answer@BrokenGlass可以我只是用礼节来表达我的想法:)不同场景中的相同错误有时解决方案就在你眼前,你需要有人来推你:)我只是去掉了这些行:DataTable dt=newdatatable();dt.负载(读卡器);成功了。就我的一生而言,我不知道我怎么会错过这个!再次感谢@harpo!