none
Uso do Button para chamar um Classe RRS feed

  • Pergunta

  • Bom dia, estou iniciando o aprendizado no desenvolvimento com a linguagem C#.

    Quero fazer um aplicativo que leia um arquivo txt e grave os dados no SQLServer.

    Estou usando o Visual Studio 2017 e WPF.

    Estou com dificuldade em estabelecer os parâmetros para um Button executar o programa.

    Tenho o seguinte código para ler o txt e gravar no SQLServer.

    using System;
    using System.Collections.Generic;
    using System.Data.SqlClient;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;

    namespace ConsoleApplication1
    {
        class Program
        {
            public static void Main(string[] args)
            {
                List<string> myValues = new List<string>();

                string line;

                StreamReader file = new StreamReader(@"C:\Users\SAMSUNG\Desktop\McdonaldsMenu1.txt");
                if ((line = file.ReadLine()) != null)
                {
                    string[] fields = line.Split(',');
                    using (SqlConnection con = new SqlConnection(@"server=DESKTOP-P5TNNUN;database=TestDataBase;uid=DESKTOP-P5TNNUN\SAMSUNG;connection timeout=30;Trusted_Connection=Yes;Integrated Security=SSPI"))
                    {

                        con.Open();
                        SqlCommand cmd = new SqlCommand("INSERT INTO Products(Product_Name, Product_Price, RstName) VALUES (@Product_Name, @Product_Price, @RstName)", con);
                        cmd.Parameters.AddWithValue("@Product_Name", fields[0].ToString());
                        cmd.Parameters.AddWithValue("@Product_Price", fields[1].ToString());
                        cmd.Parameters.AddWithValue("@RstName", fields[2].ToString());
                        cmd.ExecuteNonQuery();
                    }
                }
            }
        }
    }

    Abaixo tem o código com Button:

    using ConsoleApplication1;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;

    namespace Bionexo
    {
        /// <summary>
        /// Interação lógica para MainWindow.xam
        /// </summary>
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
            }

            private void Acionar_Click(object sender, RoutedEventArgs e)
            {
                Program c = new Program();
                    
            }
        }
        }

    Quando executo, não acontece nada. Não da erro, simplesmente não acontece nada.

    Agradeço alguma ajuda,

    Raimundo

    terça-feira, 6 de novembro de 2018 11:49

Respostas

  • Olá Raimundo,

    Usei o seu código e melhorei ele para funcionar certo, aqui segue a correcção:

                    

    using System;
    using System.Collections.Generic;
    using System.Data.SqlClient;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;

    namespace ConsoleApplication1
    {
        public class Program
        {
            public static void Main(string[] args)
            {
                List<string> myValues = new List<string>();

                string line;

                StreamReader file = new StreamReader(@"C:\Users\SAMSUNG\Desktop\McdonaldsMenu1.txt");
                if ((line = file.ReadLine()) != null)
                {
                    string[] fields = line.Split(',');
                    using (SqlConnection con = new SqlConnection(@"server=DESKTOP-P5TNNUN;database=TestDataBase;uid=DESKTOP-P5TNNUN\SAMSUNG;connection timeout=30;Trusted_Connection=Yes;Integrated Security=SSPI"))
                    {

                        con.Open();
                        SqlCommand cmd = new SqlCommand("INSERT INTO Products(Product_Name, Product_Price, RstName) VALUES (@Product_Name, @Product_Price, @RstName)", con);
                        cmd.Parameters.AddWithValue("@Product_Name", fields[0].ToString());
                        cmd.Parameters.AddWithValue("@Product_Price", fields[1].ToString());
                        cmd.Parameters.AddWithValue("@RstName", fields[2].ToString());
                        cmd.ExecuteNonQuery();

        MessageBox.Show("Dados cadastrados!");
                    }
                }
            }
        }
    }

    Abaixo tem o código com Button:

    using ConsoleApplication1;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;

    namespace Bionexo
    {
        /// <summary>
        /// Interação lógica para MainWindow.xam
        /// </summary>
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
            }

            private void Acionar_Click(object sender, RoutedEventArgs e)
            {
                string[] args = new string[] { "Ok" };
                ConsoleApplication1.Program.Main(args);//Espero que referenciou o ConsoleApplication1 nas suas referências.

            }
        }
        }

    Marque como resposta caso te ajudou.

    • Marcado como Resposta Raimundo N Cruz domingo, 11 de novembro de 2018 20:30
    terça-feira, 6 de novembro de 2018 13:01

