Jump to content

[Resolvido] Ficheiro txt, data grid e SqlServer


jafm
 Share

Recommended Posts

Olá Pessoal,

Estou com o seguinte problema, Comecei por importar um ficheiro txt para uma datagrid... até aqui tudo bem, já consigo por na minha datagrid todo o ficheiro txt formatado...

Agora não estou conseguir é por o datagrid a guardar a informação na base de dados sqlserver...

Alguém me pode dar alguma sugestão de como possa resolver o meu problema?

Link to comment
Share on other sites

O código que possuo é o seguinte, em que este me dá o seguinte erro: "erro ao ler arquivo texto. objbject reference not set to an instance of an object"

o código é:

Imports System.IO
Imports System.Data.SqlClient
Public Class Form1

Dim da As SqlDataAdapter
Dim connBD As SqlConnection
Dim ds As DataSet
Dim dt As New DataTable
Dim row As DataRow
Dim totalcaracters As Integer
Dim CodProdAcabado, Descricao, PrecoVenda As String
Dim conta As Integer
Dim linhaTexto As String = ""
'Conecção à base de dados GiTeste
Dim sqlConnector As New SqlConnection


Private Sub btnPreencheListView_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPreencheListView.Click

	'verifica se o caminho e nome do arquivo estão ok
	If txtArquivoOrigem.Text = String.Empty Or Not txtArquivoOrigem.Text.Contains(".txt") Then
		MsgBox("Informe o caminho do arquivo texto origem.")
		Return
	End If

	DataGridView1.ColumnHeadersVisible = True
	'define a estrutura da DataTable que vai receber os dados
	dt.Columns.Add("COD. PRODUTO", Type.GetType("System.String"))
	dt.Columns.Add("DESCRIÇÃO", Type.GetType("System.String"))
	dt.Columns.Add("PREÇO DE VENDA", Type.GetType("System.String"))


	Try
		'declara um streamReader, passa o caminho e nome do arquivo texto
		Dim SR As New StreamReader(txtArquivoOrigem.Text)
		'percorre o arquivo
		Do While SR.Peek() <> -1
			linhaTexto = SR.ReadLine()
			linhaTexto.TrimStart()
			linhaTexto.TrimEnd()
			linhaTexto.Trim()
			totalcaracters = linhaTexto.Length

			'particiona a linha lida em campos para serem adicionados à datagrid
			CodProdAcabado = (Mid(linhaTexto, 1, 10))
			Descricao = (Mid(linhaTexto, 11, 35))
			PrecoVenda = (Mid(linhaTexto, 46, 16))

			conta = 2
			row = dt.NewRow
			Do While conta <> -1
				dt.Rows.Add(CodProdAcabado, Descricao, PrecoVenda)
				conta -= 1
			Loop
		Loop
		'atribui ao datagridview o objeto datatable criado
		DataGridView1.DataSource = dt
		SR.Close()
 'AQUI ESTÁ A MINHA DUVIDA
		Dim sqlInclui As String
		Dim sqlComando As SqlCommand
		sqlInclui = "INSERT INTO teste (Codproduto, Descricao,PrecoVenda)VALUES ('" & CodProdAcabado & "','" & Descricao & "','" & PrecoVenda & "')"
		sqlComando = New SqlCommand(sqlInclui, sqlConnector)
		da.InsertCommand = sqlComando
	Catch ex As Exception
		MsgBox("Erro ao ler o arquivo texto." & ex.Message)
	End Try
End Sub
Private Sub btnProcurarArquivo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnProcurarArquivo.Click
	Dim AbrirComo As OpenFileDialog = New OpenFileDialog()
	Dim caminho As DialogResult
	Dim Arquivo As String
	AbrirComo.Title = "Abrir como"
	AbrirComo.FileName = "Nome Arquivo"
	AbrirComo.Filter = "Arquivos Textos (*.txt)|*.txt"
	caminho = AbrirComo.ShowDialog
	Arquivo = AbrirComo.FileName
	If Arquivo = Nothing Then
		MessageBox.Show("Arquivo Invalido", "Salvar Como", MessageBoxButtons.OK)
	Else
		txtArquivoOrigem.Text = Arquivo
	End If
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

	sqlConnector.ConnectionString = "Server=NOME\SQLEXPRESS;Database=GiTeste;User ID=++++;Password=+++++"
	Try
		sqlConnector.Open()
	Catch ex As Exception
		MessageBox.Show(ex.Message, "Ligação Falhada")
	End Try
	If sqlConnector.State = 1 Then
		MessageBox.Show("Ligação à BD GiTeste efectuada com Sucesso")
		PictureBox1.Visible = True
	End If
End Sub
Edited by Caça
Link to comment
Share on other sites

Abri novamente este novo o tópico, pois surgiu umas alterações, pois existiram mais campos com diferentes cumprimentos... E pode voltar a surgir novos campos, e ter que mudar sempre o cumprimento torna-se muito pouco vantajoso, para o código, pois está sujeito a erros de código...

Andei a pesquisar sobre o "textfiel pacer"...

Alguém me sabe ajudar de como se simplifica o processo de cumprimentos das tabelas, e que torne o código torne mais prático, para alterações dos cumprimentos...

Link to comment
Share on other sites

Fiz o seguinte código onde usei o TextFielParser... Só que agora fiquei com o mesmo problema que me fez abrir este tópico, nao consigo guardar na base de dados.. na datagrid ja aparece tudo nos cumprimentos correctos, mas nao grava a informaçao na BD, Será que me podem ajudar?

Private Sub btnImportar_Click(sender As System.Object, e As System.EventArgs) Handles btnImportar.Click
	'Conecção à base de dados GiTeste
	sqlConnector.ConnectionString = "Server=local\SQLEXPRESS;Database=GiTeste;User ID=ers;Password=ers"
	Try
		sqlConnector.Open()
	Catch ex As Exception
		MessageBox.Show(ex.Message, "Ligação Falhada")
	End Try
	If sqlConnector.State = 1 Then
		MessageBox.Show("Ligação à BD GiTeste efectuada com Sucesso")
		'	 Label1.Visible = True
	End If
	Using leitor As New TextFieldParser(txtArquivo.Text)
		'Informamos que será importado com Delimitação
		leitor.TextFieldType = FieldType.FixedWidth
		'Informamos o Delimitador
		leitor.SetFieldWidths(10, 35, 16)

		Dim linhaAtual As String()
		While Not leitor.EndOfData

			Try
				linhaAtual = leitor.ReadFields()

				dgvDados.Rows.Add(linhaAtual)


				'insere os dados no SQL Server
				sqlInclui = "IF NOT EXISTS(SELECT CodProdAcabado FROM Artigos WHERE CodProdAcabado = '" & CodProdAcabado & "' ) BEGIN INSERT INTO Artigos (CodProdAcabado, Descricao, PrecoVenda) VALUES ('" & CodProdAcabado & "','" & Descricao & "', '" & PrecoVenda & "')END"
sqlComando = New SqlCommand(sqlInclui, sqlConnector)
sqlComando.ExecuteNonQuery()
			Catch ex As MalformedLineException
				'Ignoramos a linha atual caso não seja válida
				MsgBox("Linha: " & ex.Message & " não é válida e será ignorada.")
			End Try
		End While
		MsgBox("Arquivo Importado com Sucesso!")
	End Using
End Sub
Edited by Caça
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.