none
Traducir codigo de VB a c# RRS feed

  • Pregunta

  • Hola amigos me podrían ayudar con este código trato de pasarlo de VB a C# ya eh usado los pragamas que te ayudan a traducirlo pero algunas sintaxis están mal.

    Codigo de VB:

    Public Class Form1
        Dim cn As New OleDb.OleDbConnection
        Dim cm As New OleDb.OleDbCommand
        Dim da As New OleDb.OleDbDataAdapter
        Dim dt As New DataTable

        Private Sub llenarListView()
            cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\JuanGuadalupe\Desktop\excel prueba.xlsx; Extended Properties=Excel 12.0"

            Dim sql = "select * from [Hoja1$]"
            da = New OleDb.OleDbDataAdapter(sql, cn)

            da.Fill(dt)

            For i = 0 To dt.Rows.Count - 1

                ListView1.Items.Add(dt.Rows(i).Item(0))
                ListView1.Items(i).SubItems.Add(dt.Rows(i).Item(1))
                ListView1.Items(i).SubItems.Add(dt.Rows(i).Item(2))

            Next

        End Sub


        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            llenarListView()

        End Sub

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

            cn.Open()

            cm.Connection = cn

            cm.CommandText = "Insert into [Hoja1$]values (' " & TextBox1.Text & "','" & TextBox2.Text & "','" & ComboBox1.Text & "')"
            cm.ExecuteNonQuery()

            Dim indice As Integer = ListView1.Items.Count
            ListView1.Items.Add(TextBox1.Text)
            ListView1.Items(indice).SubItems.Add(TextBox2.Text)
            ListView1.Items(indice).SubItems.Add(ComboBox1.Text)

            cn.Close()

        End Sub
    End Class

    domingo, 14 de enero de 2018 21:31

Respuestas

  • Hola

    el código convertido se vería así:

    public class Form1
    {
        OleDb.OleDbConnection cn = new OleDb.OleDbConnection;
        OleDb.OleDbCommand cm = new OleDb.OleDbCommand;
        OleDb.OleDbDataAdapter da = new OleDb.OleDbDataAdapter;
        DataTable dt = new DataTable;
        private void llenarListView()
        {
            cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Users\\JuanGuadalupe\\Desktop\\excel prueba.xlsx; Extended Properties=Excel 12.0";
            var sql = "select * from [Hoja1$]";
            da = new OleDb.OleDbDataAdapter(sql, cn);
            da.Fill(dt);
            for (i = 0; i <= dt.Rows.Count - 1; i++)
            {
                ListView1.Items.Add(dt.Rows(i).Item(0));
                ListView1.Items(i).SubItems.Add(dt.Rows(i).Item(1));
                ListView1.Items(i).SubItems.Add(dt.Rows(i).Item(2));
            }
        }
    
        private void Form1_Load(object sender, EventArgs e)
        {
            llenarListView();
        }
    
        private void Button1_Click(object sender, EventArgs e)
        {
            cn.Open();
            cm.Connection = cn;
            cm.CommandText = "Insert into [Hoja1$]values (' " + TextBox1.Text + "','" + TextBox2.Text + "','" + ComboBox1.Text + "')";
            cm.ExecuteNonQuery();
            int indice = ListView1.Items.Count;
            ListView1.Items.Add(TextBox1.Text);
            ListView1.Items(indice).SubItems.Add(TextBox2.Text);
            ListView1.Items(indice).SubItems.Add(ComboBox1.Text);
            cn.Close();
        }
    }

    Te sugiero utilizar la siguiente página en donde puedes ayudarte a convertir cualquier otro código que necesites: Convert Code

    Saludos


    Brayan De la Cruz
    Lima - Perú

    domingo, 14 de enero de 2018 21:42
  • Aquí te paso el código traducido.

    Lo primero que hice fue pasarlo por un traductor automático, y después lo corregí a mano. La única corrección que tuve que hacerle fue la de cambiar los indexadores, que en VB usan paréntesis redondos () por los paréntesis cuadrados [] que se usan en C#. Por desgracia, esta conversión es ambigua, y sin conocer el objeto en cuestión no se puede saber si la llamada es a un método o a un indexador, por lo que el traductor automático no puede hacer esta inferencia. De hecho, yo lo he realizado por intuición, presumiendo que todos los "Item" son indexadores y no funciones, pero esto no puede saberse con seguridad sin examinar el objeto al que se refieren. Por lo tanto, no se puede hacer "con seguridad" la operación de traducir el código VB a C#. Para que la traducción fuera completamente fiable, sería necesario tener acceso a todos los objetos a los que llama ese código.

    public class Form1
    {
        OleDb.OleDbConnection cn = new OleDb.OleDbConnection;
        OleDb.OleDbCommand cm = new OleDb.OleDbCommand;
        OleDb.OleDbDataAdapter da = new OleDb.OleDbDataAdapter;
        DataTable dt = new DataTable;
    
        private void llenarListView()
        {
            cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Users\\JuanGuadalupe\\Desktop\\excel prueba.xlsx; Extended Properties=Excel 12.0";
            var sql = "select * from [Hoja1$]";
            da = new OleDb.OleDbDataAdapter(sql, cn);
            da.Fill(dt);
            for (i = 0; i <= dt.Rows.Count - 1; i++)
            {
                ListView1.Items.Add(dt.Rows[i].Item[0]);
                ListView1.Items[i].SubItems.Add(dt.Rows(i).Item[1]);
                ListView1.Items[i].SubItems.Add(dt.Rows(i).Item[2]);
            }
        }
    
        private void Form1_Load(object sender, EventArgs e)
        {
            llenarListView();
        }
    
        private void Button1_Click(object sender, EventArgs e)
        {
            cn.Open();
            cm.Connection = cn;
            cm.CommandText = "Insert into [Hoja1$]values (' " + TextBox1.Text + "','" + TextBox2.Text + "','" + ComboBox1.Text + "')";
            cm.ExecuteNonQuery();
            int indice = ListView1.Items.Count;
            ListView1.Items.Add(TextBox1.Text);
            ListView1.Items[indice].SubItems.Add(TextBox2.Text);
            ListView1.Items[indice].SubItems.Add(ComboBox1.Text);
            cn.Close();
        }
    }


    domingo, 14 de enero de 2018 21:41

