none
Salvar Imagem no SQL Server com VB6

    Pergunta

  • Ola!!!

       Estou utilizando um sistema de identificação de clientes por impressão digital, mas estou tendo alguns problemas na momento de gravar as imagens das digitais no banco SQL Server. Estou utilizando um campo image do SQL Server. Alguem teria alguma dica ou exemplo de codigo eficiente para gravar e recuperar estas imagens??

      Grato pela atenção...

       Emerson


    quarta-feira, 11 de outubro de 2006 12:06

Respostas

  • Emerson,

    Não sei se este exemplo do Knowledge Base resolve, mas confira abaixo:

    http://support.microsoft.com/kb/258038

    Abraços,
    Francisco
    OK, Computer - http://thespoke.net/blogs/fbcjunior/default.aspx

    quarta-feira, 11 de outubro de 2006 19:48
    Moderador
  • Bom dia Emerson,
    Não sei se já resolveu, mas se não resolveu, ai vai um exemplo.

    Neste exemplo, estou buscando os arquivos com um FileDialog

    OpenFileDialog1.Filter =

    "JPEG (*.JPG)|*.jpg"

    OpenFileDialog1.Title =

    "Anexar arquivos"

    OpenFileDialog1.Multiselect =

    True

    OpenFileDialog1.ShowDialog()

     

    For Each sFile As String In

    OpenFileDialog1.FileNames

     

    Dim Arquivo As String = System.IO.Path

    .GetFileName(sFile)

    Caminho = sFile

    Nome = Arquivo

    SalvarArquivos()

     

    Next

    CheckBox1.Checked =

    True

    Caminho =

    ""

     

    A função "SalvarArquivos()" que ele chama:

    Public

     

     

    Sub

    SalvarArquivos()

     

     

    Dim fsLer As New FileStream(Caminho, FileMode

    .Open)

     

     

    Dim ArquivoByte() As Byte = New Byte

    (fsLer.Length - 1) {}

    fsLer.Read(ArquivoByte, 0, fsLer.Length)

    conection.Open()

     

     

    Dim cmdsalvar As New SqlCommand("Insert T_Anexos (id_Chamado, Nome, Anexo) Values(@Id_Chamado, @Nome, @Anexo)"

    , conection)

    cmdsalvar.CommandType = Data.

     

    CommandType

    .Text

    cmdsalvar.Parameters.Add(

     

    "@id_chamado", SqlDbType.Int).Value =

    "11"

    cmdsalvar.Parameters.Add(

     

    "@Nome", SqlDbType

    .VarChar).Value = Nome

    cmdsalvar.Parameters.Add(

     

    "@Anexo", SqlDbType

    .Image).Value = ArquivoByte

    cmdsalvar.ExecuteNonQuery()

    conection.Close()

     

     

    End

    Sub

     

     

     

     

     

     

     

     

    Para recuperar, estou salvando no %systemroot% na pasta temp. Primeiro verifico se existe a pasta e o arquivo...

     

    Public

     

     

    Sub

    TestarPasta()

     

     

    If Directory.Exists(Directory.GetDirectoryRoot("%systemroot%") & "\temp") = True

    Then

    Pasta =

     

    Directory.GetDirectoryRoot("%systemroot%") &

    "\temp"

     

     

    Else

     

     

    Directory.CreateDirectory(Directory.GetDirectoryRoot("%systemroot%") & "\temp"

    )

    Pasta =

     

    Directory.GetDirectoryRoot("%systemroot%") &

    "\temp"

     

     

    End

    If

     

     

    End Sub

     

    Em seguida mando baixar o arquivo: (neste caso, estou salvando por demanda em intens carregados em um checkedlistbox, mas pode chamar usando a variável que achar melhor)

    Dim

     

     

    NomeAnexo As

    String

    NomeAnexo = Pasta &

     

    "\"

    & CheckedListBox1.SelectedItem.ToString()

     

     

    If System.IO.File.Exists(NomeAnexo)

    Then

    System.IO.

     

    File

    .Delete(NomeAnexo)

     

     

    End

    If

     

     

     

    Dim da As New SqlDataAdapter

    _

    (

     

    "Select Anexo From T_Anexos Where id_chamado = " & Form3

    .Id, conection)

     

     

    Dim MyCB As SqlCommandBuilder = New SqlCommandBuilder

    (da)

     

     

    Dim ds As New DataSet

    ()

    conection.Open()

    da.Fill(ds,

     

    "T_Anexos"

    )

     

     

    Dim myRow As

    DataRow

    myRow = ds.Tables(

     

    "T_Anexos"

    ).Rows(0)

     

     

    Dim MyData() As

    Byte

    MyData = myRow(

     

    "Anexo"

    )

     

     

    Dim K As

    Long

    K = UBound(MyData)

     

     

    Dim fs As New FileStream(Pasta & "/" & CheckedListBox1.SelectedItem.ToString(), FileMode.OpenOrCreate, FileAccess

    .Write)

    fs.Write(MyData, 0, K)

    fs.Close()

    fs =

     

    Nothing

    MyCB =

     

    Nothing

    ds =

     

    Nothing

    da =

     

    Nothing

    conection.Close()

    'Esta função manda abrir o arquivo depois de salvo

     

     

    Dim appString As String = Pasta & "/"

    & CheckedListBox1.SelectedItem.ToString()

    System.Diagnostics.

     

    Process

    .Start(appString)

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    Espero ter ajudado.

    terça-feira, 1 de novembro de 2011 13:56

