La batallita del agüelo:
Esto que te voy a explicar ahora ya está explicado en otras dos páginas de mi
sitio...
La pregunta que te harás (y si no te la haces, pues como si te la hicieras) ¿por
qué lo vuelvo a explicar?
La respuesta es porque... sí, jejeje, en serio, es porque el otro día, me
preguntaron sobre algo como esto y la verdad es que, aunque sabía que lo tenía
explicado, ni me acordaba dónde estaba el código... así que... aquí lo tienes de
nuevo.
Y para aquella gente que quiera saber dónde estaba explicado,
aquí tiene los links a esos otros "artículos":
- El primero, de fecha Abril de 2003:
Ejemplo de acceso a datos a una
base de SQL Server
- Los otros dos, en realidad son como si fueran uno, lo
que pasa es que el código de Visual Basic está separado del
de C#, así que... por si prefieres un lenguaje en vez de
otro, te pongo los dos links, que ambos dos son del 5 de
Febrero de 2006, usease, de hace más de tres años... si es
que cada vez el tiempo pasa más rápido... en fin...
Comprobar si una tabla está definida en una base de datos de SQL Server
Hace casi un año, cuando publiqué el código para
Comprobar si un procedimiento almacenado está definido en una
base de datos de SQL Server y comenté que iba a publicar
esto que publico ahora... y no es que no lo publicara para darle
más emoción, sino... porque seguramente se me olvidó...
como se me olvidan otras muchas cosas... en fin...
La cuestión es que aquí te dejo el código para Visual Basic
2005 (o superior) y también el código de Visual C# 2005 (o
superior). Este código es una función que recibe dos parámetros,
el primero es el nombre de la base de datos y el Como te imaginarás, para poder acceder a una base de datos de SQL server,
también necesitamos saber qué servidor de SQL Server es al que queremos
acceder... ese servidor, en este ejemplo, es la instancia SQLEXPRESS del
equipo local, por tanto, si quieres comprobar si existe una tabla en una
base de datos de otro servidor, tendrás que cambiar el valor que se asigna a
la propiedad DataSource del objeto
SqlConnectionStringBuilder que se usa internamente para construir
la cadena de conexión. También podrías añadir un parámetro que recibiera un
objeto SqlConnection con la conexión que prefieras... pero
eso es cosa de que lo hagas tú... y si no sabes cómo hacerlo, pues...
aprovecha y pregunta en mis foros, que seguro que alguien te responde.
Nota:
El que este código sea para las versiones de Visual Basic y/o Visual C# 2005
o superior es porque se utiliza el objeto SqlConnectionStringBuilder y
porque en el código de Visual Basic se utiliza la instrucción Using, si lo
modificas, te servirá para versiones anteriores.
El código para Visual Basic
2005 o superior de la función que comprueba si una tabla existe
en una base de datos:
Private Function existeTabla(ByVal nombreBase As String, _
ByVal nombreTabla As String) As Boolean
Dim csb As New SqlConnectionStringBuilder()
With csb
.DataSource = "(local)\SQLEXPRESS"
.InitialCatalog = nombreBase
.IntegratedSecurity = True
End With
Dim sCmd As String = _
"SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES " & _
"WHERE TABLE_TYPE = 'BASE TABLE' " & _
"AND TABLE_NAME = @nombreTabla"
Try
Using con As New SqlConnection(csb.ConnectionString)
con.Open()
Dim cmd As New SqlCommand(sCmd, con)
cmd.Parameters.AddWithValue("@nombreTabla", nombreTabla)
' Comprobamos si está
' Devuelve 1 si ya existe
' o 0 si no existe
Dim n As Integer = CInt(cmd.ExecuteScalar())
con.Close()
Return n > 0
End Using
Catch
Return False
End Try
End Function
El código para Visual C#
2005 o superior de la función que comprueba si una tabla existe
en una base de datos:
private bool existeTabla(string nombreBase, string nombreTabla)
{
SqlConnectionStringBuilder csb =
new SqlConnectionStringBuilder();
csb.DataSource = "(local)\\SQLEXPRESS";
csb.InitialCatalog = nombreBase;
csb.IntegratedSecurity = true;
string sCmd =
"SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES " +
"WHERE TABLE_TYPE = 'BASE TABLE' " +
"AND TABLE_NAME = @nombreTabla";
try
{
using(SqlConnection con =
new SqlConnection(csb.ConnectionString))
{
con.Open();
SqlCommand cmd =
new SqlCommand(sCmd, con);
cmd.Parameters.AddWithValue("@nombreTabla",
nombreTabla);
// Comprobamos si está
// Devuelve 1 si ya existe
// o 0 si no existe
int n = (int)cmd.ExecuteScalar();
con.Close();
return n > 0;
}
}
catch
{
return false;
}
}
Espero que te sea de utilidad.
Nos vemos.
Guillermo
Espacios de nombres usados en el código de este artículo:
System.Data.SqlClient