Para filtrar datos de una tabla por la hora unicamente, sin tener en cuanta la fecha, entonces podemos utilizar la siguiente sentencia:
SELECT VISCAIHOR
FROM FAVISCAI
WHERE TO_CHAR(VISCAIHOR,'HH24:MI:SS') = TO_CHAR(?,'HH24:MI:SS')
SELECT VISCAIHOR
FROM FAVISCAI
WHERE TO_CHAR(VISCAIHOR,'HH24:MI:SS') = '17:53:04'
En la primera, el signo de interrogación se cambiaria por un DateTime que llegue como parámetro.
En la segunda, la hora se pasaria como un String, pero se corre el peligro que no se castee bien, por lo cual es mejor utilizar la primera opción.
Sitio donde se podra encontrar información importante y de ayuda en temas de informática y tecnología, con énfasis en programación en .NET
jueves, 29 de mayo de 2014
viernes, 21 de marzo de 2014
Setear error en las filas de un grid Devexpress
Para validar la información de un registro y si no pasa dicha validación setear el icono del error en la fila y columna del registro, hacemos algo como lo estamos haciendo en el siguiente ejemplo:
* La clase que estamos utilizando como fuente de datos, la heredamos de IDXDataErrorInfo
public class Person : object, IDXDataErrorInfo {
public Person(string firstName, string lastName, string address, string phoneNumber, string email) {
this.FirstName = firstName;
this.LastName = lastName;
this.Address = address;
this.PhoneNumber = phoneNumber;
this.Email = email;
}
public string FirstName { get; set; }
public string LastName { get; set; }
public string Address { get; set; }
public string PhoneNumber { get; set; }
public string Email { get; set; }
#region IDXDataErrorInfo Members
void IDXDataErrorInfo.GetPropertyError(string propertyName, ErrorInfo info) {
switch(propertyName) {
case "FirstName":
case "LastName":
if(IsStringEmpty(propertyName == "FirstName" ? FirstName : LastName)) {
SetErrorInfo(info, propertyName + " field can't be empty", ErrorType.Critical);
}
break;
case "Address":
if(IsStringEmpty(Address)) {
SetErrorInfo(info, "Address hasn't been entered", ErrorType.Information);
}
break;
case "Email":
if(IsStringEmpty(Email)) {
SetErrorInfo(info, "Email hasn't been entered", ErrorType.Information);
} else if(Email != "none" && !IsEmailCorrect(Email)) {
SetErrorInfo(info, "Wrong email address", ErrorType.Warning);
}
break;
}
}
void IDXDataErrorInfo.GetError(ErrorInfo info) {
if(IsStringEmpty(PhoneNumber) && (Email == "none" || !IsEmailCorrect(Email)))
SetErrorInfo(info, "Either Phone Number or Email should be specified", ErrorType.Information);
}
#endregion
bool IsStringEmpty(string str) {
return str == null || str.Trim().Length == 0;
}
bool IsEmailCorrect(string email) {
return email == null || (email.IndexOf("@") >= 1 && email.Length > email.IndexOf("@") + 1);
}
void SetErrorInfo(ErrorInfo info, string errorText, ErrorType errorType) {
info.ErrorText = errorText;
info.ErrorType = errorType;
}
* La clase que estamos utilizando como fuente de datos, la heredamos de IDXDataErrorInfo
public class Person : object, IDXDataErrorInfo {
public Person(string firstName, string lastName, string address, string phoneNumber, string email) {
this.FirstName = firstName;
this.LastName = lastName;
this.Address = address;
this.PhoneNumber = phoneNumber;
this.Email = email;
}
public string FirstName { get; set; }
public string LastName { get; set; }
public string Address { get; set; }
public string PhoneNumber { get; set; }
public string Email { get; set; }
#region IDXDataErrorInfo Members
void IDXDataErrorInfo.GetPropertyError(string propertyName, ErrorInfo info) {
switch(propertyName) {
case "FirstName":
case "LastName":
if(IsStringEmpty(propertyName == "FirstName" ? FirstName : LastName)) {
SetErrorInfo(info, propertyName + " field can't be empty", ErrorType.Critical);
}
break;
case "Address":
if(IsStringEmpty(Address)) {
SetErrorInfo(info, "Address hasn't been entered", ErrorType.Information);
}
break;
case "Email":
if(IsStringEmpty(Email)) {
SetErrorInfo(info, "Email hasn't been entered", ErrorType.Information);
} else if(Email != "none" && !IsEmailCorrect(Email)) {
SetErrorInfo(info, "Wrong email address", ErrorType.Warning);
}
break;
}
}
void IDXDataErrorInfo.GetError(ErrorInfo info) {
if(IsStringEmpty(PhoneNumber) && (Email == "none" || !IsEmailCorrect(Email)))
SetErrorInfo(info, "Either Phone Number or Email should be specified", ErrorType.Information);
}
#endregion
bool IsStringEmpty(string str) {
return str == null || str.Trim().Length == 0;
}
bool IsEmailCorrect(string email) {
return email == null || (email.IndexOf("@") >= 1 && email.Length > email.IndexOf("@") + 1);
}
void SetErrorInfo(ErrorInfo info, string errorText, ErrorType errorType) {
info.ErrorText = errorText;
info.ErrorType = errorType;
}
jueves, 27 de febrero de 2014
StopWatch en C#
Una instancia de Stopwatch puede medir el tiempo transcurrido para un intervalo o el total de tiempo transcurrido entre varios intervalos. En un escenario de Stopwatch habitual, se llama al método Start, en otro momento se llama al método Stop y, por último, se comprueba el tiempo transcurrido mediante la propiedad Elapsed.
Una instancia de Stopwatch se está ejecutando o está detenida; utilice IsRunning para determinar el estado actual de Stopwatch. Utilice Start para empezar a medir el tiempo transcurrido; utilice Stop para detener la medida del tiempo transcurrido. Consulte el valor de tiempo transcurrido a través de las propiedades Elapsed, ElapsedMilliseconds o ElapsedTicks. Puede consultar las propiedades de tiempo transcurrido mientras la instancia se está ejecutando o mientras está detenida. Las propiedades de tiempo transcurrido aumentan continuamente mientras se ejecuta Stopwatch; permanecen constantes cuando la instancia está detenida.
De manera predeterminada, el valor de tiempo transcurrido de una instancia de Stopwatch es igual al total de todos los intervalos de tiempo medidos. Cada llamada a Start inicia la cuenta del tiempo transcurrido acumulado; cada llamada a Stop finaliza la medición del intervalo actual y bloquea el valor de tiempo transcurrido acumulado. Utilice el método Reset para borrar el tiempo transcurrido acumulado en una instancia de Stopwatch existente.
Stopwatch mide el tiempo transcurrido contando pasos del temporizador en el mecanismo de temporización subyacente. Si el hardware instalado y el sistema operativo admiten un contador de rendimiento de alta resolución, la clase Stopwatch utiliza ese contador para medir el tiempo transcurrido. De lo contrario, la clase Stopwatch utiliza el temporizador del sistema para medir el tiempo transcurrido. Utilice los campos Frequency y IsHighResolution para determinar la precisión y la resolución de la implementación de control de tiempo de Stopwatch.
La clase Stopwatch ayuda en la manipulación de contadores de rendimiento relacionados con el control de tiempo dentro del código administrado. Específicamente, el campo Frequency y el método GetTimestamp pueden utilizarse en lugar de QueryPerformanceFrequency y QueryPerformanceCounter de las API Win32 no administradas. Ejemplo sencillo:
Stopwatch sw = new Stopwatch(); sw.Start(); sw.Stop();
Fuente
miércoles, 26 de febrero de 2014
Manejo de Secuencias
- Consultamos la secuencia de una tabla de oracle
long? sequenceOracle = db.GetAutonumeric("sq_nombreTabla_sec", transaction);
- Cuando el campo ID es autonumérico, y en uno de los ejemplos, se utiliza la variable @@Identity de SQL Server para saber cuál ese el valor de ese campo al añadir un nuevo dato.
long sequence = long.Parse(db.ExecuteScalar("SELECT @@Identity").ToStringValue());
lunes, 17 de febrero de 2014
Redimensionar Disco Duro VirtualBox
Para redimensionar el tamaño del disco duro de una máquina virtual en VirtualBox, se ejecuta el siguiente comando desde la carpeta del VirtualBox.
C:\Program Files\Oracle\VirtualBox>vboxmanage modifyhd "E:\VMServerEstudio\WIN SERVER\WIN SERVER.vdi" --resize 25000
Suponiendo que la ruta del disco duro de la máquina virtual, existe en esa ruta. El parámetro "--resize 25000" quiere decir que vamos a redimensionar a 25 GB o 25000 MB.
C:\Program Files\Oracle\VirtualBox>vboxmanage modifyhd "E:\VMServerEstudio\WIN SERVER\WIN SERVER.vdi" --resize 25000
Suponiendo que la ruta del disco duro de la máquina virtual, existe en esa ruta. El parámetro "--resize 25000" quiere decir que vamos a redimensionar a 25 GB o 25000 MB.
Suscribirse a:
Entradas (Atom)