Principales respuestas
Traducir codigo de VB a c#

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
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ú- Marcado como respuesta Pablo RubioModerator miércoles, 17 de enero de 2018 15:41
-
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(); } }
- Editado Alberto PoblacionMVP domingo, 14 de enero de 2018 21:46
- Marcado como respuesta Pablo RubioModerator miércoles, 17 de enero de 2018 15: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(); } }
- Editado Alberto PoblacionMVP domingo, 14 de enero de 2018 21:46
- Marcado como respuesta Pablo RubioModerator miércoles, 17 de enero de 2018 15: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ú- Marcado como respuesta Pablo RubioModerator miércoles, 17 de enero de 2018 15:41
-
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(); } } }
-
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ú- Propuesto como respuesta Pablo RubioModerator lunes, 15 de enero de 2018 15:57
-
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".
- Propuesto como respuesta Pablo RubioModerator lunes, 15 de enero de 2018 15:57