Inquiridor
Erro em gridview

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();
}
}
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
-
-
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
-
-
É 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
-
-
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.
-
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
-
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>()) + "') ";
-
-
-
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();
}
}
}
-
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