Todas as Respostas

  • Raimundo N Cruz,

       Você quer colocar um "Button" em um "ConsoleApplication"?

       Err... desculpe, mas não vai rolar...

       Você pode colocar um Console.ReadLine:

    =========================================

    Console.ReadLine Method

    https://docs.microsoft.com/pt-br/dotnet/api/system.console.readline?view=netframework-4.7.2

    =========================================

        Para "ler" um comando digitado na tela e disparar uma classe.

    []'s,
    Fabio I.
    terça-feira, 6 de novembro de 2018 11:56
  • Grato, Fabio

    Fiz como Console Aplication e as coisas começaram a aparecer.

    Um abraço,

    Raimundo

    terça-feira, 6 de novembro de 2018 12:40
  • Olá Raimundo,

    Usei o seu código e melhorei ele para funcionar certo, aqui segue a correcção:

                    

    using System;
    using System.Collections.Generic;
    using System.Data.SqlClient;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;

    namespace ConsoleApplication1
    {
        public class Program
        {
            public static void Main(string[] args)
            {
                List<string> myValues = new List<string>();

                string line;

                StreamReader file = new StreamReader(@"C:\Users\SAMSUNG\Desktop\McdonaldsMenu1.txt");
                if ((line = file.ReadLine()) != null)
                {
                    string[] fields = line.Split(',');
                    using (SqlConnection con = new SqlConnection(@"server=DESKTOP-P5TNNUN;database=TestDataBase;uid=DESKTOP-P5TNNUN\SAMSUNG;connection timeout=30;Trusted_Connection=Yes;Integrated Security=SSPI"))
                    {

                        con.Open();
                        SqlCommand cmd = new SqlCommand("INSERT INTO Products(Product_Name, Product_Price, RstName) VALUES (@Product_Name, @Product_Price, @RstName)", con);
                        cmd.Parameters.AddWithValue("@Product_Name", fields[0].ToString());
                        cmd.Parameters.AddWithValue("@Product_Price", fields[1].ToString());
                        cmd.Parameters.AddWithValue("@RstName", fields[2].ToString());
                        cmd.ExecuteNonQuery();

        MessageBox.Show("Dados cadastrados!");
                    }
                }
            }
        }
    }

    Abaixo tem o código com Button:

    using ConsoleApplication1;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;

    namespace Bionexo
    {
        /// <summary>
        /// Interação lógica para MainWindow.xam
        /// </summary>
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
            }

            private void Acionar_Click(object sender, RoutedEventArgs e)
            {
                string[] args = new string[] { "Ok" };
                ConsoleApplication1.Program.Main(args);//Espero que referenciou o ConsoleApplication1 nas suas referências.

            }
        }
        }

    Marque como resposta caso te ajudou.

    • Marcado como Resposta Raimundo N Cruz domingo, 11 de novembro de 2018 20:30
    terça-feira, 6 de novembro de 2018 13:01
  • Muito obrigado Timóteo,

    Agora estou com outro desafio.

    Como eu faço para o button levar o nome do arquivo.

    "StreamReader file = new StreamReader(@"C:\Users\SAMSUNG\Desktop\McdonaldsMenu1.txt");"

    Estou buscando os arquivos txt em um diretorio através de um ComboBox.

    Quando clico no combobox, o arquivo txt é mostrado em TextBox. Até aqui o código está funcionando.

    Depois eu criei o button para pegar esse arquivo e gravar no Banco de Dados.

    Em vez de colocar o nome do arquivo (MacdonaldMenu.txt) no código, eu gostaria de colocar uma váriavel vinda do button.

    Veja como esta ficando o código:

    private void ComboBoxCotacao_SelectionChanged(object sender, SelectionChangedEventArgs e)
            {
                //tries to read in the file to the text box Message_Viewer
                string[] Files = Directory.GetFiles(@"C:\ProjetoBionexo\Cotacoes");
                //foreach (string file in Files)
                {
                    var selectedFile = Files[ComboBoxCotacao.SelectedIndex];
                    ArquivoTexto.Text = "";
                    ArquivoTexto.Text = File.ReadAllText(selectedFile);
                }
            }

            private void Gravar_Click(object sender, RoutedEventArgs e, string selectedFile)
            {
                string[] args = new string[] { selectedFile };
                ProjetoBionexo.Program.Main(args);
            }

    Como estou fazendo no WPF, troquei o ConsoleAplication1 por ProjetoBionexo.

    Como ConsoleAplication o código para gravar no banco, funcionou.

    Obrigado,

    Raimundo

    domingo, 11 de novembro de 2018 20:42
  • Olá Raimundo tudo bem?,

    Vê esse código se entendi o que quere fazer:

    using System;
    using System.Collections.Generic;
    using System.Data.SqlClient;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;

    namespace ConsoleApplication1
    {
        class Program
        {
    public static string arquivo;
            public static void Main(string[] args)
            {
                GravarArquivo(arquivo);
            }

    public static void GravarArquivo(string path)
    {
        List<string> myValues = new List<string>();

                string line;

                StreamReader file = new StreamReader(@"C:\Users\SAMSUNG\Desktop\" + path);
                if ((line = file.ReadLine()) != null)
                {
                    string[] fields = line.Split(',');
                    using (SqlConnection con = new SqlConnection(@"server=DESKTOP-P5TNNUN;database=TestDataBase;uid=DESKTOP-P5TNNUN\SAMSUNG;connection timeout=30;Trusted_Connection=Yes;Integrated Security=SSPI"))
                    {

                        con.Open();
                        SqlCommand cmd = new SqlCommand("INSERT INTO Products(Product_Name, Product_Price, RstName) VALUES (@Product_Name, @Product_Price, @RstName)", con);
                        cmd.Parameters.AddWithValue("@Product_Name", fields[0].ToString());
                        cmd.Parameters.AddWithValue("@Product_Price", fields[1].ToString());
                        cmd.Parameters.AddWithValue("@RstName", fields[2].ToString());
                        cmd.ExecuteNonQuery();
                    }
                }
    }
        }
    }

    //No WPF

    private void ComboBoxCotacao_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        //tries to read in the file to the text box Message_Viewer
        string[] Files = Directory.GetFiles(@"C:\ProjetoBionexo\Cotacoes");
        foreach (string file in Files)
        {
            var selectedFile = Files[ComboBoxCotacao.SelectedIndex];
            ArquivoTexto.Text = "";
            ArquivoTexto.Text = File.ReadAllText(selectedFile);
    Gravar_Click(this,RoutedEventArgs.Empty,selectedFile);
        }
    }

    private void Gravar_Click(object sender, RoutedEventArgs e, string selectedFile)
    {
        string[] args = new string[] {"0"};
        ProjetoBionexo.Program.arquivo = selectedFile;
        ProjetoBionexo.Program.Main(args);
     }

    Sucesso!

    segunda-feira, 12 de novembro de 2018 07:14
  • Bom dia, Timoteo,

    Estou avançando!!!!

    Estou com problema na seguinte linha do código: "Gravar_Click(this, RoutedEventArgs.Empty, selectedFile);"

    Da o seguinte erro: Não é possível converter de "System.EventArgs para System.Window.RoutedEventArgs"

    Criei um event handler : InitializeComponent();

                                            Loaded += new RoutedEventArgs(Gravar_Click);

    Não funcionou.

    Grato, pela ajuda.

    Raimundo

    segunda-feira, 12 de novembro de 2018 11:21
  • Boa Raimundo,

    Não uso muito wpf mas o problema é sou passar nulo no argumento do RoutedEventArgs, no win form usamos o empty ou null no parâmetro do EventArgs.

    Sucesso aí!

    segunda-feira, 12 de novembro de 2018 17:14