Todas las respuestas

  • Aquí te paso el código traducido.

    Lo primero que hice fue pasarlo por un traductor automático, y después lo corregí a mano. La única corrección que tuve que hacerle fue la de cambiar los indexadores, que en VB usan paréntesis redondos () por los paréntesis cuadrados [] que se usan en C#. Por desgracia, esta conversión es ambigua, y sin conocer el objeto en cuestión no se puede saber si la llamada es a un método o a un indexador, por lo que el traductor automático no puede hacer esta inferencia. De hecho, yo lo he realizado por intuición, presumiendo que todos los "Item" son indexadores y no funciones, pero esto no puede saberse con seguridad sin examinar el objeto al que se refieren. Por lo tanto, no se puede hacer "con seguridad" la operación de traducir el código VB a C#. Para que la traducción fuera completamente fiable, sería necesario tener acceso a todos los objetos a los que llama ese código.

    public class Form1
    {
        OleDb.OleDbConnection cn = new OleDb.OleDbConnection;
        OleDb.OleDbCommand cm = new OleDb.OleDbCommand;
        OleDb.OleDbDataAdapter da = new OleDb.OleDbDataAdapter;
        DataTable dt = new DataTable;
    
        private void llenarListView()
        {
            cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Users\\JuanGuadalupe\\Desktop\\excel prueba.xlsx; Extended Properties=Excel 12.0";
            var sql = "select * from [Hoja1$]";
            da = new OleDb.OleDbDataAdapter(sql, cn);
            da.Fill(dt);
            for (i = 0; i <= dt.Rows.Count - 1; i++)
            {
                ListView1.Items.Add(dt.Rows[i].Item[0]);
                ListView1.Items[i].SubItems.Add(dt.Rows(i).Item[1]);
                ListView1.Items[i].SubItems.Add(dt.Rows(i).Item[2]);
            }
        }
    
        private void Form1_Load(object sender, EventArgs e)
        {
            llenarListView();
        }
    
        private void Button1_Click(object sender, EventArgs e)
        {
            cn.Open();
            cm.Connection = cn;
            cm.CommandText = "Insert into [Hoja1$]values (' " + TextBox1.Text + "','" + TextBox2.Text + "','" + ComboBox1.Text + "')";
            cm.ExecuteNonQuery();
            int indice = ListView1.Items.Count;
            ListView1.Items.Add(TextBox1.Text);
            ListView1.Items[indice].SubItems.Add(TextBox2.Text);
            ListView1.Items[indice].SubItems.Add(ComboBox1.Text);
            cn.Close();
        }
    }


    domingo, 14 de enero de 2018 21:41
  • Hola

    el código convertido se vería así:

    public class Form1
    {
        OleDb.OleDbConnection cn = new OleDb.OleDbConnection;
        OleDb.OleDbCommand cm = new OleDb.OleDbCommand;
        OleDb.OleDbDataAdapter da = new OleDb.OleDbDataAdapter;
        DataTable dt = new DataTable;
        private void llenarListView()
        {
            cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Users\\JuanGuadalupe\\Desktop\\excel prueba.xlsx; Extended Properties=Excel 12.0";
            var sql = "select * from [Hoja1$]";
            da = new OleDb.OleDbDataAdapter(sql, cn);
            da.Fill(dt);
            for (i = 0; i <= dt.Rows.Count - 1; i++)
            {
                ListView1.Items.Add(dt.Rows(i).Item(0));
                ListView1.Items(i).SubItems.Add(dt.Rows(i).Item(1));
                ListView1.Items(i).SubItems.Add(dt.Rows(i).Item(2));
            }
        }
    
        private void Form1_Load(object sender, EventArgs e)
        {
            llenarListView();
        }
    
        private void Button1_Click(object sender, EventArgs e)
        {
            cn.Open();
            cm.Connection = cn;
            cm.CommandText = "Insert into [Hoja1$]values (' " + TextBox1.Text + "','" + TextBox2.Text + "','" + ComboBox1.Text + "')";
            cm.ExecuteNonQuery();
            int indice = ListView1.Items.Count;
            ListView1.Items.Add(TextBox1.Text);
            ListView1.Items(indice).SubItems.Add(TextBox2.Text);
            ListView1.Items(indice).SubItems.Add(ComboBox1.Text);
            cn.Close();
        }
    }

    Te sugiero utilizar la siguiente página en donde puedes ayudarte a convertir cualquier otro código que necesites: Convert Code

    Saludos


    Brayan De la Cruz
    Lima - Perú

    domingo, 14 de enero de 2018 21:42
  • Que tal amigo que tal todavia tengo un problema en la parte del for aqui te dejo el codigo completo ya pasado en c# como tu dijiste es en el la "i" me marca que no existe in the current context
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using System.Data.OleDb;
    namespace base_de_datos_c_sharp
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
        OleDbConnection cn = new OleDbConnection();
        OleDbCommand cm = new OleDbCommand();
        OleDbDataAdapter da = new OleDbDataAdapter();
        DataTable dt = new DataTable();
     
        private void llenarListView() {
            cn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\JuanGuadalupe\Desktop\excel prueba.xlsx; Extended Properties=Excel 12.0";
    
            var sql = "select * from [Hoja1$]";
            da = new OleDbDataAdapter(sql, cn);
     
           da.Fill(dt);
     
            for(i = 0; i < dt.Rows.Count- i++)
            {
     
               listView1.Items.Add(dt.Rows(i)(0));
               listView1.Items[i].SubItems.Add(dt.Rows[i][1]);
               listView1.Items[i].SubItems.Add(dt.Rows[i][2]);
     
            }
     
        }  
     
     
        private void Form1_Load(object sender, EventArgs e) {
            
     
        }  
     
        private void Button1_Click(object sender, EventArgs e) {
     
            cn.Open();
     
            cm.Connection = cn;
     
            cm.CommandText = "Insert into [Hoja1$]values (' " + textBox1.Text + "','" + textBox2.Text + "','" + comboBox1.Text + "')";
            cm.ExecuteNonQuery();
     
            int indice = listView1.Items.Count;
            listView1.Items.Add(textBox1.Text);
            listView1.Items[indice].SubItems.Add(textBox2.Text);
            listView1.Items[indice].SubItems.Add(comboBox1.Text);
     
     
            cn.Close();
     
        }
    
        private void Form1_Load_1(object sender, EventArgs e)
        {
            llenarListView();
        }  
    }
        }

    lunes, 15 de enero de 2018 0:10
  • Hola,

    "...es en el la "i" me marca que no existe in the current context.."

    declarale el tipo de variable antes

    for(int i = 0; i < dt.Rows.Count- i++)
            {
             .....
            }


    Votar es agradecer.
    Saludos.
    Lima-Perú

    lunes, 15 de enero de 2018 0:20
  •  en el la "i" me marca que no existe in the current context

    Bueno, es completamente cierto: la "i" no está declarada por ninguna parte... pero tampoco estaba en el original en VB. El código en VB arrojaría el mismo error que estás viendo en C#, salvo que estuviera configurado con "Option Explicit OFF", cosa que sería un auténtico disparate y nunca debe hacerse.

    Obviamente, el remedio para que no dé un error por no estar declarada la i es declararla (tanto en VB como en C#), pero eso es un error que ya existía en el código original, no es un fallo en la conversión a C#. La forma de declarar la variable ya te la han indicado en otra respuesta, basta con poner "int" dentro del paréntesis al principio del "for".

    lunes, 15 de enero de 2018 7:39