none
Erro em gridview RRS feed

  • Pergunta

  • Tenho uma tabela onde salvo nome dos arquivos .txt que trago de uma pasta.

    Depois preciso carregar estes dados em uma gridview mas somente os arquivos que

    Estão nesta pasta, pois o mesmo vai sendo substituído ou seja sempre terá 10 arquivos.

    Estou fazendo assim mas não está retornando nada.

            public void PesquisaArquivo()

            {

     

                DirectoryInfo diretorio = new DirectoryInfo("E:\\ARQUIVO_PONTO\\Relogio_Ponto");

                FileInfo[] arquivos = diretorio.GetFiles("*.*");

     

     

                SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["conexao"].ToString());

     

                string Query = "SELECT * FROM FP0000 WHERE C_NOMARQ IN ('" + arquivos + "') ";

                SqlCommand command = new SqlCommand(Query, connection);

                connection.Open();

                try

                {

                    DataTable dTable = new DataTable("arquivo");

                    SqlDataAdapter adapter = new SqlDataAdapter(command);

                    adapter.Fill(dTable);

                    SF_FP0000.DataSource = dTable;

                }

                catch (Exception erro)

                {

                    MessageBox.Show(erro.Message);

                    throw;

                }

                finally

                {

                    connection.Close();

                }

     

            }

    segunda-feira, 7 de novembro de 2011 17:29

