Buscar este blog

jueves, 4 de junio de 2009

COMO SABER SI EXISTE UNA TABLA EN SQL SERVER 2005 DESDE VB.NET

Como les habia comentado, no me gusta pasar mucho tiempo buscando como hacer algo que deberia ser sencillo. Esta vez me tocaba buscar como hacer para saber si existe o no una tabla en SQL Server 2005 desde VB.NET 2008.

Estuve buscando durante aproximadamente 3 horas, viendo como conectarse con la libreria ADO, ejecutar la cadena de SQL con el metodo executeNonQuery, capturar el resultado de este con un listener y un monton de cosas, y al final escogi irme por un camino mas sencillo: SQL Server debia de almacenar los datos de las tablas que existian en algun lugar y yo sabia el nombre exacto de la tabla que queria buscar; sabia el nombre del esquema, del catalogo y el nombre de la tabla, asi que todo lo que tenia que hacer era una consulta a ese lugar donde SQL Server almacena el nombre de las tablas, y pues resulta que la consulta era tan sencilla como esto:

SELECT * FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_CATALOG = 'myCatalog' AND
TABLE_SCHEMA = 'mySchema' AND
TABLE_NAME = 'myTable';


Y listo, al final al pasar esto a codigo para saber si existia o no la tabla, todo quedo de esta forma:

Dim sqlString As String = "SELECT COUNT(1) FROM INFORMATION_SCHEMA.TABLES "
sqlString &= "WHERE TABLE_CATALOG = 'myCatalog' AND "
sqlString &= "TABLE_SCHEMA = 'mySchema' AND "
sqlString &= "TABLE_NAME = 'myTable'"


Dim objCommand As System.Data.SqlClient.SqlCommand = New System.Data.SqlClient.SqlCommand(sqlString, objConnection)
Dim exist As Integer = Integer.Parse(objCommand.ExecuteScalar().ToString())


If (exist = 1) Then
MsgBox("SI EXISTE!!!")
ElseIf (exist = 0) Then
MsgBox("NO EXISTE!!!")
End If


Espero que les sea de utilidad y que esto los pueda ayudar a solucionar sus problemas.

martes, 2 de junio de 2009

EJECUTAR BCP COMO PROCESO DESDE VB.NET 2008

Para ejecutar BCP desde codigo en VB.NET 2008, basta con escribir el siguiente codigo:


Dim objProcess As System.Diagnostics.Process = New System.Diagnostics.Process
objProcess.EnableRaisingEvents = True
objProcess.StartInfo = New System.Diagnostics.ProcessStartInfo()
objProcess.StartInfo.UseShellExecute = False
objProcess.StartInfo.RedirectStandardOutput = True
objProcess.StartInfo.RedirectStandardError = True
objProcess.StartInfo.FileName = "bcp"
objProcess.StartInfo.Arguments = "mydatabase.dbo.mytable out c:\mybackup -S mydatabaseserver -c -t"""" -r \n -T -U sa"
objProcess.Start()
objProcess.WaitForExit()
Dim s1 As String = objProcess.StandardOutput.ReadLine()
Dim s2 As String = objProcess.StandardOutput.ReadLine()
If (s2.Substring(0, 5) = "Error") Then
archivoLog.WriteLine("ERROR " & Date.Now.ToString() & " " & s1 & " " & s2)
Return False
Else
archivoLog.WriteLine("OK " & Date.Now.ToString() & " Finalizando proceso de backup de la tabla POSCuentasXCobrarCliente.")
Return True
End If


Espero que este codigo le pueda ser de utilidad a alguien, y que no tenga que esta casi un dia buscando informacion sobre esto :D

lunes, 1 de junio de 2009

IMPORTAR TABLA DE SQL EXPRESS 2005 A ARCHIVO DE TEXTO SEPARADO POR PIPES (|)

Nueva tarea asignada y tristemente fueron casi 13 horas investigando como hacer esta "dificil" :@ tarea, no soy de las personas que les agrada el no conocer una tecnologia y tomarse todo ese tiempo para saber que hacer.

Para realizar esto se necesita del comando bcp que viene como una utilidad por default al instalar el SQL Express 2005. Este proceso se realiza por completo en la consola de Windows, en este caso estoy utilizando Windows XP.

Cabe aclarar que para las versiones de SQL Express y Developer, no se puede ejecutar exitosamente este comando desde una computadora la cual no es la misma donde se encuentre la instancia del servidor donde esta la tabla de la base de datos que queremos exportar.

  1. Para iniciar abrimos la consola de Windows (Inicio -> Ejecutar -> cmd)
  2. En la consola de Windows abierta escribimos el siguiente comando:
bcp nombre_db.dbo.nombre_tabla out c:\nombre_archivo_destino.txt -S nombre_servidor -c -t"" -r \n -T -U user

Explicacion:
Primero se escribe el nombre de comando bcp.
Despues escribimos el nombre de la tabla que se desea exportar, iniciando con el nombre de la instancia de la base de datos donde se encuentra.
El texto out indica que se va a exportar la tabla.
Siguiente, se escribre el nombre del archivo destino, que es donde se guardaran los datos de la tabla.
El tag -S indica que se proveera el nombre del servidor de base de datos
El tag -c indica que se exportaran los datos de la tabla como carateres (esto lo recomiendo personalmente bastante)
El tag -t indica que se proveera del caracter para separar las columnas, en este caso el caracter sera el simbolo de pipe ()
El tag -r indica que se proveera el caracter de fin de linea, en este caso es el de fin de linea (\n)
El tag -T indica que se utilizara una trusted connection a la base de datos.
El tag -U indica que se proveera el nombre de usuario para conectar se a la base de datos.

Y listo hemos exportado la tabla seleccionada, utilizando como separador el caracter pipe ().


    Espero que esto le sea de ayuda a alguien mas, y que no tenga que pasar mas tiempo investigando por la red, el punto es hacer las cosas que alguien mas ya ha hecho lo mas rapido posible, para poder dedicar el tiempo a algo mas importante.