Todas as Respostas

  • Emerson,

    Não sei se este exemplo do Knowledge Base resolve, mas confira abaixo:

    http://support.microsoft.com/kb/258038

    Abraços,
    Francisco
    OK, Computer - http://thespoke.net/blogs/fbcjunior/default.aspx

    quarta-feira, 11 de outubro de 2006 19:48
    Moderador
  •    Ola!!

       Tentei algo como no codigo a seguir e parece ter dado certo, só estou em duvida quanto a segurança disso:

      strSQL = "SELECT CLI_DIGITAL_1 FROM CLIENTES WHERE (CLI_COD = " & lngCodCli & ");"
      rs.Open strSQL, cnDatabase, adOpenStatic, adLockOptimistic
     
      rs.Update "CLI_DIGITAL_1", template
      
      rs.Close
      Set rs = Nothing

      Minha duvida é se nesse UPDATE da menira como eu fiz fica seguro, eu achei mais facil mas nunca havia trabalhado assim, o jeito é ver o que acontece...

      Grato pela ajuda...

     

     

    quarta-feira, 11 de outubro de 2006 20:01
  • Bom dia Emerson,
    Não sei se já resolveu, mas se não resolveu, ai vai um exemplo.

    Neste exemplo, estou buscando os arquivos com um FileDialog

    OpenFileDialog1.Filter =

    "JPEG (*.JPG)|*.jpg"

    OpenFileDialog1.Title =

    "Anexar arquivos"

    OpenFileDialog1.Multiselect =

    True

    OpenFileDialog1.ShowDialog()

     

    For Each sFile As String In

    OpenFileDialog1.FileNames

     

    Dim Arquivo As String = System.IO.Path

    .GetFileName(sFile)

    Caminho = sFile

    Nome = Arquivo

    SalvarArquivos()

     

    Next

    CheckBox1.Checked =

    True

    Caminho =

    ""

     

    A função "SalvarArquivos()" que ele chama:

    Public

     

     

    Sub

    SalvarArquivos()

     

     

    Dim fsLer As New FileStream(Caminho, FileMode

    .Open)

     

     

    Dim ArquivoByte() As Byte = New Byte

    (fsLer.Length - 1) {}

    fsLer.Read(ArquivoByte, 0, fsLer.Length)

    conection.Open()

     

     

    Dim cmdsalvar As New SqlCommand("Insert T_Anexos (id_Chamado, Nome, Anexo) Values(@Id_Chamado, @Nome, @Anexo)"

    , conection)

    cmdsalvar.CommandType = Data.

     

    CommandType

    .Text

    cmdsalvar.Parameters.Add(

     

    "@id_chamado", SqlDbType.Int).Value =

    "11"

    cmdsalvar.Parameters.Add(

     

    "@Nome", SqlDbType

    .VarChar).Value = Nome

    cmdsalvar.Parameters.Add(

     

    "@Anexo", SqlDbType

    .Image).Value = ArquivoByte

    cmdsalvar.ExecuteNonQuery()

    conection.Close()

     

     

    End

    Sub

     

     

     

     

     

     

     

     

    Para recuperar, estou salvando no %systemroot% na pasta temp. Primeiro verifico se existe a pasta e o arquivo...

     

    Public

     

     

    Sub

    TestarPasta()

     

     

    If Directory.Exists(Directory.GetDirectoryRoot("%systemroot%") & "\temp") = True

    Then

    Pasta =

     

    Directory.GetDirectoryRoot("%systemroot%") &

    "\temp"

     

     

    Else

     

     

    Directory.CreateDirectory(Directory.GetDirectoryRoot("%systemroot%") & "\temp"

    )

    Pasta =

     

    Directory.GetDirectoryRoot("%systemroot%") &

    "\temp"

     

     

    End

    If

     

     

    End Sub

     

    Em seguida mando baixar o arquivo: (neste caso, estou salvando por demanda em intens carregados em um checkedlistbox, mas pode chamar usando a variável que achar melhor)

    Dim

     

     

    NomeAnexo As

    String

    NomeAnexo = Pasta &

     

    "\"

    & CheckedListBox1.SelectedItem.ToString()

     

     

    If System.IO.File.Exists(NomeAnexo)

    Then

    System.IO.

     

    File

    .Delete(NomeAnexo)

     

     

    End

    If

     

     

     

    Dim da As New SqlDataAdapter

    _

    (

     

    "Select Anexo From T_Anexos Where id_chamado = " & Form3

    .Id, conection)

     

     

    Dim MyCB As SqlCommandBuilder = New SqlCommandBuilder

    (da)

     

     

    Dim ds As New DataSet

    ()

    conection.Open()

    da.Fill(ds,

     

    "T_Anexos"

    )

     

     

    Dim myRow As

    DataRow

    myRow = ds.Tables(

     

    "T_Anexos"

    ).Rows(0)

     

     

    Dim MyData() As

    Byte

    MyData = myRow(

     

    "Anexo"

    )

     

     

    Dim K As

    Long

    K = UBound(MyData)

     

     

    Dim fs As New FileStream(Pasta & "/" & CheckedListBox1.SelectedItem.ToString(), FileMode.OpenOrCreate, FileAccess

    .Write)

    fs.Write(MyData, 0, K)

    fs.Close()

    fs =

     

    Nothing

    MyCB =

     

    Nothing

    ds =

     

    Nothing

    da =

     

    Nothing

    conection.Close()

    'Esta função manda abrir o arquivo depois de salvo

     

     

    Dim appString As String = Pasta & "/"

    & CheckedListBox1.SelectedItem.ToString()

    System.Diagnostics.

     

    Process

    .Start(appString)

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    Espero ter ajudado.

    terça-feira, 1 de novembro de 2011 13:56