Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Betotecno

Tentativa inválida de MetaData quando a leitora estava fechada.

Recommended Posts

Bom dia pessoal.

 

Sou novo aqui no fórum e de programação.

Você poderiam me ajudar?

 

Tenho o seguinte código:

if ((cracha != null) && (cracha != ""))
			{
					SqlConnection conexao = ChamaBanco();
					dados = string.Concat("select * from cmello.RegistroPonto where dt_Registro BETWEEN '", dataInicio, "' and '", dataFim, "' and (cd_Cracha = '", cracha, "')");
					SqlCommand comando = new SqlCommand(dados, conexao);
					SqlDataReader dr = null;
					dr = comando.ExecuteReader();
					dr.Read();
					DataTable table = new DataTable();
					table.Load(dr);
					gridPonto.DataSource = table;

					Leitor(cracha, ref data, ref horaReg, dr);			
			}
			else
			{
				MessageBox.Show("Informar o número do Cracha");
			}
			
		}

		private static void Leitor(string cracha, ref string data, ref string horaReg, SqlDataReader dr)
		{
			while (dr != null)
			{				
		[color="#0000FF"]		cracha = dr["cd_Cracha"].ToString();
				data = dr["dt_Registro"].ToString();
				data = data.Substring(0, 2) + data.Substring(3, 2) + data.Substring(6, 4);
				horaReg = dr["dt_Registro"].ToString().Substring(11, 2) + dr["dt_Registro"].ToString().Substring(14, 2);[/color]

				StreamWriter arquivosaida = new StreamWriter("c:\\RP-SIGA.txt");
				arquivosaida.WriteLine("1" + cracha + data + horaReg);

				arquivosaida.Close();
				dr.Read();
			}

 

Mas dá o seguinte erro onde está marcado em azul: "Tentativa inválida de MetaData quando a leitora estava fechada."

 

Alguém sabe o que aconteceu?

 

Desde já agradeço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Betotecno, Seja Bem Vindo ao Fórum iMasters, de uma olhada em nossas regras: Regras do Fórum iMasters

 

Você colocou o dr.Read() no final do seu While, ele deve ser usado antes de você tentar ler qualquer valor do seu DataReader.

O correto seria:

private static void Leitor(string cracha, ref string data, ref string horaReg, SqlDataReader dr)
		{
			while (dr.Read())
			{				
				cracha = dr["cd_Cracha"].ToString();
				data = dr["dt_Registro"].ToString();
				data = data.Substring(0, 2) + data.Substring(3, 2) + data.Substring(6, 4);
				horaReg = dr["dt_Registro"].ToString().Substring(11, 2) + dr["dt_Registro"].ToString().Substring(14, 2);

				StreamWriter arquivosaida = new StreamWriter("c:\\RP-SIGA.txt");
				arquivosaida.WriteLine("1" + cracha + data + horaReg);

				arquivosaida.Close();
			}

Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Betotecno, Seja Bem Vindo ao Fórum iMasters, de uma olhada em nossas regras: Regras do Fórum iMasters

 

Você colocou o dr.Read() no final do seu While, ele deve ser usado antes de você tentar ler qualquer valor do seu DataReader.

O correto seria:

private static void Leitor(string cracha, ref string data, ref string horaReg, SqlDataReader dr)
		{
			while (dr.Read())
			{				
				cracha = dr["cd_Cracha"].ToString();
				data = dr["dt_Registro"].ToString();
				data = data.Substring(0, 2) + data.Substring(3, 2) + data.Substring(6, 4);
				horaReg = dr["dt_Registro"].ToString().Substring(11, 2) + dr["dt_Registro"].ToString().Substring(14, 2);

				StreamWriter arquivosaida = new StreamWriter("c:\\RP-SIGA.txt");
				arquivosaida.WriteLine("1" + cracha + data + horaReg);

				arquivosaida.Close();
			}

Abraços...

 

 

Oi Bruno, obrigado por responder.

 

Deu certo, mas não estou conseguindo preencher o datagrid com os dados filtrados do banco de dados.

Usei o SQL para filtrar e trazer os dados (para facilitar a vida), mas na hora de exibir não está trazendo.

Na verdade ele só será exibido no grid e depois exportado para um arquivo de texto comum (.TXT) só que numa sequencia para outro programa poder puxar, isto é, no grid não aparece nada e no texto exportado aparece uma única linha, sendo que o filtro tem que apresentar mais do que 3 registros.

 

Não sei se fui muito claro! rss

 

if ((cracha != null) && (cracha != ""))
			{				
					SqlConnection conexao = ChamaBanco();
					dados = string.Concat("select * from cmello.RegistroPonto where dt_Registro BETWEEN '", dataInicio, "' and '", dataFim, "' and (cd_Cracha = '", cracha, "')");
					SqlCommand comando = new SqlCommand(dados, conexao);
					SqlDataReader dr = null;
					dr = comando.ExecuteReader();
					dr.Read();


					while (dr.Read())
					{
						cracha = dr["cd_Cracha"].ToString();
						data = dr["dt_Registro"].ToString();
						data = data.Substring(0, 2) + data.Substring(3, 2) + data.Substring(6, 4);
						horaReg = dr["dt_Registro"].ToString().Substring(11, 2) + dr["dt_Registro"].ToString().Substring(14, 2);

						StreamWriter arquivosaida = new StreamWriter("c:\\RP-SIGA.txt");
						arquivosaida.WriteLine("1" + cracha + data + horaReg);						
						arquivosaida.Close();
					}

					
					
					DataTable table = new DataTable();
					table.Load(dr);
					gridPonto.DataSource = table;
							  
			}
Um grande abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.