Visual Basic.NET - Nombre de tabla en SQL

 
Vista:

Nombre de tabla en SQL

Publicado por andrew (6 intervenciones) el 19/07/2008 03:08:06
Hola

Llevo un par de semanas tratando de resolver este problema:

Estoy haciendo pruebas con VB .NET y quiero poder abrir bases de datos de SQL y Access sin importar las tablas que contengan, esto significa que selecciono un archivo de bases de datos y en un combobox me aparecen los nombres de las tablas que contiene dicho archivo, de esta forma solo selecciono la tabla que quiero abrir y luego me aparecen en un listbox los campos de la tabla, para asi poder seleccionar varios y conectarme ya con un query de SQL para mostrar el resultado en un datagrid .... esto lo logre en Access, con GetOleDbSchemaTable.... pero no he podido encontrar la forma de hacerlo con bases de datos de SQL..... alguien me podria guiar?

Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Nombre de tabla en SQL

Publicado por OliBeer (391 intervenciones) el 25/07/2008 01:59:36
Hola,

hay un stored procedure de sistema, no te tienes que preocupar... ya está creado, que es spTables,

spTables 'BasedeDatos'

y te devuelve todas las tablas.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Nombre de tabla en SQL

Publicado por andrew (6 intervenciones) el 25/07/2008 03:05:57
Gracias

Y ese procedure como lo uso? Lo pongo como un query o algo asi?

SELECT spTables FROM 'BasedeDatos'

La verdad no conozco mucho de Bases de datos, lo mas que habia usado era Access y eso a traves de VBA, soy relativamente nuevo en VB.NET...

Lo mas que logre fue con un query que fue con esto:

Dim x As New System.Data.SqlClient.SqlCommand("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES", con)

Pero me regresa TABLE_NAME

Lo raro, creo yo, es que si el query es:

"SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'miTabla'"

si encuentra 'miTabla', o sea, si TABLE_NAME = 'miTabla' entonces por que cuando pido TABLE_NAME me regresa "TABLE_NAME" en vez de 'miTabla'?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Nombre de tabla en SQL

Publicado por OliBeer (391 intervenciones) el 25/07/2008 04:58:43
Hola Andrew!!

No te preocupes, así empezamos todos, la cosa es que cada día seamos mejores y le echemos ganas para lograrlo.

Si tienes sql2000 en herramientas-analizador de consultas
si tienes sql2005 en el boton de Nueva consulta

ahí puedes ejecutar ese stored, de la siguiente manera:

EXEC spTables 'Base de Datos'

Lo puedes poner como un query, o hacer un stored y ahí ejecutarlo

el query que dices:

"TABLE_NAME FROM INFORMATION_SCHEMA.TABLES" a mi me funciona correctamente. Me devuelve los nombres de todas las tablas de la base de datos actual.

spTables es un Stored de sistema, por lo cual no debe llevar Select From, sólo lo debes ejecutar con EXEC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Nombre de tabla en SQL

Publicado por andrew (6 intervenciones) el 25/07/2008 05:22:56
Ok

Pero esto se puede hacer en Visual Basic .NET 2008? Creo que ahi viene el SQL 2005....... Estoy en un proyecto de WindowsApplication, tengo un formulario y una base de datos de prueba en SQL..... no tengo la opcion (o al menos no la encuentro) de "Nueva consulta"..... Ayudaria si te muestro el codigo que tengo para hacerlo en Access?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Nombre de tabla en SQL

Publicado por OliBeer (391 intervenciones) el 25/07/2008 05:35:33
Hola!!

No tengo idea de cómo sea el 2008, no lo he trabajado, pero... estás trabajando con VB con el 2008? 2005? 2003 ó 2002? y qué versión de SQL tienes?

No te molestes en mostrarme lo de Acces, no creo que nos sirva de mucho.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Nombre de tabla en SQL

Publicado por andrew (6 intervenciones) el 25/07/2008 05:44:32
Estoy trabajando con Visual Basic 2008, .NET framework 3.5, y tengo entendido que el SQL que tiene este programa, que esta dentro de Visual Studio 2008, es el SQL 2005.

Te digo, el query ese de SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'miTabla' funciona, pero no como yo quiero que funcione.... tengo una tabla que se llama "miTabla" dentro de un archivo "Tablas.mdf", y cuando ejecuto el query, tengo una condicion que cuenta los registros encontrados en el archivo de base de datos, si son mas de 0, como en este caso, que el resultado es 1, mando un Messagebox con el nombre de la tabla que encontre.... pero el nombre de la tabla me lo manda como "TABLE_NAME" en vez de "miTabla"..... de hecho ya lo habia dejado por la paz porque de plano no he encontrado nada para resolver esa cuestion, pero si es algo que necesito o que voy a necesitar tarde o temprano...

De antemano te agradezco la ayuda
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Nombre de tabla en SQL

Publicado por OliBeer (391 intervenciones) el 25/07/2008 15:40:12
Hola!!

Si quieres mándame tu código de .net para analizarlo...

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Nombre de tabla en SQL

