none
Ajuda com SQL e Virtual Box RRS feed

  • Pergunta

  • Olá pessoal boa tarde, não sei se é possível fazer o que eu preciso mais vou descrever, e mostrar o que de código eu já tenho, lembrando não sei muito de c# e sql.

    Ambiente:

    Tenho uma VM nela tenho um db do sql, e uma Procedure que retorna uma string. Essa string é um caminho de imagem que está salva na VM, são várias imagens geradas por um software que também está na VM, mais eu pego sempre a última.

    Já no pc, conectei a base em um projeto wforms e estou chamando a proc para exibir a imagem depois em um picturebox.

    Então o que eu preciso: cada vez que uma imagem for adicionada a proc vai e busca o caminho, e la na picturebox mostra a nova imagem(troca).

    É possível fazer isso? Não posso fazer local.

    Código da Procedure:

    [dbo].[PC_SelecionaFoto] AS BEGIN SET NOCOUNT ON; DECLARE @string varchar(max), @C_data char(8), @C_time char(6), @ID_term char(1), @ID_perso char(8), @data datetime SET @data = getdate() SELECT TOP 1 @C_data = C_Date, @C_time = C_Time, @ID_term = L_TID, @ID_perso = C_Unique FROM tEnter ORDER BY C_Date DESC, C_Time DESC, L_TID DESC, C_Unique DESC SET @string = N'C:\Users\FTI-007\Pictures\' + @C_data + '\' + @C_data + @C_time + '_0000000' + @ID_term + '_' + @ID_perso + '.jpg'

    SELECT @string END

    Código C#

    using System;
    using System.Collections.Generic;
    using System.Collections.Specialized;
    using System.ComponentModel;
    using System.Data;
    using System.Data.SqlClient;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace Porteiro
    {
        public partial class Tela : Form
        {
            public Tela()
            {
                InitializeComponent();            
            }
    
            private void Tela_Load(object sender, EventArgs e)
            {
                carregarImagem();
                enviarImagem();
            }
    
            public string carregarImagem()
            {
                string imagem = "";
                using (SqlConnection StringConexao = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["Porteiro.Properties.Settings.ConnectionString"].ConnectionString))
                {
                    using (SqlCommand comando = new SqlCommand("PC_SelecionaFoto", StringConexao))
                    {
                        SqlDataReader reader;
                        comando.CommandType = CommandType.StoredProcedure;
    
                        try
                        {
                            StringConexao.Open();
    
                            reader = comando.ExecuteReader();
                            imagem = (Convert.ToString(reader["@string"]));
    
                            StringConexao.Close();
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show("Erro: " + ex.Message);
                        }
                    }
                }
                return imagem;
            }
    
            public void enviarImagem()
            {
                string url = carregarImagem();
                pictureBox1.Image = new Bitmap(url);
                pictureBox1.Refresh();
            }
        }
    }

    Lembrando que esse código está dando erro.. obrigado


    • Editado Jonas Marco quinta-feira, 4 de dezembro de 2014 13:45
    quinta-feira, 4 de dezembro de 2014 13:45

Respostas

  • Coloque o comando abaixo:

    reader.Read();

    antes da linha 

    imagem = (Convert.ToString(reader["@string"]));

    para que o ponteiro do datareader seja movido pro primeiro registro encontrado na busca.



    • Marcado como Resposta Jonas Marco quinta-feira, 4 de dezembro de 2014 17:57
    quinta-feira, 4 de dezembro de 2014 17:24

Todas as Respostas

  • Pelo que entendi, a procedure "devolve" o caminho onde está gravado o arquivo de imagem da máquina, certo ?

    Você consegue rodar isoladamente essa procedure, apenas para testar e ver se ela está rodando corretamente ?

    Dentro do código C#, no método enviarImagem, debugando, você consegue ver se a url está sendo trazida de forma correta ?

    Que erro está no código ??

    quinta-feira, 4 de dezembro de 2014 13:58
  • Olá Julio Cesar

    1. Sim, exatamente devolve o caminho da imagem, no meu caso é sempre a última que foi inserida;

    2. Sim, se eu dou um print em @string, ela executa corretamente, retornando o caminho da última imagem;

    3. Não, pois da erro no carregarImagem() e não segue adiante;

    4. Erro: na linha: -> imagem = (Convert.ToString(reader["@string"])); 

    Catch:

    'IndexOutOfBoundsException'

     @string

    quinta-feira, 4 de dezembro de 2014 15:11
  • Coloque o comando abaixo:

    reader.Read();

    antes da linha 

    imagem = (Convert.ToString(reader["@string"]));

    para que o ponteiro do datareader seja movido pro primeiro registro encontrado na busca.



    • Marcado como Resposta Jonas Marco quinta-feira, 4 de dezembro de 2014 17:57
    quinta-feira, 4 de dezembro de 2014 17:24
  • Ae funcionou amigo, fiz mais algumas alterações para passar a imagem ao picturebox e deu certo, abraço.
    quinta-feira, 4 de dezembro de 2014 17:58