Todas as Respostas

  • Ola,

    Pelo que estou vendo em sua query, creio que não esta funcionado poque você não esta separando por virgula, então o "IN" não irá funcionar.

    Acho que isso vai te ajudar:

    string Query = "SELECT * FROM FP0000 WHERE C_NOMARQ IN ('" + string.Join(",", arquivos.ToList()) + "') ";

    • Sugerido como Resposta AndesBH segunda-feira, 7 de novembro de 2011 20:20
    segunda-feira, 7 de novembro de 2011 20:20
  • Bom dia, AndesBH!

    Não está aceitando ToList().

    terça-feira, 8 de novembro de 2011 12:34
  • Importe a biblioteca abaixo:

     

    using System.Linq;

     

    E outra, faltou um detalhe na consulta, faça assim:

     

    string Query = "SELECT * FROM FP0000 WHERE C_NOMARQ IN ('" + string.Join("','", arquivos.ToList()) +"') ";

     

    Agora vai. 

    • Sugerido como Resposta AndesBH terça-feira, 8 de novembro de 2011 12:49
    terça-feira, 8 de novembro de 2011 12:49
  • AndesBH.

    Ainda não está aceitando, o ToList aparece somente com opção para ToList<>.

    terça-feira, 8 de novembro de 2011 13:06
  • É isso mesmo. Aparece assim mesmo.

    Posta ai as bibliotecas que estão importadas em seu Form.

    No meu teste está assim, default:

     

    using System;

     

    using System.Collections.Generic;

    using System.ComponentModel;

    using System.Data;

    using System.Drawing;

    using System.Linq;

    using System.Text;

    using System.Windows.Forms;

    using System.IO;

     



    • Editado AndesBH terça-feira, 8 de novembro de 2011 19:40
    terça-feira, 8 de novembro de 2011 19:38
  • Estão todas as bibliotecas acima mencionadas.

    Incluisive:

    using System.Configuration;

    using System.SqlClient;

    para a conexão, e desde já agradeço a atenção.

    quarta-feira, 9 de novembro de 2011 11:47
  • Tenta assim:

    string Query = "SELECT * FROM FP0000 WHERE C_NOMARQ IN ('" + string.Join("','", arquivos.ToList<FileInfo>()) + "') ";

     

    Se não der, verifique qual a opção o VS da para o erro.

    Qualquer coisa, faz a alteração e posta o código ai. Fiz aki novamente e funciona perfeitamente, somente com as bibliotecas default... Muito estranho, deve esta faltando algum detalhe simples ai.

    quarta-feira, 9 de novembro de 2011 23:45
  • Bom dia, AndesBH!

    Eu preciso importar arquivo texto de um relógio de ponto, até aí tudo bem e você já tinha ajudado em um dos códigos, eu gravo os dados e depois insiro data, tamanho do arquivo, quantidade de gravação.

    Depois no FormLoad eu preciso popular um gridview com os dados da segunda tabela, mas somente dados que constam na pasta arquivo.txt para não retornar dados demais.

    Não sei se esta forma que estou usando é a melhor.

     

     

     

    using System;

    using System.Collections.Generic;

    using System.ComponentModel;

    using System.Data;

    using System.Drawing;

    using System.Linq;

    using System.Text;

    using System.Windows.Forms;

    using System.Data.SqlClient;

    using System.Configuration;

    using System.IO;

    using PowderMODEL;

     

    namespace POWDER.RECURSOS_HUMANOS

    {

        public partial class TELA_IMPORTACAO_ARQUIVO_PONTO : Form

        {

            private string V_TAMARQ;

            public string v_tamarq

            {

                get { return V_TAMARQ; }

                set { V_TAMARQ = value; }

            }

     

            private string V_DATULT;

            public string v_datult

            {

                get { return V_DATULT; }

                set { V_DATULT = value; }

            }

     

            public TELA_IMPORTACAO_ARQUIVO_PONTO()

            {

                InitializeComponent();

            }

     

            #region MÉTODOS

     

            public void LerGravar()

            {

                string caminhoArquivo = "E:\\ARQUIVO_PONTO\\Relogio_Ponto\\afd_03102011.txt";

     

                SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["conexao"].ToString());

                connection.Open();

                SqlCommand command = new SqlCommand();

                command.Connection = connection;

     

                int totGravado = 0;

                try

                {

                    var consulta = from linha in File.ReadAllLines(caminhoArquivo)

                                   let pontoDados = linha.Substring(0, 50)

                                   select new FP0010MODEL()

                                   {

                                       C_NUMPIS = pontoDados.Substring(0, 11),

                                       C_DATAPO = pontoDados.Substring(12, 8),

                                       C_HORAPO = pontoDados.Substring(20, 4),

                                       C_NUMREL = pontoDados.Substring(24, 17),

                                       C_NUMREG = pontoDados.Substring(41, 9),

                                   };

     

                    foreach (var ponto in consulta)

                    {

                        command.CommandText = string.Format("INSERT INTO FP0010 VALUES('" + ponto.C_NUMPIS + "','" + ponto.C_DATAPO + "','" + ponto.C_HORAPO + "','" + ponto.C_NUMREL + "','" + ponto.C_NUMREG + "')");

                        totGravado += command.ExecuteNonQuery();

                    }

                    gravado.Text = totGravado.ToString();

                }

                catch (Exception erro)

                {

                    MessageBox.Show(erro.Message);

                }

            }

     

     

            public void GravarPasta()

            {

                SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["conexao"].ToString());

                connection.Open();

                SqlCommand command = new SqlCommand();

                command.Connection = connection;

                try

                {

                    DirectoryInfo diretorio = new DirectoryInfo("E:\\ARQUIVO_PONTO\\Relogio_Ponto");

                    FileInfo[] arquivos = diretorio.GetFiles("*.*");

     

                    foreach (FileInfo fileinfo in arquivos)

                    {

                        command.CommandText = string.Format("SELECT COUNT(*) FROM FP0000 WHERE C_NOMARQ = '" + fileinfo.Name + "'");

     

     

                        if ((int)command.ExecuteScalar() == 0)

                        {

     

                            command.CommandText = string.Format("INSERT INTO FP0000 (C_NOMARQ, C_DATULT) VALUES('" + fileinfo.Name + "','" + fileinfo.LastAccessTime.ToShortDateString()+"')");

                            command.ExecuteNonQuery();

                        }

                    }

                }

                catch (Exception erro)

                {

     

                    MessageBox.Show(erro.Message);

                }

     

            }

     

            public void PesquisaArquivo()

            {

     

                DirectoryInfo diretorio = new DirectoryInfo("E:\\ARQUIVO_PONTO\\Relogio_Ponto");

                FileInfo[] arquivos = diretorio.GetFiles("*.*");

     

                SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["conexao"].ToString());

     

                string Query = "SELECT * FROM FP0000 WHERE C_NOMARQ IN ('" + string.Join(arquivos.ToList<FileInfo>()) + "') ";

                //string Query = "SELECT * FROM FP0000 WHERE C_NOMARQ IN ('" + arquivos + "') ";

                SqlCommand command = new SqlCommand(Query, connection);

                connection.Open();

                try

                {

                    DataTable dTable = new DataTable("arquivo");

                    SqlDataAdapter adapter = new SqlDataAdapter(command);

                    adapter.Fill(dTable);

                    SF_FP0000.DataSource = dTable;

                }

                catch (Exception erro)

                {

                    MessageBox.Show(erro.Message);

                    throw;

                }

                finally

                {

                    connection.Close();

                }

     

            }

     

     

            #endregion MÉTODOS

    quinta-feira, 10 de novembro de 2011 11:54
  • Entendi. Mas o join ficou errado..

    Errado:

    string Query = "SELECT * FROM FP0000 WHERE C_NOMARQ IN ('" + string.Join(arquivos.ToList<FileInfo>()) + "') ";

     

    Correto:

    string Query = "SELECT * FROM FP0000 WHERE C_NOMARQ IN ('" + string.Join("','",arquivos.ToList<FileInfo>()) + "') ";

     

    sexta-feira, 11 de novembro de 2011 09:51
  • Boa Tarde, AndesBH!

    Eu já havia tentado dessa forma e  a string de concatenação fica sublinhado por vermelho.

    Também tentei tratar o array fora da consulta, estou pensando em tratar o array com um   for   ou  foreach.

    sexta-feira, 11 de novembro de 2011 15:55
  • Com o For ou foreach também irá funcionar. Muito estranho não funcionar com o Join ??!?!?! No meu teste eu fiz com 3 linhas bem simples e esta funcionando normal!!!!! 
    segunda-feira, 14 de novembro de 2011 10:13
  • Tentei assim, mas trouxe somente a primeira linha.

     

            public void PesquisaArquivo()

            {

     

                DirectoryInfo diretorio = new DirectoryInfo("E:\\ARQUIVO_PONTO\\Relogio_Ponto");

                FileInfo[] arquivos = diretorio.GetFiles("*.*");

     

                SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["POWDER.Properties.Settings.conexao"].ToString());

                foreach (var arq in arquivos)

                {

                    string Query = "SELECT * FROM FP0000 WHERE C_NOMARQ IN ('" + arq +"') ";

                    SqlCommand command = new SqlCommand(Query, connection);

                    connection.Open();

                    try

                    {

                        DataTable dTable = new DataTable("arquivo");

                        SqlDataAdapter adapter = new SqlDataAdapter(command);

                        adapter.Fill(dTable);

                        SF_FP0000.DataSource = dTable;

                       

                    }

                    catch (Exception erro)

                    {

                        MessageBox.Show(erro.Message);

                        throw;

                    }

                    finally

                    {

                        connection.Close();

                    }  

                }

     

     

            }

     

    sexta-feira, 18 de novembro de 2011 12:59
  • Bom dia, AndesBH,

    Dá uma olhada no código acima e vê se consegue acertar ele para mim, pois venho de outra linguagem e estou migrando um ERP para C# e não

    estou familiarizado com esta linguagem.

    No código que você postou com o ToList() você estaria usando o framework 4.0???

    Eu estou usando o 3.5 com Enterprise Library 4.1

    terça-feira, 22 de novembro de 2011 12:30