Filed Under (.Net, LINQ, SQLServer) by admin on 10-10-2011
Estos días he estado bastante liado ya que el proceso que teníamos de carga de XML realizaba una precarga en memoria del archivo (método Load()), la solución que hay es bastante sencilla con un XMLReader, os pongo un fragmento que seguro se entiende:
using (XmlReader reader = XmlReader.Create(directoryTemp + fichero))
{
reader.MoveToContent();
int count = 0; // una variable contador XElement nombretabla = null; // un XElement auxiliar
while (!reader.EOF)
{
switch (reader.NodeType)
{
case XmlNodeType.Element: // se puede filtrar por tipo de XmlNodeType...
if (count == 0)
{
// CUALQUIER CONDICION
count++;
reader.Read();
} else if (count == 1)
{
nombretabla = new XElement((XName)reader.Name); // esto para crear un XELEMENT con el nombre del Reader actual
count++;
reader.Read();
} else
{
if (string.IsNullOrEmpty(nodoReg)) nodoReg = reader.Name; // condicion para omitir anidados..
if (nodoReg == reader.Name)
{
count++;
nombretabla.Add(XElement.ReadFrom(reader) as XElement);
// INSERCION .. cada X lanzo una inserción en BD
if (count % numInserciones == 0)
{
nombrecondicionado.Add(nombretabla);
docaux.Add(nombrecondicionado);
// VALIDACION ...
validado = ValidarEsquema(docaux, esquema);
if (validado)
{
nreg += cond.Insertar(docaux, delete);
delete = false;
// vacio contenidos
nombretabla.Elements().Remove();
nombrecondicionado.Elements().Remove();
docaux.Elements().Remove();
}
else
{
OnReportInformation(string.Format("ERROR fichero{0} no valido.", fichero), ReportLevel.Error);
EstadoCarga = 2;
}
}
}
}
break;
default :
reader.Read();
break;
}
}
// INSERCION DE LOS ULTIMOS QUE NO ENTRAN EN EL ÚLTIMO WHILE
nombrecondicionado.Add(nombretabla);
docaux.Add(nombrecondicionado);
// VALIDACION
validado = ValidarEsquema(docaux, esquema);
if (validado)
{
nreg += cond.Insertar(docaux, delete);
// vacio contenidos
nombretabla.Elements().Remove();
nombrecondicionado.Elements().Remove();
docaux.Elements().Remove();
}
else
{
OnReportInformation(string.Format("ERROR fichero{0} no valido.", fichero), ReportLevel.Error);
EstadoCarga = 2;
}
}
Filed Under (.Net, LINQ, SQLServer) by admin on 27-07-2011
"La cadena debe contener exactamente un carácter"
Este es el mensaje que te aparece si has mapeado un nvarchar(1) y LINQ to SQL tiene que tratarlo cuando tiene el valor de string vacio es decir “”.
Si se hace sobre el DBML:
Botón derecho > Abrir Con > Editor XML
y se busca la tabla, nos damos cuenta que se esta mapeando de esta forma:

El problema reside en que al ser de 1 posición esta tratando el string de uno como si fuera tipo Char, la solución es editar a mano el DBML y ponerlo como tipo String:

Filed Under (Java, SQLServer) by admin on 24-03-2011
- En el directorio /bin de TOMCAT debemos dejar el driver, en mi caso el sqljdbc.jar para SQLServer 2005
- Modificar el archivo conf/context.xml y añadir para SQLServer 2005:
<Resource name="general" auth="Container"
type="javax.sql.DataSource"
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://[SERVER]:1433;databaseName=[NameBBDD];user=[user];password=[password];"
maxActive="20" maxIdle="10"
maxWait="-1"/>
* Nota: En las pruebas que hemos hecho, para el caso de SQL Server 2005, hay que crear un usuario de autenticación SQL Server y no de login de Windows (autologin con la propia sesión), ya que comprobamos que el driver rechaza las conexiones.
Los campos puestos en negrita pueden variar en función de la instalación que se realice del motor de la BBDD:
jdbc:sqlserver://(servidor):(puerto);databaseName=(BBDD);user=(usuario);password=(password);
Filed Under (SQLServer) by admin on 31-01-2011
Bueno muchas veces nos gustaría sacar del SQL Server un monton de INSERTS para tenerlo en un script para ejecutar cuando quieras. Os propongo una opción sencilla y adaptable:
SELECT 'INSERT INTO nombretabla(campo1,campo2)values (' + Convert(varchar, campo1) + ','
+ Convert(varchar, campo2) + ');'
FROM tuTabla
Filed Under (SQLServer) by admin on 26-11-2010
Os dejo la consulta SQL para SQL Server para cambiar el tipo de dato de un campo
ALTER TABLE tabla ALTER COLUMN campo tipodedato
Filed Under (SQLServer) by admin on 22-10-2010
La consulta es la siguiente:
ALTER TABLE tabla
ALTER COLUMN nombrecampo nchar(5) not null
donde 5 es la nueva longitud
Filed Under (SQLServer) by admin on 06-05-2010
Tenemos un campo nvarchar(1) de la base de datos que se introduce con un carácter extraño, modificamos la carga y se introducían bien pero había que cambiar las ya existentes. Para ello se pensó en muchas cosas (codificación, tamaño de la cadena, etc) dando al final con esta solución:
Problema:

Solución:
UPDATE Esquema.Tabla
SET Campo = 'valorquequeremos'
WHERE ASCII(Campo) = 0
Filed Under (SQLServer) by admin on 23-03-2010
La sintaxis es la siguiente:
[Instrucción SQL 1]
UNION
[Instrucción SQL 2]
Supongamos que tenemos las siguientes dos tablas,
Tabla Store_Information
store_name Sales Date
Los Angeles 1500 € 05-Jan-1999
San Diego 250 € 07-Jan-1999
Los Angeles 300 € 08-Jan-1999
Boston 700 € 08-Jan-1999
Tabla Internet_Sales
Date Sales
07-Jan-1999 250 €
10-Jan-1999 535 €
11-Jan-1999 320 €
12-Jan-1999 750 €
y deseamos saber de todas las fechas donde hay una operación de venta. Para hacerlo, utilizamos la siguiente instrucción SQL:
SELECT Date FROM Store_Information
UNION
SELECT Date FROM Internet_Sales
Resultado:
Date
05-Jan-1999
07-Jan-1999
08-Jan-1999
10-Jan-1999
11-Jan-1999
12-Jan-1999
Lo único que hay que tener en cuenta es que los campos que queremos unir sean del mismo tipo en ambas consultas a la vez de que tengan el mismo nombre.
Filed Under (SQLServer) by admin on 22-03-2010
ALTER SCHEMA Comisiones TRANSFER dbo.GestoresComerciales;
GO
Con esta consulta cambiamos la tabla dbo.GestoresComerciales del esquema “dbo” al esquema “Comisiones”
Más información en: http://msdn.microsoft.com/es-es/library/ms173423.aspx
Filed Under (.Net, SQLServer) by admin on 01-12-2009
Las constraints de una tabla de SQL Server se pueden desactivar temporalmente con la opción NOCHECK CONSTRAINT ALL de ALTER TABLE.
El comando quedaría así:
ALTER TABLE tabla NOCHECK CONSTRAINT ALL;
Con esto se desactivan y puedes hacer la carga de datos sin que te molesten las FK
Después, para volver a activarlas sólo tienes que hacer este otro ALTER TABLE:
ALTER TABLE tabla WITH CHECK CHECK CONSTRAINT ALL;
Reactiva las constraints chequeando que los datos de las tablas las cumplan
Si quieres volver a habilitarlas sin validar los datos que hayas cargado, aunque no es muy recomendable también se puede hacer:
ALTER TABLE tabla CHECK CONSTRAINT ALL;