lunes, 14 de noviembre de 2011

ACTUALIZAR EL @@SERVERNAME DE UNA INSTANCIA SQL SERVER

Bien pues aquí un aporte más que seguro les podrá evitar mas de un dolor de cabeza.

En ocasiones contamos con un equipo sea, Pc o Servidor completamente instalado y este cuenta con una instancia de Sql Server, sin embargo por alguna causa [ej. estandarización de nombres de red, en la empresa… como es mi caso Confundido] es posible que deba ser cambiado el nombre del equipo, tras lo cual seguramente tendremos problemas para conectarnos a nuestra servidor de Sql Server ya que para el motor de Bd el nombre registrado simplemente ya no se encuentra.

Bien pues aquí una forma de repararlo.

1. Hacer una consulta a la vista de sistema: sys.servers:

SELECT * FROM sys.servers  
     

server_id name    product    provider  data_source
0 JCAB\DENALIXPS    SQL Server    SQLNCLI JCAB\DENALIXPS

como vemos el nombre registrado originalmente fue: JCAB

2. Eliminaremos el servidor registrado

EXEC sp_dropserver ‘JCAB\DENALIXPS’

3. Ahora registramos el nuevo nombre de servidor:

EXEC sp_addserver 'ABP-LAP-002\DENALIXPS','LOCAL'

Es importante notar el parametro ‘LOCAL’ pues indica si se trata de una instancia local.

4. Una vez registrado, es necesario ajustar sus opciones de Servidor para que sea accesible, lo cual conseguimos mediante:

EXEC sp_serveroption 'ABP-LAP-002\DENALIXPS','data access','true'

5. A modo de comprobación podemos consultar nuevamente sys.servers y adicionalmente  @@servername

Pues espero que les sea útil, hasta aquí por el día de hoy.

Best regards And Happy coding.

KARLOZARBA

viernes, 28 de octubre de 2011

Obtener la Collation [Intercalación] del Servidor o de una Base de Datos en Sql Server

 

Hola después de mucho tiempo estoy aquí con una nueva aportación esperando como siempre que les sea de utilidad.

 

En muchas ocasiones por cuestiones de Regionalización o codificación de los caracteres manejados por nuestras aplicaciones, requerimos determinar la intercalación ya sea del Servidor o de las Bases de Datos, bien pues aquí una forma muy sencilla de hacerlo.

 

SELECT CONVERT(sysname, SERVERPROPERTY('collation'));
GO

SELECT DATABASEPROPERTYEX('NombreBaseDatos,'collation');
GO

Bien pues por el momento es todo.

 

Best regards And Happy coding.

KarlozArba

lunes, 20 de junio de 2011

Recorrer un Dictionary con C#

 

Que tal, el  día de hoy escribiré muy brevemente como realizar el recorrido de un Dictionary en C#, quizá sea algo muy básico pero hoy al tratar de hacerlo hubo un momento en el que no supe como hacerlo pues no es una lista solo de items sino de pares.

En fin espero que aun cuando se trata de algo sencillo le pueda servir a alguien.

 

Dictionary<string,string> ConceptosCertificado)                       
StringBuilder CertBuilder = new StringBuilder();      
// Recorre los pares           
foreach (KeyValuePair<string,string> Par in ConceptosCertificado)
{
CertBuilder.AppendLine(string.Format("{0}:{1}",Par.Key,Par.Value));
}

// Recorre solo los valores
foreach (string Valor in ConceptosCertificado.Values) 
{ 
CertBuilder.AppendLine(Par.Value); 
} 

Saludos


 


Happy coding!!!

jueves, 3 de marzo de 2011

Validación de campos XML vacíos en SqlServer 2008

 

Saludos a todos, el día de hoy después de mucho agregare una entrada al blog, por más que me prometo a mi mismo que escribiré, bueno pues termino sin hacerlo.

En fin, entrando en materia muchas veces necesitamos validar que un campo de tipo XML en SqlServer 2008 contenga o no un valor, y en muchas más ocasiones XPATH no nos funciona o no queremos ocuparlo, bueno pues para estos casos la solución encontrada es la siguiente:


select top(500) xml_arch, * from crm.sis_arch with(nolock) where cast(xml_arch as varchar(max))=''

select top(500) xml_arch, * from crm.sis_arch with(nolock) where cast(xml_arch as varchar(max))<>''

Como verán es una solución muy sencilla pero funcional, además nos permite lógicamente realizar cualquier tipo de comparación o búsqueda en la cadena del XML, se que esta no es la forma natural de hacerlo en este tipo de campos pero seguro que se toparan con casos donde lo apliquen, como en el mío.

Como siempre espero que les sea de utilidad…

Best regards And Happy coding.

karlozarba

lunes, 18 de octubre de 2010

Acceder a Métodos, Controles o propiedades de un formulario hijo a uno padre. [Windows Forms] C# VB.Net

El día de hoy comentare sobre un caso muy usual al trabajar con aplicaciones WindowsForms, por lo menos para mi en .Net 2003, 2005 y 2008.

En el caso que revisare mediante un ejemplo muy sencillo tenemos:

