26 mayo 2011

Función SQL que devuelve el numero de coincidencias de un caracter en una cadena

Funcíon SQL que devuelve el numero de coincidencias de un caracter en una cadena

CREATE FUNCTION [dbo].[fnCountChar] ( @pInput VARCHAR(max), @pSearchChar CHAR(1) )

RETURNS INT
BEGIN

DECLARE @vInputLength INT
DECLARE @vIndex INT
DECLARE @vCount INT

SET @vCount = 0
SET @vIndex = 1
SET @vInputLength = DATALENGTH(@pInput)

WHILE @vIndex <= @vInputLength
BEGIN
IF SUBSTRING(@pInput, @vIndex, 1) = @pSearchChar
SET @vCount = @vCount + 1

SET @vIndex = @vIndex + 1
END

RETURN @vCount

END

08 mayo 2011

En C sharp, seleccionar registros en una base de datos Access (versión 97) usando las librerias ODBC


Aqui escribo el ódigo para seleccionar el máximo valor de un campo determinado:

private void IdMasAlto()
{
DatosConexionABaseDeDatos odatosConexion = new DatosConexionABaseDeDatos();
OleDbConnection conexion = odatosConexion.getConexion();
conexion.Open();
DataSet ds = new DataSet();
DataTable dt = new DataTable();

string strSQL = "SELECT MAX(IdTipo) AS ultimo FROM Tipo";
//La consulta únicamente devolverá un registro de una columna: Un valor.
OleDbDataAdapter oAdaptador= new OleDbDataAdapter(strSQL, conexion);
oAdaptador.Fill(ds, "elultimo");
dt = ds.Tables["elultimo"];
DataRow fila =dt.Rows[0];
//ID es una propiedad
ID = Convert.ToInt32(fila["ultimo"].ToString());
conexion.Close();
}

Este códigio, modificandolo, servirá para recorrer varios registros devuelvos. Quedando así: if (dt.Rows.Count == 0)
this.lblUsuario.Text = "No existe el usuario...";
else
{
foreach (System.Data.DataRow fila in dt.Rows)
{
this.lblUsuario.Text = "Bienvenido " + fila["nombre"].ToString();
}

}



Por supuesto, y antes de marchar, recordar que hay que hacer las siguientes importaciones antes de empezar, en las primeras líneas:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.OleDb;



Saludos ;)