Publicado por andrew (6 intervenciones) el 26/07/2008 02:42:46
Mira, si se cumple la condicion ejecuto lo del access, lo cual funciona bien, pero si no se cumple la condicion, trato lo del SQL..... de tantas formas que he intentado ya ni supe ni como quedo el codigo de SQL.....

Te agradezco la ayuda...

Dim strConectionType As String
Dim NewDatabase As New OpenFileDialog
If rdbOLE.Checked Then
NewDatabase.InitialDirectory = "D:Databases"
NewDatabase.Filter = "MS Access Databases|*.mdb"
NewDatabase.ShowDialog()
txtDatabase.Text = NewDatabase.SafeFileName
If txtDatabase.Text.Trim = "" Then
NewDatabase = Nothing
Exit Sub
End If
strConectionType = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & txtDatabase.Text & ";" & _
"User Id=;Password=;"

Using con As New System.Data.OleDb.OleDbConnection()
con.ConnectionString = strConectionType

con.Open()

Dim schemaTable As DataTable = _
con.GetOleDbSchemaTable(OleDb.OleDbSchemaGuid.Tables, _
New Object() {Nothing, Nothing, Nothing, "TABLE"})

Dim i = schemaTable.Rows.Count - 1
Dim tablesArray(i) As String
For i = 0 To schemaTable.Rows.Count - 1
tablesArray(i) = schemaTable.Rows(i).Item("TABLE_NAME")
cmbTables.Items.Add(tablesArray(i).ToString())
Next

cmbTables.Text = tablesArray(0).ToString()

Dim myCommand As New System.Data.OleDb.OleDbCommand("SELECT * FROM " & cmbTables.Text, con)
Dim myReader As System.Data.OleDb.OleDbDataReader

Try
myReader = myCommand.ExecuteReader(System.Data.CommandBehavior.SchemaOnly)
Catch ex As OleDb.OleDbException
MessageBox.Show(ex.Message)
Exit Sub
End Try

Dim n = myReader.FieldCount

lstFields.Items.Clear()
For i = 0 To n - 1
lstFields.Items.Add(myReader.GetName(i).ToString())
Next
con.Close()
End Using

Else
NewDatabase.InitialDirectory = "D:Databases"
NewDatabase.Filter = "Sql Databases|*.mdf"
strConectionType = "Data Source=.SQLEXPRESS;" & _
"AttachDbFilename=" & txtDatabase.Text & ";" & _
"Integrated Security=True;" & _
"Connect Timeout=30;User Instance=True"

NewDatabase.ShowDialog()
txtDatabase.Text = NewDatabase.SafeFileName
If txtDatabase.Text.Trim = "" Then
NewDatabase = Nothing
Exit Sub
End If

Using con As New System.Data.SqlClient.SqlConnection
con.ConnectionString = strConectionType
Dim schemaDA As New SqlClient.SqlDataAdapter("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES", con)

Dim schemaTable As New DataTable()

schemaDA.Fill(schemaTable)

'cmbTables.DataSource =
'cmbTables.Items.Add("TABLE_NAME")

con.Open()

Dim z = schemaTable.TableName

For Each andy In z
MessageBox.Show(andy)
Next

Dim myCommand As New System.Data.SqlClient.SqlCommand("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES", con)
Dim myReader As System.Data.SqlClient.SqlDataReader
Dim myReader1 As DataTable = con.GetSchema("tables")
Dim n = myReader1.Rows.Count - 1
Dim tablesArray(n) As String
For n = 0 To myReader1.Rows.Count - 1
tablesArray(n) = myReader1.Rows(n).Item("TABLE_NAME")
cmbTables.Items.Add(tablesArray(n).ToString())
Next

Try
myReader = myCommand.ExecuteReader()
Catch ex As OleDb.OleDbException
MessageBox.Show(ex.Message)
Exit Sub
End Try

Dim x = myReader.FieldCount

Dim i As Integer
For i = 0 To x - 1
MessageBox.Show(myReader.GetName(i).ToString)
'.GetName(i).ToString()
Next
con.Close()
Exit Sub
'Dim schemaTable As DataTable = _
'con.GetSchema(SqlClient.SqlClientMetaDataCollectionNames.Tables, _
'New Object() {Nothing, Nothing, Nothing, "TABLE"})

'Dim i = schemaTable.Rows.Count - 1
'Dim tablesArray(i) As String
'For i = 0 To schemaTable.Rows.Count - 1
' tablesArray(i) = schemaTable.Rows(i).Item("TABLE_NAME")
'cmbTables.Items.Add(tablesArray(i).ToString())
'Next

cmbTables.Text = tablesArray(0).ToString()

'Dim myCommand As New System.Data.SqlClient.SqlCommand("SELECT * FROM " & cmbTables.Text, con)
'Dim myReader As System.Data.SqlClient.SqlDataReader

Try
myReader = myCommand.ExecuteReader(System.Data.CommandBehavior.SchemaOnly)
Catch ex As SqlClient.SqlException
MessageBox.Show(ex.Message)
Exit Sub
End Try

'Dim n = myReader.FieldCount

lstFields.Items.Clear()
For i = 0 To n - 1
lstFields.Items.Add(myReader.GetName(i).ToString())
Next
con.Close()
End Using
End If
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar