Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

vasco16

Inserir imagem numa aplicação vb.net

Recommended Posts

vasco16

Boas pessoal tenho este código:

 Private Sub Button10_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button10.Click
        ' Define a Connection String
        Dim dbConn As OleDb.OleDbConnection = New OleDb.OleDbConnection()
        dbConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\Bless - Gestão de Stands & Oficinas.mdb;"
       

        Try
            ' Cria um novo FileStream para leitura da imagem

            Dim fs As New IO.FileStream("C:\image.jpg", IO.FileMode.Open, IO.FileAccess.Read)

            ' Cria um array de Bytes do tamanho do FileStream 

            Dim ImageData(fs.Length() - 1) As Byte

            ' Lê os bytes do FileStream para o array criado

            fs.Read(ImageData, 0, ImageData.Length)

            ' Fecha o FileStream ficando a imagem guardada no array

            fs.Close()

            Using connection As New OleDb.OleDbConnection(dbConn.ConnectionString)



                ' Define o commando Transact-SQL para inserir dados

                Dim SQL As String = "INSERT INTO contacts ([matricula],[foto]) VALUES (@matricula,@foto);"

                Dim command As New SqlClient.SqlCommand(SQL, connection)



                ' Define os parametros para a inserção de dados, onde está o array 

                ' de bytes(imagem) a ser inserida. O tipo do campo é Image

                command.Parameters.Add("@matricula", SqlDbType.VarChar).Value = "jpaulino"

                command.Parameters.Add("@foto", SqlDbType.Image).Value = ImageData

                connection.Open()



                ' Insere os campos no SQL

                command.ExecuteNonQuery()




            End Using



        Catch ex As Exception

            MessageBox.Show(ex.Message, My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Error)

        End Try


    End Sub

para alem de nao estar a fazer o que eu quero.. que é abrir uma caixa para localizar a imagem, este código esta-me a dar um erro no provider.. terei eu a fazer mal a ligação á BD? :S

Share this post


Link to post
Share on other sites
Asgorath

Boas.

A tua base de dados Acess e estas a usar o

Dim command As New SqlClient.SqlCommand(SQL, connection) que é para sql server

em vez de OleDb


"The Dark Side Clouds Everthing. Impossible To See The Future Is."My rig: Intel Core 2 Quad Q9450 | abit IP35P | 4G Kingston 800 Mhz | XFX GeForce 9800 GX2 1G ddr3 | 2X WD5000AAJS 500Gb Sata 2 | PSU 600W || Caixa El-Diablo | Creative XMod

Share this post


Link to post
Share on other sites
vasco16

Boas.

A tua base de dados Acess e estas a usar o

Dim command As New SqlClient.SqlCommand(SQL, connection) que é para sql server

em vez de OleDb

entao em vez disso fica

Dim command As New Ole.OleCommand(SQL, connection)
?

Share this post


Link to post
Share on other sites
vasco16

Dim command As New OleDB.OleCommand(SQL, connection)

exacto só que agora devo estar a definir mal os parametros..

Dim SQL As String = "INSERT INTO contacts ([matricula],[foto]) VALUES (@matricula,@foto);"

                Dim command As New OleDb.OleDbCommand(SQL, connection)

                ' Define os parametros para a inserção de dados, onde está o array

                ' de bytes(imagem) a ser inserida. O tipo do campo é Image

                command.Parameters.Add("@matricula", OleDb.OleDbType.VarChar).Value = "jj"

                command.Parameters.Add("@foto", OleDb.OleDbType.Image).Value = ImageData

                connection.Open()

Share this post


Link to post
Share on other sites
José Lopes

Ainda se mal que pergunte... o acess permite blob's?


Quando te pedirem peixe.... ensina-os a Pescar!!Hum..lálálálá!!

Share this post


Link to post
Share on other sites
jpaulino

Ainda se mal que pergunte... o acess permite blob's?

Objectos permite ... mas sinceramente também nunca usei.  :P

Fiz sempre em SQL.

Share this post


Link to post
Share on other sites
José Lopes

pois.... Oracle, Sql, mysql e outros sei que permite... agora access... sei que permite objectos, mas através daquele método de inserção bué estranho... agora... assim não fazia ideia...

De qualquer maneira... a forma de armazenar deve ser estranha porque as BD's crescem exponenciamente quando se usa esses métodos.

Quando trabalhava em access... utilizava sempre a path.


Quando te pedirem peixe.... ensina-os a Pescar!!Hum..lálálálá!!

Share this post


Link to post
Share on other sites
jpaulino

pois.... Oracle, Sql, mysql e outros sei que permite... agora access... sei que permite objectos, mas através daquele método de inserção bué estranho... agora... assim não fazia ideia...

De qualquer maneira... a forma de armazenar deve ser estranha porque as BD's crescem exponenciamente quando se usa esses métodos.

Quando trabalhava em access... utilizava sempre a path.

Eu também não sei se dá ... logo se tiver tempo vou testar.

E também uso sempre o path.

Share this post


Link to post
Share on other sites
vasco16

exacto só que agora devo estar a definir mal os parametros..

devo ter de errado aqui :s da-me erro nos parametros..

Share this post


Link to post
Share on other sites
José Lopes

mas afinal estas a usar que BD?


Quando te pedirem peixe.... ensina-os a Pescar!!Hum..lálálálá!!

Share this post


Link to post
Share on other sites
debliu

 command.Parameters.Add("matricula", OleDb.OleDbType.VarChar).Value = "jj"

command.Parameters.Add("foto", OleDb.OleDbType.Image).Value = ImageData

tenta assim, acho que o Access não leva com as "@"'s

Share this post


Link to post
Share on other sites
debliu

Mas de qualquer maneira tu tens ai muita cena ainda em SQL server acho eu...

OleDb.OleDbType.Image

acho que isto no existe em access

continuo a achar que era melhor guardares apenas o link para a imagem e não a imagem...

Share this post


Link to post
Share on other sites
jpaulino

continuo a achar que era melhor guardares apenas o link para a imagem e não a imagem...

Aqui também concordo!

Share this post


Link to post
Share on other sites
vasco16

Aqui também concordo!

mas isto vai ser para trabalhar em vários computadores...

Share this post


Link to post
Share on other sites
José Lopes

crias um ficheiro num servidor....normalmente em ambiente de rede à sempre uma unidade mapeada... ou entao crias isso tu.

da experiência que eu tenho e eu trabalho bastante com blob's em Oracle... só tem sentido quando há dispoersão geográfica das instalações...sendo tudo local... não há nada que chegue à utilização de paths para guardar ficheiros, até pk:

- é incomparavelmente mais rápido;

- não tens que criar nenhum mecanismo de controle de edição;

- não tens criar rotinas de upload e comparação dos files sempre que alguma coisa correr mal (por exemplo fechares o form, faltar a luz, ficares sem rede...)

Avalia todas estas variáveis antes de avançares....

além de que, não tenho a certeza que o access suporte o que queres fazer


Quando te pedirem peixe.... ensina-os a Pescar!!Hum..lálálálá!!

Share this post


Link to post
Share on other sites
pt_V1p3r

Em relação ao uso de images no access.. sim funciona tal qual sql ... transforma a imagem num array de bytes e guardo no access como OLE Object.. e funciona .. se é a melhor solução isso já so depende das tuas necessidades ... Atenção se usares access no vb tens que trabalhar com comandos OLEDB e não SQLClient ...

Share this post


Link to post
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

×

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.