a) Un formulario principal, que alberga un GridControl, y un método de agregado de filas al DataTable que alimenta ese GrigControl.

b) Un formulario secundario que se crea como un objeto desde el formulario principal, y desde el cuál se invocara el método de agregado de filas del GridControl del formulario principal.

1. Como dije, tenemos un DataTable a nivel de clase:

Private dt As New DataTable()

2. Y en el Evento Load del Formulario principal, armamos la estructura de la tabla y agregamos unos registros de prueba :

Try
           dt.Columns.Add(New DataColumn("a"))
           dt.Columns.Add(New DataColumn("b"))
           dt.Columns.Add(New DataColumn("c"))

           dt.Rows.Add("1", "2", "3")
           dt.Rows.Add("4", "5", "6")
           dt.Rows.Add("7", "8", "9")
           dt.Rows.Add("10", "11", "12")

           gc1.DataSource = dt

       Catch ex As Exception
           MsgBox(ex.Message)
       End Try

3. Como dije anteriormente, tenemos un método para agregar nuevos registros al DataTable:

Public Sub addRow(ByVal val1 As String, ByVal val2 As String, ByVal val3 As String)
        Try
            dt.Rows.Add(val1, val2, val3)

        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub

4. Ahora bien, si este método es llamado desde el formulario principal pues todo va bien, pero si instanciamos un nuevo formulario:

Dim f As New Form4
        f.Owner = Me
        f.Show()

lo más seguro es que estando en el formulario secundario, estemos tentados a invocar al método, de la siguiente manera:

Form2.addRow(TextBox3.Text, TextBox4.Text, TextBox5.Text)

con lo cual, en tiempo de compilación no tendremos ningún problema, sin embargo cuando realicemos el compilado de la aplicación, al ejecutar la aplicación, el método no funciona correctamente. ¿Porqué?

Bueno, pues porque no podemos acceder a los formulario y sus propiedades hacia arriba de forma directa, por lo que es necesario realizar un <casting> obteniendo el nombre del formulario principal, de la propiedad “owner”:

CType(Me.Owner, Form2).addRow(TextBox3.Text, TextBox4.Text, TextBox5.Text)

con lo cual el problema queda resuelto.

Como siempre espero que en algún momento les sea de utilidad

Best regards And Happy coding.

KarlozArba

miércoles, 13 de octubre de 2010

Formateo de campos Fecha–Hora para Sql Server desde .Net

Este post pretendo que sea breve ya que solo es para comentar que en ocasiones nos encontramos el problema de insertar o actualizar datos Datetime desde aplicaciones hechas con Vb.Net o C# y estos marcan error si no son recibidos como parámetros Sql debido a que llevan el formato 01-10-2010 02:30 p.m. por lo que SQL Server no puede interpretar las cadenas (a.m. | p.m.).

Esta situación la podemos solvertar de la siguiente forma:

VarriableDateTime.ToString("yyyyMMdd hh:mm:ss")

en un Ejemplo sencillo:

string sql = "UPDATE zabp_tareas_ogerp ";
sql += string.Format(" SET TIEMPO_INICIO = '{0}', TIEMPO_FIN = '{1}',HORA_LIBERACION = {2}",P_Hora_Inicio.ToString("yyyyMMdd hh:mm:ss"), P_Hora_Fin.ToString("yyyyMMdd hh:mm:ss"), P_Duracion);
sql += string.Format(" WHERE FOLIO={0}",P_Folio);

Donde podemos observar como se formatea de la forma: 20101001 14:30:00 con lo que eliminamos el problema.

Como siempre espero que les sea de utilizada.

Best regards And Happy coding.

KarlozArba

viernes, 8 de octubre de 2010

Crear tabla en sql server desde una instruccion select

 

En esta ocasión quiero compartirles algo que suele ser muy necesario cuando queremos respaldar los datos de una tabla especifica, sin tener que hacer backup de la BD completa, o cuando necesitamos guardar solo ciertos datos pero no conocemos a priori la estructura que tendrán esos datos e incluso quizá este proceso deba hacerse de forma dinámica por lo que ni siquiera sabemos en que momento se generara.

Bueno la forma es muy sencilla y es la siguiente:

SELECT [*|| campo1, campo2, campo3… campo(n)]

INTO NombreTablaNuevaOTemporal

FROM TablaOrigen

La explicación más sencilla aún:

Realizamos un SELECT tal y como lo necesitemos pero después del listado del campos necesarios, usaremos la palabra reservada INTO que permite la creación de una tabla con el nombre que señalemos a continuación de dicha instrucción. Quizá la pregunta sea: ¿´Qué pasa cuando la tabla ya existe y contiene datos?, bueno pues, esa tabla y datos son respetados, agregando únicamente los nuevos registros.

Bien, para finalizar un ejemplo sencillo:

SELECT t.FOLIO, t.ASUNTO

INTO test_table FROM zabp_tareas_ogerp t

WHERE  t.PARA='Desarrollo-Carlos Armenta'

Debido a que todo se hace desde un SELECT, podemos hacerlo tan complejo como sea necesario.

Best regards And Happy coding.

KarlozArba