Clave no válida para utilizar en el estado especificado.

lunes, 29 de septiembre de 2008

Por alguna misteriosa razón últimamente cuando abro mis datasets creados hace unos días el vs2005 no es capaz de abrirlos nuevamente y me dice "Clave no válida para utilizar en el estado especificado"








La razón, no se cual; regenerar el proyecto en mi caso no me ha solucionado el problema, así que opte por borrar el fichero DefaultView.SEView, tal como rezaba la solución de un foro:

C:\Documents and Settings\emmerson\Datos de programa\Microsoft\VisualStudio\8.0\ServerExplorer\DefaultView.SEView

El resultado fue que pude volver a editar los datasets visualmente, osea que el problema quedo solucionado, pero aún así esta solución es la de la fuerza bruta!

La respuesta:

Por muy obvio que parezca, en el explorador de servidores de cada conexión que utilizo no guardo los passwords, la solución en algún caso es volver a conectar con la base de datos antes de abrir el dataset en modo visual(doble click sobre el DS :-p ); en todo caso hay que eliminar conexión que habia y volver a crearla con el mismo nombre.... y eureka!!!

- FIN -

Insertar nodos según el orden del XSD

viernes, 26 de septiembre de 2008

Hace poco me tope con un problema insertando nodos en un documento XML (utilizaba el método AppendChild).

Resulta que después de generar el documento lo validaba contra su XSD, y me tope con el problema que generaba los elementos, según el orden de invocaciones al método AppendChild(no de acuerdo a lo que dicta su esquema); por tanto el XML no era válido.

Solución:
Cada nodo tiene información de su esquema y por tanto del elemento en cuestión, solo habría que saber como listar en orden los hijos que lo componen y luego hacer un pequeño algoritmo de inserción.

------------------------------------------
elemento = _doc.CreateElement(elementName);
//se procede a insertar el elemento en la posicion adecuada

//se detecta el orden del nuevo elemento segun su esquema del nodo padre (nodoBase)
XmlSchemaParticle esquemaNodoPadre = ((XmlSchemaComplexType) nodoBase.SchemaInfo.SchemaElement.ElementSchemaType).ContentTypeParticle;
XmlSchemaSequence seqHijos = (XmlSchemaSequence) esquemaNodoPadre;
string[] ordenHijos = new string[seqHijos.Items.Count];
int indice = 0;


foreach(XmlSchemaObject obj in seqHijos.Items){
XmlSchemaElement elem = (XmlSchemaElement) obj;
ordenHijos[indice++] = (elem.Name == null) ? elem.RefName.Name : elem.Name;
}


//se inserta el nuevo nodo en la posicion adecuada
bool insertado = false;
int posicion = 0;
foreach(XmlNode n in nodoBase.ChildNodes){
if(NodoNuevoAnteriorAlActual(ordenHijos, n.Name, elementName)){
nodoBase.InsertBefore(elemento, n);
insertado = true;
break;
}
posicion++;
}


if(!insertado){
nodoBase.AppendChild(elemento);
}
------------------------------------------

Enlaces relacionados:


- FIN -

Entrenamiento SQL Server 2008

martes, 23 de septiembre de 2008

Navegando me he topado con una dirección que tiene un listado con muchos manuales/presentaciones que tratan sobre SQL Server 2008, aquí la dirección:

http://mredison.wordpress.com/2008/09/08/entrenamiento-sql-server-2008/


- FIN -