【问题标题】:Timeout expired.The timeout period elapsed prior to completion of the operationTimeout expired。在操作完成之前超时时间已过
【发布时间】:2012-09-03 20:58:12
【问题描述】:

我将C#Visual StudioMySql 一起使用。我的代码中有一个按钮,它有自己的方法。当它结束时,它会从Class 调用另一个方法。我已经编辑了命令和连接的timeout。此方法将日期插入到表中。我第二次在同一个表中插入日期,它读取最后一个 ID 并使"id" 增加 +1。 日期第一次超过 20.000,第二次达到 40.000++。 有问题吗?

            public void PendenciaAssociado()
                {

            #region LeituraDosDados
            MySqlConnection Con = new MySqlConnection(ConfigurationManager.ConnectionStrings["strConexaoDestino"].ConnectionString);
            MySqlCommand Cmd = new MySqlCommand();
            Cmd.CommandTimeout = 1000;
            Cmd.CommandType = CommandType.Text;
            Cmd.Connection = Con;           
            string sql = "SELECT matricula,dt_nascimento,cpf,rg,celular,mail,profissao,dt_insercao,usr_insercao from Associados";
            Cmd.CommandText = sql;           
            Con.Open();
            MySqlDataReader dr = Cmd.ExecuteReader();            
            DataTable dt = new DataTable();
            dt.Load(dr);
            Con.Close();
            Con.Dispose();

            #endregion

            #region Variaveis
            int matricula, profissao;
            DateTime dt_nascimento, dt_insercao;
            string cpf, rg, celular, mail, usr_insercao, pendencia;
            #endregion


            foreach (DataRow row in dt.Rows)
            {

                matricula = Convert.ToInt32(row["matricula"]);
                dt_nascimento = Convert.ToDateTime(row["dt_nascimento"]);
                cpf = row["cpf"].ToString();
                rg = row["rg"].ToString();
                celular = row["celular"].ToString();
                mail = row["mail"].ToString();
                profissao = Convert.ToInt32(row["profissao"]);
                dt_insercao = Convert.ToDateTime(row["dt_insercao"]);
                usr_insercao = row["usr_insercao"].ToString();

                if (profissao == 0)
                {
                    pendencia = "Favor Verificar a Profissao do Associado";
                    InserePendencias(matricula, dt_nascimento, cpf, rg, celular, mail, profissao, dt_insercao, usr_insercao, pendencia);
                }
                if (dt_nascimento.ToString() == "01/01/1980 00:00:00")
                {
                    pendencia = "Favor Verificar a Data de Nascimento do Associado";
                    InserePendencias(matricula, dt_nascimento, cpf, rg, celular, mail, profissao, dt_insercao, usr_insercao, pendencia);
                }
                if (cpf == "00000000000")
                {
                    pendencia = "Favor Verificar o CPF do Associado";
                    InserePendencias(matricula, dt_nascimento, cpf, rg, celular, mail, profissao, dt_insercao, usr_insercao, pendencia);
                }
                if (rg == "0000000000")
                {
                    pendencia = "Favor Verificar o RG do Associado";
                    InserePendencias(matricula, dt_nascimento, cpf, rg, celular, mail, profissao, dt_insercao, usr_insercao, pendencia);
                }
                if (celular == "")
                {
                    pendencia = "Favor Verificar o Celular do Associado";
                    InserePendencias(matricula, dt_nascimento, cpf, rg, celular, mail, profissao, dt_insercao, usr_insercao, pendencia);
                }
                if (mail == "")
                {
                    pendencia = "Favor Verificar o Email do Associado";
                    InserePendencias(matricula, dt_nascimento, cpf, rg, celular, mail, profissao, dt_insercao, usr_insercao, pendencia);
                }
            }
        }

        int contador = 0, aux, aux2;
        public void InserePendencias(int matricula, DateTime data_nasci, string cpf, string rg, string celular, string email, int profissao, DateTime data_insercao, string usuario, string pendencia)
        {

            MySqlConnection con = new MySqlConnection(ConfigurationManager.ConnectionStrings["strConexaoDestino"].ConnectionString);
            MySqlCommand cmd = new MySqlCommand();
            cmd.Connection = con;
            cmd.CommandType = CommandType.Text;
            string seleciona = "SELECT MAX(codigo) as codigo FROM pendencias";
            cmd.CommandText = seleciona;
            con.Open();
            MySqlDataReader dr = cmd.ExecuteReader();
            con.Close();
            if (contador == 0)
            {
                contador++;
                aux2 = contador;
            }
            else if (contador != 0)
            {
                contador++;
                aux = contador;
            }



            cmd.Connection = con;                
            string query = "INSERT INTO  pendencias (codigo,matricula,pendencia,dt_insercao,usr_insercao) VALUES(" +
                           "@codigo,@matricula,@pendencia,@dt_insercao,@usr_insercao)";
            cmd.CommandText = query;
            cmd.Connection = con;
            cmd.Parameters.Add(new MySqlParameter("@codigo", MySqlDbType.Int32)).Value = contador;
            cmd.Parameters.Add(new MySqlParameter("@matricula", MySqlDbType.Int32)).Value = matricula;
            cmd.Parameters.Add(new MySqlParameter("@pendencia", MySqlDbType.VarChar)).Value = pendencia;
            cmd.Parameters.Add(new MySqlParameter("@dt_insercao", MySqlDbType.DateTime)).Value = data_nasci;
            cmd.Parameters.Add(new MySqlParameter("@usr_insercao", MySqlDbType.VarChar)).Value = usuario;
            con.Open();
            cmd.ExecuteNonQuery();
            con.Close();

【问题讨论】:

    标签: c# mysql


    【解决方案1】:

    好的 - 我不是作为答案发布,而是因为我有太多话要发表评论。如果我得到答案,我可以编辑它。所以,这是一个很长的评论!

    所以我看到的第一件事是:

           if (profissao == 0) 
            { 
                pendencia = "Favor Verificar a Profissao do Associado"; 
                InserePendencias(matricula, dt_nascimento, cpf, rg, celular, mail, profissao, dt_insercao, usr_insercao, pendencia); 
            } 
            if (dt_nascimento.ToString() == "01/01/1980 00:00:00") 
            { 
                pendencia = "Favor Verificar a Data de Nascimento do Associado"; 
                InserePendencias(matricula, dt_nascimento, cpf, rg, celular, mail, profissao, dt_insercao, usr_insercao, pendencia); 
            } 
            if (cpf == "00000000000") 
            { 
                pendencia = "Favor Verificar o CPF do Associado"; 
                InserePendencias(matricula, dt_nascimento, cpf, rg, celular, mail, profissao, dt_insercao, usr_insercao, pendencia); 
            } 
            if (rg == "0000000000") 
            { 
                pendencia = "Favor Verificar o RG do Associado"; 
                InserePendencias(matricula, dt_nascimento, cpf, rg, celular, mail, profissao, dt_insercao, usr_insercao, pendencia); 
            } 
            if (celular == "") 
            { 
                pendencia = "Favor Verificar o Celular do Associado"; 
                InserePendencias(matricula, dt_nascimento, cpf, rg, celular, mail, profissao, dt_insercao, usr_insercao, pendencia); 
            } 
            if (mail == "") 
            { 
                pendencia = "Favor Verificar o Email do Associado"; 
                InserePendencias(matricula, dt_nascimento, cpf, rg, celular, mail, profissao, dt_insercao, usr_insercao, pendencia); 
            } 
    

    实际情况是,您想将 pendecia 设置为一个值,并调用完全相同的调用 .. 确实可以在那里使用一些代码简化。

    每次运行时,记录数都会翻倍。所以第一次有 10 条,到最后有 20 条。所以下一次有 20 条,最后有 40 条。 .这是你真正想要的吗?

    如果您的前 10 个都需要运行此功能,则您不会通过更新它们来阻止它们第二次被包含在内。因此,它不像您只评估添加的 10 行,而是评估所有 20 行,再次生成第二组 10 行 - 就像您第一次做的那样,以及来自先前添加的 10 的任何新值。 .. 有点像一种无限循环类型的行为,但插入到数据库中而不是仅仅使用值。

    【讨论】:

    • 感谢您回答我 BugFinder... 但是请告诉我,我该如何解决?如您所见,我使用了一堆“如果”,我需要验证哪些字段为空,并且对于每个空字段,我将其插入表中...我不想做您所说的事情,40 年 10 月 20 日-80... 我该如何解决?并且只添加 10 个值?感谢关注!
    • 嗯,就是这样,我试图解释你的代码是做什么的——你现在需要弄清楚如何解释/编码你的意思,而不是它在做什么。有唯一的ID吗?您是否只想“更新”该行,而不是添加一个新行?
    • 那么你还需要对旧的做一些事情来阻止它再次被处理。
    猜你喜欢
    • 1970-01-01
    • 2015-10-03
    • 2019-06-08
    • 1970-01-01
    • 1970-01-01
    • 2015-12-21
    • 2012-09-23
    • 2011-10-08
    • 2012-07-24
    相关资源
    最近更新 更多