private void btnImportarArquivoCnpj_Click(object sender, EventArgs e)
        {
            int counter = 0;

            char[] str = "".ToCharArray();
            System.IO.StreamReader file = new System.IO.StreamReader(@"C:\Users\Desenv01\Desktop\Empresas\DADOS_ABERTOS_CNPJ (1)\F.K032001K.D90308");

            //C:\Users\Desenv01\Desktop\Empresas\DADOS_ABERTOS_CNPJ (1)\F.K032001K.D90308 86gb file
            //
            string line = string.Empty;

            var lista    = new List <ArquivoReceitaFederalLinhaPrincipal>();
            var listaSec = new List <ArquivoReceitaFederalLinhaSecundaria>();

            while ((line = file.ReadLine()) != null)
            {
                if (line.Substring(0, 1) == "1")
                {
                    var linhaPrincipal = new ArquivoReceitaFederalLinhaPrincipal(line);
                    inserirDadosLinhaPrincipal(linhaPrincipal);
                }

                if (line.Substring(0, 1) == "2")
                {
                    var linhaSecundaria = new ArquivoReceitaFederalLinhaSecundaria(line);
                    inserirDadosLinhaSecundaria(linhaSecundaria);
                }

                if (line.Substring(0, 1) == "6")
                {
                    var LinhaTerc = new ArquivoReceitaFederalLinhaTerciaria(line);
                }



                counter++;
                txt2.Text = counter.ToString();
                Application.DoEvents();
            }

            MessageBox.Show("Importação Finalizada");
        }
        public bool inserirDadosLinhaPrincipal(ArquivoReceitaFederalLinhaPrincipal Linha1)
        {
            var sql = @"
            INSERT INTO Empresa
           (
           [CNPJ]
           ,[IDENTIFICADOR_MATRIZ_FILIAL]
           ,[RAZAO_SOCIAL]
           ,[NOME_FANTASIA]
           ,[SITUACAO_CADASTRAL]
           ,[DATA_SITUACAO_CADASTRAL]
           ,[MOTIVO_SITUACAO_CADASTRAL]
           ,[NUMERO_CIDADEEXTERIOR]
           ,[CODIGO_PAIS]
           ,[NUMERO_PAIS]
           ,[CODIGO_NATUREZA_JURIDICA]
           ,[DATA_INICIO_ATIVIDADE]
           ,[DESCRIÇÃO_TIPO_LOGRADOURO]
           ,[LOGRADOURO]
           ,[NUMERO]
           ,[COMPLEMENTO]
           ,[BAIRRO]
           ,[CEP]
           ,[UF]
           ,[CODIGO_MUNICIPIO]
           ,[MUNICIPIO]
           ,[DDD_TELEFONE_1]
           ,[DDD_TELEFONE_2]
           ,[DDD_FAX]
           ,[CORREIO_ELETRONICO]
           ,[QUALIFICACAO_DO_RESPONSAVEL]
           ,[CAPITAL_SOCIAL_DA_EMPRESA]
           ,[PORTE_EMPRESA]
           ,[OPÇÃO_PELO_SIMPLES]
           ,[DATA_OPCAO_PELO_SIMPLES]
           ,[DATA_EXCLUSAO_DO_SIMPLES]
           ,[OPCAO_PELO_MEI])
     VALUES
           (
           @CNPJ,
           @IDENTIFICADOR_MATRIZ_FILIAL,
           @RAZAO_SOCIAL,
           @NOME_FANTASIA,
           @SITUACAO_CADASTRAL,
           @DATA_SITUACAO_CADASTRAL,
           @MOTIVO_SITUACAO_CADASTRAL,
           @NUMERO_CIDADEEXTERIOR,
           @CODIGO_PAIS,
           @NUMERO_PAIS,
           @CODIGO_NATUREZA_JURIDICA,
           @DATA_INICIO_ATIVIDADE,
           @DESCRIÇÃO_TIPO_LOGRADOURO,
           @LOGRADOURO,
           @NUMERO,
           @COMPLEMENTO,
           @BAIRRO,
           @CEP,
           @UF,
           @CODIGO_MUNICIPIO,
           @MUNICIPIO,
           @DDD_TELEFONE_1,
           @DDD_TELEFONE_2,
           @DDD_FAX,
           @CORREIO_ELETRONICO,
           @QUALIFICACAO_DO_RESPONSAVEL,
           @CAPITAL_SOCIAL_DA_EMPRESA,
           @PORTE_EMPRESA,
           @OPÇÃO_PELO_SIMPLES,
           @DATA_OPCAO_PELO_SIMPLES,
           @DATA_EXCLUSAO_DO_SIMPLES,
           @OPCAO_PELO_MEI)";



            var sqlConnectionString = @"Data Source=localhost\SQLEXPRESS;Initial Catalog=fenicio_receita_federal;Integrated Security=true;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False";
            //var sqlConnectionString = "Data Source=localhost;Initial Catalog=Fenicio_Receita_Federal;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False";

            DateTime dataOpcaoSimples;
            decimal  capitalSocial;
            DateTime DATA_OPCAO_PELO_SIMPLES;
            DateTime DATA_INICIO_ATIVIDADE;
            DateTime DATA_EXCLUSAO_DO_SIMPLES;
            DateTime DATA_SITUACAO_CADASTRAL;

            //DateTime DATA_SITUACAO_ESPECIAL;

            inserirDadosLinhaTerciaria(Linha1.CNPJ, Linha1.CNAE_FISCAL);



            using (var conn = new SqlConnection(sqlConnectionString))
            {
                if (!DateTime.TryParse(Linha1.DATA_OPCAO_PELO_SIMPLES.Substring(6, 2) + "/" + Linha1.DATA_OPCAO_PELO_SIMPLES.Substring(4, 2) + "/" + Linha1.DATA_OPCAO_PELO_SIMPLES.Substring(0, 4), out DATA_OPCAO_PELO_SIMPLES))
                {
                    sql = sql.Replace("@DATA_OPCAO_PELO_SIMPLES", "NULL");
                }

                if (!DateTime.TryParse(Linha1.DATA_INICIO_ATIVIDADE.Substring(6, 2) + "/" + Linha1.DATA_INICIO_ATIVIDADE.Substring(4, 2) + "/" + Linha1.DATA_INICIO_ATIVIDADE.Substring(0, 4), out DATA_INICIO_ATIVIDADE))
                {
                    sql = sql.Replace("@DATA_INICIO_ATIVIDADE", "NULL");
                }


                if (!DateTime.TryParse(Linha1.DATA_EXCLUSAO_DO_SIMPLES.Substring(6, 2) + "/" + Linha1.DATA_EXCLUSAO_DO_SIMPLES.Substring(4, 2) + "/" + Linha1.DATA_EXCLUSAO_DO_SIMPLES.Substring(0, 4), out DATA_EXCLUSAO_DO_SIMPLES))
                {
                    sql = sql.Replace("@DATA_EXCLUSAO_DO_SIMPLES", "NULL");
                }

                if (!DateTime.TryParse(Linha1.DATA_SITUACAO_CADASTRAL.Substring(6, 2) + "/" + Linha1.DATA_SITUACAO_CADASTRAL.Substring(4, 2) + "/" + Linha1.DATA_SITUACAO_CADASTRAL.Substring(0, 4), out DATA_SITUACAO_CADASTRAL))
                {
                    sql = sql.Replace("@DATA_SITUACAO_CADASTRAL", "NULL");
                }



                if (decimal.TryParse(Linha1.CAPITAL_SOCIAL_DA_EMPRESA, out capitalSocial))
                {
                    capitalSocial = capitalSocial / 100;
                }
                else
                {
                    capitalSocial = 0;
                }



                var cmd = new SqlCommand(sql, conn);

                cmd.Parameters.AddWithValue("@CNPJ", Linha1.CNPJ);


                cmd.Parameters.AddWithValue("@IDENTIFICADOR_MATRIZ_FILIAL", Linha1.IDENTIFICADOR_MATRIZ_FILIAL);

                cmd.Parameters.AddWithValue("@RAZAO_SOCIAL", Linha1.RAZAO_SOCIAL);



                cmd.Parameters.AddWithValue("@MOTIVO_SITUACAO_CADASTRAL", Linha1.MOTIVO_SITUACAO_CADASTRAL);


                cmd.Parameters.AddWithValue("@NOME_FANTASIA", Linha1.NOME_FANTASIA);


                cmd.Parameters.AddWithValue("@SITUACAO_CADASTRAL", Linha1.SITUACAO_CADASTRAL);

                if (DATA_SITUACAO_CADASTRAL != null && DATA_SITUACAO_CADASTRAL != DateTime.MinValue)
                {
                    //cmd.Parameters.AddWithValue("@DATA_SITUACAO_CADASTRAL", DATA_SITUACAO_CADASTRAL);
                    cmd.Parameters.Add("@DATA_SITUACAO_CADASTRAL", System.Data.SqlDbType.DateTime2, 8).Value = DATA_SITUACAO_CADASTRAL;
                }

                cmd.Parameters.AddWithValue("@NUMERO_CIDADEEXTERIOR", Linha1.NUMERO_CIDADEEXTERIOR);

                cmd.Parameters.AddWithValue("@CODIGO_PAIS", Linha1.CODIGO_PAIS);

                cmd.Parameters.AddWithValue("@NUMERO_PAIS", Linha1.NUMERO_PAIS);

                cmd.Parameters.AddWithValue("@CODIGO_NATUREZA_JURIDICA", Linha1.CODIGO_NATUREZA_JURIDICA);
                if (DATA_INICIO_ATIVIDADE != null && DATA_INICIO_ATIVIDADE != DateTime.MinValue)
                {
                    //cmd.Parameters.AddWithValue("@DATA_INICIO_ATIVIDADE", DATA_INICIO_ATIVIDADE);
                    cmd.Parameters.Add("@DATA_INICIO_ATIVIDADE", System.Data.SqlDbType.DateTime2, 8).Value = DATA_INICIO_ATIVIDADE;
                }

                cmd.Parameters.AddWithValue("@DESCRIÇÃO_TIPO_LOGRADOURO", Linha1.DESCRIÇÃO_TIPO_LOGRADOURO);



                cmd.Parameters.AddWithValue("@LOGRADOURO", Linha1.LOGRADOURO);

                cmd.Parameters.AddWithValue("@NUMERO", Linha1.NUMERO);

                cmd.Parameters.AddWithValue("@COMPLEMENTO", Linha1.COMPLEMENTO);

                cmd.Parameters.AddWithValue("@BAIRRO", Linha1.BAIRRO);

                cmd.Parameters.AddWithValue("@CEP", Linha1.CEP);

                cmd.Parameters.AddWithValue("@UF", Linha1.UF);

                cmd.Parameters.AddWithValue("@CODIGO_MUNICIPIO", Linha1.CODIGO_MUNICIPIO);

                cmd.Parameters.AddWithValue("@MUNICIPIO", Linha1.MUNICIPIO);

                cmd.Parameters.AddWithValue("@DDD_TELEFONE_1", Linha1.DDD_TELEFONE_1);

                cmd.Parameters.AddWithValue("@DDD_TELEFONE_2", Linha1.DDD_TELEFONE_2);

                cmd.Parameters.AddWithValue("@DDD_FAX", Linha1.DDD_FAX);

                cmd.Parameters.AddWithValue("@CORREIO_ELETRONICO", Linha1.CORREIO_ELETRONICO);

                cmd.Parameters.AddWithValue("@QUALIFICACAO_DO_RESPONSAVEL", Linha1.QUALIFICACAO_DO_RESPONSAVEL);

                cmd.Parameters.AddWithValue("@CAPITAL_SOCIAL_DA_EMPRESA", capitalSocial);

                cmd.Parameters.AddWithValue("@PORTE_EMPRESA", Linha1.PORTE_EMPRESA);


                cmd.Parameters.AddWithValue("@OPÇÃO_PELO_SIMPLES", Linha1.OPÇÃO_PELO_SIMPLES);



                if (DATA_OPCAO_PELO_SIMPLES != null && DATA_OPCAO_PELO_SIMPLES != DateTime.MinValue)
                {
                    //cmd.Parameters.AddWithValue("@DATA_OPCAO_PELO_SIMPLES", DATA_OPCAO_PELO_SIMPLES);
                    cmd.Parameters.Add("@DATA_OPCAO_PELO_SIMPLES", System.Data.SqlDbType.DateTime2, 8).Value = DATA_OPCAO_PELO_SIMPLES;
                }
                if (DATA_EXCLUSAO_DO_SIMPLES != null && DATA_EXCLUSAO_DO_SIMPLES != DateTime.MinValue)
                {
                    //cmd.Parameters.AddWithValue("@DATA_EXCLUSAO_DO_SIMPLES", DATA_EXCLUSAO_DO_SIMPLES);
                    cmd.Parameters.Add("@DATA_EXCLUSAO_DO_SIMPLES", System.Data.SqlDbType.DateTime2, 8).Value = DATA_EXCLUSAO_DO_SIMPLES;
                }

                cmd.Parameters.AddWithValue("@OPCAO_PELO_MEI", Linha1.OPCAO_PELO_MEI);

                try
                {
                    conn.Open();
                    var reader = cmd.ExecuteScalar();
                    return(true);
                }
                catch (Exception e)
                {
                    sql = "INSERT INTO ErrosImportacao (Linha,Erro) VALUES(@Linha,@Erro)";

                    cmd = new SqlCommand(sql, conn);
                    cmd.Parameters.AddWithValue(@"Linha", Linha1.LinhaCompleta);
                    cmd.Parameters.AddWithValue(@"Erro", e.Message);
                    cmd.ExecuteScalar();
                    return(false);
                }
                finally
                {
                    conn.Close();
                }
            }
        }