我如何在1个阅读器上使用2条sql命令?

问题描述 投票:0回答:2

使用完令牌后,我试图从SQL数据库中删除令牌。

            MySqlCommand cmdSel = new MySqlCommand("SELECT * FROM tokens WHERE token = " + int.Parse(passbox.Text), dbCon);
            MySqlDataReader dbRead = cmdSel.ExecuteReader();
            if (dbRead.Read())
            {
                int sqlkey = int.Parse(dbRead["token"].ToString()); 
                if (keyint == sqlkey)
                {
                    using (MySqlCommand delTok = new MySqlCommand("DELETE FROM tokens WHERE token = " + keyint, dbCon))
                    {
                        delTok.ExecuteNonQuery(); //MAIN PROBLEM HERE.
                        /*
                        MySql.Data.MySqlClient.MySqlException: 'There is already an open DataReader associated with this Connection which must be closed first.'
                        */
                        //ERROR ^^^^^^
                    }
                    try
                    {
                        dbCon.Close();
                        loading loading = new loading();
                        loading.Show();
                        this.Hide();
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                        return;
                    }
                }
            }

我必须关闭DataReader还是有其他方法,以及如何关闭阅读器?如果if keyint is sqlkey语句为true / done,我想删除令牌。错误仅在我尝试为if语句执行脚本时显示。“令牌”是一个int(10)

c# mysql database winforms datareader
2个回答
0
投票

创建了一个新的私有void,并在if语句后使用令牌对其进行了调用。

        private void delQuery(int token)
        {
            //SETUP CONNECTION
            MySqlConnection dbConn = new MySqlConnection("some connection");

            //OPEN CONNECTION
            dbConn.Open();

            //DELETE TOKEN
            MySqlCommand delcmd = new MySqlCommand("DELETE FROM tokens WHERE token = " + token, dbConn);
            MySqlDataReader dbReader = delcmd.ExecuteReader();
            dbReader.Read();

            //CLOSE CONNECTION
            dbConn.Close();
        }

使用它来调用:

if (dbRead.Read())
            {
                int sqlkey = int.Parse(dbRead["token"].ToString());
                if (keyint == sqlkey)
                {
                    dbCon.Close();
                    delQuery(keyint);
                }
            }

0
投票

您必须先关闭阅读器才能执行另一个命令。另外,Db阅读器读取数据时无法执行命令。因此,您可以使用function或在关闭阅读器后执行命令。

MySqlCommand cmdSel = new MySqlCommand("SELECT * FROM tokens WHERE token = " + int.Parse(passbox.Text), dbCon);
int sqlkey=0;
           MySqlDataReader dbRead = cmdSel.ExecuteReader();
           if (dbRead.Read())
             {
               sqlkey = int.Parse(dbRead["token"].ToString()); 

               }
       reader.close();
      if (keyint == sqlkey)
               {
                   using (MySqlCommand delTok = new MySqlCommand("DELETE FROM tokens WHERE token = " + keyint, dbCon))
        {

                       delTok.ExecuteNonQuery(); 


                   try
                   {
                       dbCon.Close();
                       loading loading = new loading();
                       loading.Show();
                       this.Hide();
                   }
                   catch (Exception ex)
                   {
                       MessageBox.Show(ex.Message);
                       return;
                   }
        }
}
© www.soinside.com 2019 - 2024. All rights reserved.