Sie sind auf Seite 1von 372

ADO.

NET
ADO.NET es un conjunto de clases que exponen servicios de acceso a datos al programador. NET. ADO.NET proporciona un conjunto completo de componentes para crear distribuidos, aplicaciones de intercambio de datos. Es una parte integral del marco. NET, proporcionando acceso a relacionales, XML y datos de aplicacin. ADO.NET es compatible con una variedad de necesidades de desarrollo, incluida la creacin de clientes de base de datos front-end y de nivel medio los objetos de empresa utilizados por las aplicaciones, herramientas, lenguajes o exploradores de Internet.

En esta seccin

Qu hay de nuevo en ADO.NET Presenta caractersticas que son nuevas en ADO.NET. Informacin general de ADO.NET Proporciona una introduccin al diseo y los componentes de ADO.NET. Proteger aplicaciones de ADO.NET Describe las recomendaciones de codificacin segura para utilizar ADO.NET. Utilizar DataSets en ADO.NET Describe la forma de crear y utilizar conjuntos de datos con tipo, DataSets , DataTables y DataViews . Conectar con datos y recuperarlos en ADO.NET Describe cmo conectarse a un origen de datos y recuperar datos, incluyendo DataReaders y DataAdapters . Modificar datos en ADO.NET Describe cmo modificar los datos de una base de datos y cmo utilizar las transacciones. Utilizando el. NET Framework para SQL Server Describe cmo trabajar con las caractersticas y funciones que son especficas de SQL Server. Utilizando el. NET Framework para Oracle Describe las caractersticas y comportamientos que son especficos para el. NET Framework para Oracle. Usar SQL Server integracin Common Language Runtime Describe cmo los datos se puede acceder desde dentro de un Common Language Runtime (CLR) de base de datos en SQL Server 2005. Escritura de cdigo independiente del proveedor en ADO.NET Describe clases genricas que permiten escribir cdigo independiente del proveedor en ADO.NET. Realizacin de tareas generales en ADO.NET Describe cmo utilizar varias caractersticas generales de ADO.NET. Buscar informacin adicional sobre ADO.NET Proporciona vnculos a informacin adicional en lnea acerca de ADO.NET.

Secciones relacionadas

Generar aplicaciones ASP.NET Proporciona informacin general instructiva y detallada, paso a paso los procedimientos para crear aplicaciones Web ASP.NET en el Marco. NET. Aplicaciones basadas en Windows Proporciona informacin detallada sobre cmo trabajar con formularios Windows Forms y aplicaciones de consola. Tecnologas de desarrollo bsicas Proporciona vnculos a informacin sobre tareas de desarrollo estndar en el Marco. NET. Desarrollo Avanzado de Tecnologas Proporciona vnculos a informacin sobre tareas de desarrollo sofisticadas y tcnicas en el marco. NET. Ejemplos y tutoriales Proporciona una lista completa de todas las muestras y ejemplos de QuickStart asociados con el Marco. NET.

Qu hay de nuevo en ADO.NET


. NET Framework 2.0
Otras versiones 71 de 90 puntuado este til - Valorar este tema Las siguientes caractersticas son nuevas en ADO.NET versin 2.0.

Proveedores administrados
Servidor Enumeracin Proporciona soporte para enumerar instancias activas de Microsoft SQL Server 2000 y versiones posteriores. Para obtener ms informacin, vea Enumerar instancias de SQL Server . Procesamiento asncrono Le permite realizar operaciones asincrnicas de base de datos utilizando una API modelada despus del modelo asincrnico que utiliza el Marco. NET. Para obtener ms informacin, vea Realizar operaciones asincrnicas . Varios conjuntos de resultados activos (MARS) Admite una aplicacin que tiene ms de un SqlDataReader abierto en una conexin cuando cada instancia de SqlDataReader se inicia a partir de un comando separado. Para obtener ms informacin, consulte Uso de varios conjuntos de resultados activos . Operaciones de copia masiva Le permite realizar inserciones masivas utilizando rpido del Proveedor. NET para SQL Server. Para obtener ms informacin, vea Realizar operaciones de copia masiva . Nuevos SQL Server Max Tipos de datos Proporciona soporte para varchar (max) , nvarchar (max) , varbinary (max) los tipos de datos en SQL Server 2005. Para obtener ms informacin, veaTrabajar con tipos de valor grande SQL Server definidos por el usuario Proporciona soporte para los tipos definidos por el usuario de datos (UDT) en SQL Server 2005. Para obtener ms informacin, consulte Creacin y uso de tipos definidos por el usuario . SQL Server Notificaciones Permite a las aplicaciones. NET Framework para enviar un comando a SQL Server y solicitar que se genere una notificacin si la ejecucin del mismo comando producir conjuntos de resultados diferentes de los inicialmente recuperados. Para obtener ms informacin, vea Usar notificaciones de consulta . Las transacciones con aislamiento de instantnea del servidor SQL Proporciona soporte para el aislamiento de instantneas, SQL Server 2005 mecanismo diseado para reducir el bloqueo en aplicaciones OLTP. Para obtener ms informacin, consulte Uso de aislamiento de instantnea . Database Mirroring en SQL Server 2005 Proporciona compatibilidad con la replicacin de bases de datos en SQL Server 2005 con una nueva sintaxis de cadena de conexin para especificar un servidor asociado de conmutacin por error. Para obtener ms informacin, consulte Uso de Database Mirroring . Estadsticas de Proveedores Proporciona soporte para la recuperacin de las estadsticas de tiempo de ejecucin en SQL Server 2005. En la actualidad 21 diferentes contadores estn disponibles en el proveedor. NET para SQL Server. Para obtener ms informacin, vea Utilizar las estadsticas de Proveedores . Cambiar la contrasea de SQL Server 2005 Permite a las aplicaciones. NET Framework para cambiar la contrasea de una cuenta de usuario sin necesidad de intervencin del administrador. Para obtener ms informacin, consulte ChangePassword .

Procesamiento por lotes Mejora el rendimiento de las aplicaciones mediante la reduccin del nmero de viajes de ida y vuelta a la base de datos cuando realice actualizaciones delconjunto de datos . Para obtener ms informacin, vea Realizar operaciones por lotes mediante DataAdapters . Seguimiento ADO.NET 2.0 presenta la nueva funcionalidad integrada de datos de seguimiento que se apoya en los proveedores de datos. NET. Para obtener ms informacin, consulte Gestionado seguimiento en el Marco. NET . Confianza parcial Todos los proveedores de datos de Microsoft son ahora soportados en entornos de confianza parcial. Para obtener ms informacin, vea Seguridad de acceso a cdigo y ADO.NET . Agrupacin de conexiones de control ADO.NET 2.0 presenta dos nuevos mtodos para desactivar la agrupacin de conexiones: ClearAllPools y ClearPool . Para obtener ms informacin, consulteUso de la agrupacin de conexiones con SQL Server . SQL Server Compatibilidad con tipos de datos XML SQL Server 2005 tiene un nuevo tipo de datos XML, y System.Data.SqlClient proporciona soporte robusto para ello en el cliente. Los valores XML se exponen mediante la System.Xml marco para una integracin perfecta con el modelo de programacin. NET. Integracin con System.Transactions y Optimizacin de Operaciones promocionable para SQL Server 2005 . NET 2.0 incluye un nuevo marco de transacciones, accesible a travs de la System.Transactions espacio de nombres. Cuando se combinanSystem.Transactions para la gestin de transacciones distribuidas, System.Data.SqlClient para el acceso de base de datos y SQL Server 2005 como la parte de atrs, es posible optimizar las transacciones distribuidas de modo que el coste adicional de hacerlas "distribuido" slo se incurre cuando las transacciones son realmente necesarios.

Clases desconectados
Mejoras de DataSet El nuevo DataTableReader presenta el contenido de un DataSet o una DataTable en forma de uno o ms de slo lectura, los conjuntos de resultados de slo avance. Para obtener ms informacin, consulte Creacin y uso de un objeto DataTableReader . Mejoras de DataSet Un motor nuevo ndice mejora el rendimiento de insertar, eliminar y modificar las operaciones a DataTable y DataRow objetos. Un ndice o una clave principal debe estar definido en la tabla base. Serializacin binaria para el conjunto de datos Esta nueva opcin permite a un DataSet y un DataTable para ser guardado en formato binario cuando se usa transportes binarios a travs de comunicacin remota. En la mayora de los casos esto dar como resultado grandes mejoras de rendimiento y una reduccin notable en la memoria y uso de CPU al usarDataSet / DataTable objetos en las aplicaciones que utilizan la comunicacin remota para conectarse a diferentes niveles. DataTable como un objeto independiente Muchos mtodos que slo estaban disponibles en el conjunto de datos de las versiones anteriores estn disponibles en la DataTable tambin (comoReadXml y WriteXml ). Adems, un objeto DataTable se puede serializar por s mismo, por lo que ya no es necesario contar con un conjunto de datos con una sola tabla slo para exponer la mesa a travs de servicios web o cualquier otro mecanismo que requiere la serializacin. Crear un DataTable desde DataView Ahora puede crear un DataTable desde una DataView . La nueva DataTable tendr el mismo conjunto de filas que la actual DataView . Opcionalmente, las columnas de la nueva DataTable puede ser un subconjunto de los DataView columnas. Las filas pueden ser o bien todas las filas o slo filas distintas. Para obtener ms informacin, consulte ToTable . Mejoras del motor de inferencia de esquemas

El motor de inferencia de esquema se ha mejorado para inferir los tipos cuando existe suficiente informacin

disponible, sino que tambin es significativamente ms rpido. Calificado como espacio de tablas Un conjunto de datos puede soportar ahora las tablas que tienen el mismo TableName pero con un diferente espacio de nombres , proporcionando un mecanismo para evitar conflictos de nombres. Nuevas capacidades de carga de DataTable La nueva carga de mtodo para tablas de datos y conjuntos de datos puede transmitir un DataReader en un DataTable directamente. La carga mtodo tambin tiene nuevas opciones para el comportamiento de la carga que amplan la funcionalidad disponible a travs de los DataAdapter . Fila de control del Estado Los nuevos SetAdded y SetModified mtodos permiten a las aplicaciones manipular explcitamente el estado de fila de DataSet y DataTable filas. Soporte mejorado para tipos definidos por el La DataTable proporciona ms apoyo a la medida, los tipos definidos por el usuario. Serializacin XML se ha ampliado para dar soporte polimorfismo. Por ejemplo, una columna Persona puede almacenar una instancia Employee que se serializa y de-serializar ay desde XML sin prdida de ningn tipo fidelidad.Adems los usuarios pueden ahora implementar las interfaces nuevo cambio de seguimiento que permitan a la DataTable para seguir los cambios de tales objetos. XML / XSD Mejoras Aadido soporte para lectura y escritura en los tipos simples XSD. Aadido soporte para lectura y escritura de esquemas mltiples en una secuencia. Aadido soporte para lectura y escritura de XSD / XML donde se anida una sola tabla o elemento XML dentro de dos o ms tablas primarias. DataRow Mejoras El nuevo IndexOf se puede utilizar para encontrar la posicin de la fila en DataTable.Rows coleccin. Cambiar la posicin de la columna en DataTable El nuevo SetOrdinal mtodo permite a los usuarios cambiar la posicin de la columna en un DataTable . DataView Mejoras en el rendimiento El DataView de ADO.NET 2.0 utiliza un algoritmo nueva actualizacin que resulta en una mejora significativa en DataView mantenimiento. Expresiones DataColumn Una expresin en un DataColumn puede incluir columnas de la misma DataTable . La expresin puede ser actualizado, y el valor de la columna se mantiene. Esquema de serializacin para DataSet con tipo Con tipo DataSet puede omitir el componente de esquema de ser serializado estableciendo la SchemaSerializationMode enumeracin paraExcludeSchema .

Independiente del proveedor API


. NET Data Provider Enumeracin Proporciona soporte para enumerar proveedores de datos instalados. Para obtener ms informacin, vea Enumerar los proveedores de datos instalados . Proveedor Independiente de Programas Mejoras en el System.Data.Common espacio de nombres proporciona acceso a travs de una API simple para bases de datos a travs de mltiples proveedores. Para obtener ms informacin, consulte Escritura de cdigo independiente del proveedor en ADO.NET . Esquema Descubrimiento Esquema de descubrimiento permite a las aplicaciones para solicitar los proveedores administrados para encontrar y devolver informacin acerca del esquema de base de datos de la base de datos est conectado a una conexin determinada. Diferentes elementos del esquema de base de datos como tablas, columnas y procedimientos almacenados-estn expuestos a travs de los GetSchema mtodos de cada proveedor de conexin de clase. Para obtener ms informacin, consulte Obtencin de informacin de esquema de una base de datos .

Informacin general de ADO.NET


. NET Framework 2.0
Otras versiones 11 de los 27 ha calificado este til - Valorar este tema ADO.NET proporciona acceso coherente a orgenes de datos como Microsoft SQL Server y XML, as como a las fuentes de datos expuestos mediante OLE DB y ODBC. El intercambio de datos aplicaciones de consumo puede utilizar ADO.NET para conectarse a estas fuentes de datos y recuperar, manipular y actualizar los datos que contienen. ADO.NET separa de acceso a datos de manipulacin de datos en componentes discretos que se pueden utilizar por separado o en tndem. ADO.NET incluye. NET Framework para conectarse a una base de datos, ejecutar comandos y recuperar resultados. Esos resultados se procesan directamente, colocado en un ADO.NETDataSet objeto con el fin de ser expuesto al usuario de una manera ad hoc, en combinacin con datos de mltiples fuentes, o controlarse a distancia entre niveles.La ADO.NET DataSet objeto tambin puede ser utilizado independientemente de a. NET Framework proveedor de datos para gestionar los datos locales de la aplicacin o de origen de XML. Las clases de ADO.NET se encuentran en System.Data.dll, y estn integradas con las clases XML en System.Xml.dll. Al compilar cdigo que utiliza el System.Dataespacio de nombres, referencia tanto System.Data.dll y System.Xml.dll. Para un ejemplo de una aplicacin de ADO.NET que se conecta a una base de datos, recupera los datos de la misma, a continuacin, muestra los datos en un smbolo del sistema, consulte Aplicacin de ejemplo ADO.NET . ADO.NET proporciona funcionalidad para los desarrolladores que escriben cdigo administrado similar a la funcionalidad que proporciona el modelo de objeto componente nativo (COM) a los desarrolladores de ActiveX Data Objects (ADO). Para una discusin de las diferencias entre ADO y ADO.NET, vea ADO.NET para el programador de ADO en MSDN. Le recomendamos que no utilice ADO.NET, ADO para acceder a los datos en el archivo. NET.

En esta seccin
Objetivos de diseo para ADO.NET Trata sobre la motivacin y los objetivos de diseo detrs de la creacin de ADO.NET. ADO.NET Arquitectura Proporciona una visin general de la arquitectura y los componentes de ADO.NET. . NET Framework Proveedores de datos Proporciona informacin general sobre el diseo de la. NET Framework y de los proveedores de datos. NET Framework que se incluyen con ADO.NET. ADO.NET DataSet Proporciona una visin general del conjunto de datos y diseo de componentes. Side-by-Side de ejecucin y ADO.NET Trata las diferencias en las versiones de ADO.NET y su efecto en la ejecucin de lado a lado y compatibilidad de aplicaciones. Aplicacin de ejemplo de ADO.NET Proporciona un ejemplo de una aplicacin de ADO.NET que recupera los datos de una base de datos y lo devuelve a la consola.

Objetivos de diseo para ADO.NET


. NET Framework 2.0
Otras versiones 10 de los 18 ha calificado este til - Valorar este tema Como el desarrollo de aplicaciones ha evolucionado, las nuevas aplicaciones se han convertido imprecisa, a menudo basadas en el modelo de aplicacin Web. Cada vez ms de las aplicaciones actuales utilizan XML para codificar los datos que han pasado a travs de conexiones de red. Las aplicaciones Web utilizan HTTP como la tela para la comunicacin entre niveles y deben controlar expresamente el mantenimiento del estado de las solicitudes. Este nuevo modelo es muy diferente del estilo conectada, estrechamente unida de programacin que caracteriz la era de cliente / servidor, donde se celebr una conexin abierta a la duracin de la vida del programa, y no controlar el estado era necesario. En el diseo de las herramientas y tecnologas para satisfacer las necesidades de los desarrolladores de hoy, Microsoft se dio cuenta de que un modelo de programacin completamente nuevo para el acceso a los datos que se necesitaba, y lo construy en el Marco. NET. Sobre la base del marco. NET asegur que la tecnologa de acceso de datos sera uniforme, ya que los componentes que comparten un sistema de tipos, patrones de diseo, y las convenciones de nomenclatura. ADO.NET se dise para satisfacer las necesidades de este nuevo modelo de programacin: desconectado arquitectura de datos, integracin con XML, la representacin de datos comn con la capacidad de combinar datos de mltiples fuentes de datos y variado, e instalaciones optimizadas para interactuar con una base de datos, todos los nativo del Marco. NET. En la creacin de ADO.NET, Microsoft adopt los objetivos de diseo siguientes: El apalancamiento actual ActiveX Data Objects (ADO) conocimiento. Apoyar el modelo de programacin n-tier. Integrar el apoyo XML.

Aprovechar los conocimientos actuales de ADO


El diseo de ADO.NET satisface muchos de los requisitos del modelo actual de desarrollo de aplicaciones. Al mismo tiempo, el modelo de programacin se mantiene lo ms similar posible a ADO, ADO para desarrolladores actuales no tienen que empezar desde el principio. ADO.NET es una parte intrnseca del Marco. NET sin embargo, conserva la familiaridad para el programador de ADO. ADO.NET tambin coexiste con ADO. Aunque la mayora de las aplicaciones nuevas. NET basada sern escritos usando ADO.NET, ADO sigue estando disponible para el programador. NET a travs de. NET servicios de interoperabilidad COM. Para una discusin de las diferencias entre ADO y ADO.NET, vea ADO.NET para el programador de ADO .

Apoyar el modelo de programacin NTier


La idea de trabajar con un conjunto inconexo de datos se ha convertido en un punto focal en el modelo de programacin. ADO.NET proporciona soporte de primera clase para el desconectado, entorno de programacin n-tier para muchas aplicaciones nuevas que estn escritas. La solucin de ADO.NET para n-tier programacin es el conjunto de datos . Para obtener ms informacin acerca de conjuntos de datos , vea Utilizar DataSets en ADO.NET .

Integrar la compatibilidad con XML


XML y acceso a datos estn estrechamente vinculados. XML es sobre la codificacin de datos y acceso a datos es cada vez ms acerca de XML. . NET Framework no slo admite los estndares Web, sino que est construido en su totalidad en la parte superior de ellos. La compatibilidad con XML est integrado en ADO.NET a un nivel muy fundamental. . Las clases XML en el NET Framework y ADO.NET son parte de la misma arquitectura, estn integradas en muchos niveles diferentes. Por lo tanto, ya no tienen que elegir entre el acceso de datos de conjunto de servicios y sus homlogos XML, la capacidad de cruzar de uno a otro es inherente en el diseo de ambos. Para obtener ms informacin acerca del uso de XML con ADO.NET, vea Utilizar XML en un DataSet .

ADO.NET Arquitectura
. NET Framework 2.0
Otras versiones 47 de los 66 ha calificado este til - Valorar este tema El procesamiento de datos se ha basado tradicionalmente principalmente en una conexin basada en modelo de dos niveles. Como el procesamiento de datos utiliza cada vez ms arquitecturas de varios niveles, los programadores se estn cambiando a un enfoque desconectado para proporcionar una mejor escalabilidad para sus aplicaciones.

Componentes ADO.NET
Hay dos componentes de ADO.NET que se pueden utilizar para acceder y manipular los datos: . NET Framework proveedores de datos El conjunto de datos

. NET Framework Proveedores de datos


Los datos del NET. Framework son componentes que han sido expresamente diseados para la manipulacin de datos y rpida, de slo avance y de slo lectura el acceso a los datos. La conexin de objeto proporciona conectividad a un origen de datos. El Comando objeto permite el acceso a los comandos de base de datos para devolver datos, modificar datos, ejecutar procedimientos almacenados y enviar o recuperar informacin de parmetros. El DataReader proporciona una corriente de alto rendimiento de los datos de la fuente de datos. Por ltimo, el DataAdapter proporciona el puente entre el DataSet objeto y la fuente de datos. LosDataAdapter utiliza comandos objetos para ejecutar comandos SQL en el origen de datos tanto de la carga del DataSet con datos, y conciliar los cambios realizados en los datos en el DataSet en el origen de datos.

El DataSet
El conjunto de datos ADO.NET est expresamente diseado para el acceso a datos independiente de cualquier fuente de datos. Como resultado, se puede usar con fuentes de datos mltiples y diferentes, que se utiliza con datos XML, o se utiliza para gestionar los datos locales de la aplicacin. El conjunto de datos contiene una coleccin de uno o ms DataTable objetos compuestos por filas y columnas de datos, as como la clave primaria, clave externa, restriccin e informacin sobre relacin los datos de la DataTable objetos. El siguiente diagrama muestra la relacin entre un. NET Framework y un conjunto de datos . ADO.NET arquitectura

Elegir un DataReader o un DataSet


Al decidir si su aplicacin debe utilizar un DataReader (vea Recuperar datos mediante DataReader ) o un conjunto de datos (ver Utilizar DataSets en ADO.NET ), usted debe considerar el tipo de funcionalidad que requiere su aplicacin. Utilice un conjunto de datos para hacer lo siguiente: Datos de la cach de forma local en la aplicacin de forma que se puede manipular. Si slo necesita leer los resultados de una consulta, el DataReader es la mejor opcin. Datos remota entre niveles o desde un servicio Web XML. Interactuar con datos dinmicamente, como la unin a un control de Windows Forms o combinar y relacionar datos provenientes de mltiples fuentes. Lleve a cabo un proceso intenso de datos sin necesidad de una conexin abierta con la fuente de datos, lo que

libera la conexin para ser utilizado por otros clientes. Si no necesita la funcionalidad proporcionada por el conjunto de datos , se puede mejorar el rendimiento de la aplicacin mediante el DataReader para devolver los datos en un slo avance y de slo lectura de la moda. Aunque el DataAdapter utiliza el DataReader para rellenar el contenido de un DataSet (vea Llenar un DataSet desde un DataAdapter ), utilizando el DataReader puede aumentar el rendimiento, ya que se ahorrar memoria que podra ser consumida por el conjunto de datos , as como evitar el procesamiento necesario para crear y llenar el contenido del DataSet .

XML y ADO.NET
ADO.NET aprovecha la potencia de XML para proporcionar acceso desconectado a datos. ADO.NET se dise mano a mano con las clases XML en el NET Framework,. Ambos son componentes de una nica arquitectura. ADO.NET y las clases XML en el Marco. NET convergen en el conjunto de datos de objetos. El conjunto de datos se pueden completar con datos de un origen XML, si se trata de un archivo o una secuencia XML. El conjunto de datos se puede escribir como Consorcio World Wide Web (W3C) compatible con XML, incluyendo su esquema como esquema XML de definicin de lenguaje (XSD), independientemente de la fuente de los datos en el DataSet . Debido al formato de serializacin nativa del DataSet es XML, es un medio excelente para mover datos entre niveles, haciendo

que el conjunto de datos en una opcin ptima para la comunicacin remota de datos y el contexto de esquema hacia y desde un servicio Web XML.

ADO.NET Plataforma Requisitos


Microsoft. NET Framework SDK (incluyendo ADO.NET) es compatible con Microsoft Windows XP, Windows 2000, Windows NT 4 con Service Pack 6a, Windows Millennium Edition, Windows 98 y Windows CE.

Nota

El. NET Framework para OLE DB y. NET Framework para ODBC requiere MDAC 2.6 o posterior, y MDAC 2.8 Service Pack 1 (SP1) se recomienda. Puede descargar MDAC 2.8 SP1 desde el acceso a datos y almacenamiento Developer Center .
En el ejemplo de cdigo siguiente se muestra cmo incluir el System.Data espacio de nombres en sus aplicaciones, con el fin de utilizar ADO.NET: C# VB

Imports System.Data
Las clases de ADO.NET se encuentran en System.Data.dll, y estn integradas con las clases XML en System.Xml.dll. Al compilar cdigo que utiliza el System.Dataespacio de nombres, referencia tanto System.Data.dll y System.Xml.dll. Para un ejemplo de una aplicacin de ADO.NET, vase Aplicacin de muestra ADO.NET .

Remoting o Calcular referencias de datos entre niveles y Clientes


El diseo del DataSet le permite transportar fcilmente los datos a los clientes a travs de Internet utilizando los servicios Web XML, as como lo que le permite reunir datos entre. NET utilizando. NET servicios remotos. Tambin puede remota un establecimiento inflexible de tipos DataSet de esta manera. Para una visin general de los servicios Web XML, vea XML Web Introduccin a los servicios . Para un ejemplo de consumir un DataSet desde un servicio Web XML, vea Consumir DataSet a partir de un servicio Web XML . Para una visin general de los servicios de comunicacin remota, consulte . general NET Framework Remoting . Tenga en cuenta que en ADO.NET 2.0, DataTableobjetos tambin se puede utilizar con ambos servicios de comunicacin remota y servicios Web XML.

. NET Framework Proveedores de datos


. NET Framework 2.0

Otras versiones 15 de los 28 ha resultado til nominal - Tasa este tema


A. NET Framework se utiliza para conectarse a una base de datos, ejecutar comandos y recuperar resultados. Esos resultados se procesan directamente, colocado en un ADO.NET DataSet con el fin de ser expuesto al usuario de una manera ad hoc, en combinacin con datos de mltiples fuentes, o controlarse a distancia entre niveles. . NET Framework proveedores son ligeros, creando una capa mnima entre la fuente de datos y su cdigo, lo que aumenta el rendimiento sin sacrificar la funcionalidad. En la tabla siguiente se muestran los proveedores. NET Framework que se incluyen en el Marco. NET.

. NET Framework proveedor . NET Framework Data Provider para SQL Server . NET Framework Data Provider para OLE DB . NET Framework para ODBC . NET Framework para Oracle

Descripcin

Proporciona acceso a datos de Microsoft SQL Server versin 7.0 o posterior. Utiliza el System.Data.SqlClient espacio de nombres.

Para orgenes de datos expuestos mediante OLE DB. Utiliza el System.Data.OleDb espacio de nombres.

Para las fuentes de datos expuestos mediante ODBC. Utiliza el System.Data.Odbc espacio de nombres. Para fuentes de datos Oracle. El. NET Framework para Oracle admite Oracle versin 8.1.7 del software cliente y despus, y utiliza el System.Data.OracleClient espacio de nombres.

Nota El. NET Framework para ODBC y. NET Framework para Oracle no se incluyeron en el. NET Framework versin 1.0. Si necesita el. NET Framework para ODBC o. NET Framework para Oracle, y se est utilizando. NET Framework 1.0, puede descargar estos proveedores de datos desde el acceso a datos y almacenamiento

Developer Center . El espacio de nombres para el archivo. NET Framework para ODBC es Microsoft.Data.Odbc . El espacio de nombres para el archivo. NET Framework para Oracle es System.Data.OracleClient .

Los objetos centrales de datos. NET Framework


En la tabla siguiente se describen los objetos del ncleo cuatro que componen una. NET Framework.

Objeto Conexin

Descripcin Establece una conexin con una fuente de datos especfica. La clase base para todos los Conexin objetos es el DbConnection clase. Ejecuta un comando en un origen de datos. Expone los parmetros y puede ejecutar dentro del mbito de una transaccin de una conexin .La clase base para todos los comandos de objetos es el DbCommand clase. Lee un slo avance y de slo lectura flujo de datos de un origen de datos. La clase base para todos los DataReader objetos es el DbDataReaderclase. Llena un DataSet y resuelve actualizaciones con el origen de datos. La clase base para todos los DataAdapter objetos es el DbDataAdapterclase.

Comando

DataReader

DataAdapter

Adems de las clases principales enumerados en la tabla anterior, a. Proveedor de datos tambin contiene las clases enumeradas en la tabla siguiente.

Objeto Transaccin

Descripcin Permite dar de alta los comandos de las transacciones en el origen de datos. La clase base para todas las transacciones objetos es elDbTransaction clase. Un objeto auxiliar que genera automticamente las propiedades de comando de un DataAdapter o obtendrn informacin de los parmetros de un procedimiento almacenado y poblar el Parmetros de una coleccin de comandos de objetos. La clase base para todos los CommandBuilder objetos es el DbCommandBuilder clase. Un objeto auxiliar que proporciona una forma sencilla de crear y administrar el contenido de las cadenas de conexin utilizadas por las Connection objetos. La clase base para todos los ConnectionStringBuilder objetos es el objeto DbConnectionStringBuilderclase. Define la entrada, salida y retorno de los parmetros de valor para los comandos y procedimientos almacenados. La clase base para todos los parmetros de los objetos es la DbParameter clase.

CommandBuilder

ConnectionStringBuilde r

Parmetro

Excepcin

Se devuelve cuando se produce un error en la fuente de datos. Por un error detectado en el cliente, datos. NET Framework proveedores de lanzar una excepcin Marco. NET. La clase base para todas las excepciones objetos es el DbException clase. Expone la informacin de una advertencia o un error devuelto por el origen de datos. Previsto. NET Framework atributos de cdigo de datos del proveedor de seguridad de acceso. La clase base para todos losClientPermission objetos es el DBDataPermission clase.

Error

ClientPermission

El. NET Framework para SQL Server


El. NET Framework para SQL Server utiliza su propio protocolo para comunicarse con SQL Server. Es ligero y funciona bien, ya que est optimizado para el acceso a SQL Server directamente, sin aadir un OLE DB u Open Database Connectivity (ODBC) capa. La siguiente ilustracin compara el. NET Framework para SQL Server con el. NET Framework para OLE DB. El. NET Framework para OLE DB se comunica con un origen de datos OLE DB a travs tanto del componente OLE DB de servicio, que ofrece la agrupacin de conexiones y servicios de transaccin, y el proveedor OLE DB para el origen de datos.

Nota . NET Framework para ODBC tiene una arquitectura similar a la NET Framework para OLE DB,. Por ejemplo, se llama a un componente de servicio ODBC.
Comparacin del. NET Framework para SQL Server y. NET Framework para OLE DB

Para utilizar el. NET Framework para SQL Server, debe tener acceso a SQL Server 7.0 o posterior. El. NET Framework para SQL Server clases se encuentran en elSystem.Data.SqlClient espacio de nombres. En versiones anteriores de SQL Server, utilice el. NET Framework para OLE DB con SQL Server Proveedor OLE DB (SQLOLEDB). El. NET Framework para SQL Server admite tanto transacciones locales y distribuidas. Para las transacciones distribuidas, el. NET Framework para SQL Server, de forma predeterminada, se inscribe automticamente en una transaccin y obtiene detalles de la transaccin de servicios de componentes de Windows oSystem.Transactions . Para obtener ms informacin, vea Realizar transacciones . En el ejemplo de cdigo siguiente se muestra cmo incluir el System.Data.SqlClient espacio de nombres en sus aplicaciones. C# VB

Imports System.Data.SqlClient

El. NET Framework para OLE DB


El. NET Framework para OLE DB utiliza OLE DB nativo a travs de la interoperabilidad COM para permitir el acceso de datos. El. NET Framework para OLE DB admite transacciones locales y distribuidas. Para las transacciones distribuidas, el. NET Framework para OLE DB, por defecto, se inscribe automticamente en una transaccin y obtiene detalles de la transaccin de Servicios de componentes de Windows 2000. Para obtener ms informacin, vea Realizar transacciones . La siguiente tabla muestra los proveedores que han sido probados con ADO.NET.

Conductor SQLOLEDB MSDAORA Microsoft.Jet.OLEDB.4.0 Nota

Proveedor Microsoft OLE DB para SQL Server Microsoft OLE DB Provider para Oracle Proveedor OLE DB para Microsoft Jet

El uso de un Access (Jet) base de datos como fuente de datos para las aplicaciones de subprocesos mltiples, como las aplicaciones ASP.NET, no se recomienda.Si tiene que usar Access como origen de datos para una aplicacin ASP.NET, y no puede utilizar una alternativa, como SQL Server o MSDE, tenga en cuenta que las aplicaciones ASP.NET para conectarse a una base de datos Access puede encontrar problemas de conexin ms comunes relacionados con permisos de seguridad. Para problemas de ayuda para solucionar problemas de conexin con ASP.NET y una base de datos Access, consulte el artculo Q316675, "PRB: No se puede conectar a base de datos Access desde ASP.NET" en el Microsoft Knowledge Base .
El. NET Framework para OLE DB no admite la versin 2.5 de OLE DB interfaces. Los proveedores OLE DB que requieren soporte para interfaces de OLE DB 2.5 no funcionar correctamente con el. NET Framework para OLE DB. Esto incluye el Microsoft OLE DB Provider for Exchange y el proveedor Microsoft OLE DB para Internet Publishing. El. NET Framework para OLE DB no funciona con el proveedor OLE DB para ODBC (MSDASQL). Para obtener acceso a un origen de datos ODBC mediante ADO.NET, utilice el. NET Framework para ODBC. . NET Framework Data Provider para las clases de OLE DB se encuentran en el System.Data.OleDb espacio de nombres. En el ejemplo de cdigo siguiente se muestra cmo incluir el System.Data.OleDb espacio de nombres en sus aplicaciones. C# VB

Imports System.Data.OleDb

Nota El. NET Framework para OLE DB requiere MDAC 2.6 o posterior, y MDAC 2.8 Service Pack 1 (SP1) se recomienda. Puede descargar MDAC 2.8 SP1 desde el acceso a datos y almacenamiento Developer Center .

El. NET Framework para ODBC


El. NET Framework para ODBC utiliza el Administrador de controladores ODBC nativo (DM) para permitir el acceso a datos. El proveedor de datos ODBC admite tanto transacciones locales y distribuidas. Para las transacciones distribuidas, el proveedor de datos ODBC, por defecto, se inscribe automticamente en una transaccin y obtiene detalles de la transaccin de Servicios de componentes de Windows 2000. Para obtener ms informacin, vea Realizar transacciones . En la tabla siguiente se muestran los controladores ODBC probados con ADO.NET.

Conductor SQL Server Microsoft ODBC para Oracle Microsoft Access Driver (*. Mdb)
. NET Framework Data Provider para ODBC clases se encuentran en el System.Data.Odbc espacio de nombres. En el ejemplo de cdigo siguiente se muestra cmo incluir el System.Data.Odbc espacio de nombres en sus aplicaciones. C# VB

Imports System.Data.Odbc

Nota El. NET Framework para ODBC requiere MDAC 2.6 o posterior, y MDAC 2.8 SP1 es la recomendada. Puede descargar MDAC 2.8 SP1 desde el acceso a datos y almacenamiento Developer Center .

El. NET Framework para Oracle


El. NET Framework para Oracle permite el acceso a datos a travs de fuentes de datos Oracle software Oracle conectividad de cliente. El proveedor de datos admite la versin del software cliente de Oracle 8.1.7 o posterior. El proveedor de datos admite tanto transacciones locales y distribuidas. Para obtener ms informacin, veaRealizar transacciones . El. NET Framework para Oracle requiere software cliente de Oracle (8.1.7 o posterior) en el sistema antes de poder conectarse a una fuente de datos Oracle. . NET Framework Data Provider para Oracle clases se encuentran en el System.Data.OracleClient espacio de nombres y se encuentran en elSystem.Data.OracleClient.dll asamblea. Debe hacer referencia tanto a la System.Data.dll y el System.Data.OracleClient.dll al compilar una aplicacin que utiliza el proveedor de datos. En el ejemplo de cdigo siguiente se muestra cmo incluir el System.Data.OracleClient espacio de nombres en sus aplicaciones. C#

VB

Imports System.Data Imports System.Data.OracleClient

La eleccin de un proveedor de Marco. NET Data


Dependiendo de la fuente de datos para el diseo y su aplicacin, su eleccin de. NET Framework puede mejorar el rendimiento, la capacidad y la integridad de su solicitud. En la tabla siguiente se describen las ventajas y limitaciones de cada proveedor de Marco. NET de datos.

Proveedor . NET Framework Data Provider para SQL Server

Notas Recomendado para aplicaciones de nivel medio que utilizan Microsoft SQL Server 7.0 o posterior. Recomendado para aplicaciones de un nico nivel que utilizan Microsoft Database Engine (MSDE) o SQL Server 7.0 o posterior. Recomendaciones sobre el uso del proveedor OLE DB para SQL Server (SQLOLEDB) con el. NET Framework para OLE DB. Para SQL Server 6.5 y versiones anteriores, debe utilizar el proveedor OLE DB para SQL Server con el. NET Framework para OLE DB. Recomendado para aplicaciones de nivel medio que utilizan SQL Server 6.5 o versiones anteriores. Para SQL Server 7.0 o posterior, el. NET Framework para SQL Server es recomendable. Tambin se recomienda para aplicaciones de un nico nivel que utilizan bases de datos Microsoft Access. El uso de una base de datos para una aplicacin de nivel medio no se recomienda. Recomendado para aplicaciones de media y nico nivel que utilizan fuentes de datos ODBC. Recomendado para aplicaciones de media y nico nivel que utilizan fuentes de datos Oracle.

. NET Framework Data Provider para OLE DB

. NET Framework para ODBC . NET Framework para Oracle

ADO.NET DataSet
. NET Framework 2.0
Otras versiones

19 de los 38 ha calificado este til - Valorar este tema El DataSet objeto es esencial para admitir escenarios desconectados, distribuidas de datos con ADO.NET. El DataSet es una representacin residente en memoria de datos que proporciona un modelo de programacin relacional coherente independientemente del origen de datos. Se puede usar con fuentes de datos mltiples y diferentes, con datos XML, o para administrar datos locales de la aplicacin. El DataSet representa un conjunto completo de datos, incluyendo tablas relacionadas, restricciones y relaciones entre las tablas. La siguiente ilustracin muestra el DataSet modelo de objetos. DataSet modelo de objetos

Los mtodos y objetos en un conjunto de datos son coherentes con los del modelo de base de datos relacional. El DataSet tambin puede persistir y volver a cargar su contenido como XML y su esquema de definicin de esquemas XML como lenguaje (XSD). Para obtener ms informacin, vea Utilizar XML en un DataSet .

El DataTableCollection
Un ADO.NET DataSet contiene una coleccin de cero o ms tablas representadas por DataTable objetos. El DataTableCollection contiene todos los DataTableobjetos en un conjunto de datos . Un DataTable se define en el System.Data espacio de nombres y representa una sola tabla de datos residentes en memoria. Contiene una coleccin de columnas representadas por una DataColumnCollection , y restricciones representadas por un ConstraintCollection , que conjuntamente definen el esquema de la tabla. UnDataTable tambin contiene una coleccin de filas representadas por la DataRowCollection , que contiene los datos de la tabla. Junto con su estado actual, unaDataRow conserva sus dos versiones actual y original para identificar los cambios en los valores almacenados en la fila.

El DataRelationCollection
Un DataSet contiene relaciones en su DataRelationCollection objeto. Una relacin, representada por la DataRelation objeto, las filas asociadas en una DataTable con las filas de otro DataTable . Una relacin es anloga a una ruta de combinacin que puede existir entre las columnas de clave principal y clave externa en una base de datos relacional. Un DataRelation identifica columnas coincidentes de dos tablas de un DataSet . Relaciones permitir la navegacin de una mesa a otra dentro de un DataSet . Los elementos esenciales de un DataRelation son el nombre de la relacin, el nombre de las tablas que se relacionan, y las columnas relacionadas de cada tabla. Las relaciones pueden ser construidas con ms de una columna por tabla especificando una matriz

de DataColumn objetos como las columnas de clave. Cuando se agrega una relacin con el DataRelationCollection , si lo desea, puede aadir unUniqueKeyConstraint y una ForeignKeyConstraint para hacer cumplir las restricciones de integridad cuando se realizan cambios en los valores de columnas relacionadas.

ExtendedProperties
El DataSet , DataTable y DataColumn tienen un ExtendedProperties propiedad. ExtendedProperties es un PropertyCollection donde se puede colocar informacin personalizada, como la instruccin SELECT que se utiliza para generar el conjunto de resultados, o el momento en que se generaron los datos. ElExtendedProperties coleccin se conserva la informacin de esquema para el conjunto de datos .

Side-by-Side de ejecucin y ADO.NET


. NET Framework 2.0
Otras versiones 4 de 5 puntuado este til - Valorar este tema Side-by-side de ejecucin en el marco. NET es la capacidad de ejecutar una aplicacin en un equipo con varias versiones del Marco. NET instalado, utilizando exclusivamente la versin de que la solicitud fue compilado. Para obtener informacin detallada sobre la configuracin side-by-side ejecucin, consulte Side-by-Side de ejecucin . Una aplicacin compilada con una versin del Marco. NET se puede ejecutar en una versin diferente del Marco. NET. Sin embargo, se recomienda que se compila una versin de la aplicacin para cada versin instalada del Marco. NET, y ejecutarlos por separado. En cualquiera de los casos, usted debe ser consciente de los cambios en ADO.NET entre versiones que pueden afectar a la compatibilidad hacia adelante o hacia atrs compatibilidad de la aplicacin.

Compatibilidad hacia adelante y compatibilidad con versiones anteriores


Adelante compatibilidad significa que una aplicacin puede ser compilado con una versin anterior del Marco. NET, pero seguir funcionando con xito en una versin posterior del marco. NET. Cdigo ADO.NET escrito para la versin de Marco. NET 1.1 es compatible con versiones futuras de comunicacin. NET 2.0 Framework versin. La compatibilidad hacia atrs significa que una aplicacin se compila una versin ms reciente del Marco. NET, pero sigue funcionando con las versiones anteriores del Marco. NET, sin ninguna prdida de funcionalidad. Por supuesto, este no ser el caso para las caractersticas introducidas en una nueva versin del marco. NET.Para obtener informacin sobre las nuevas caractersticas aadidas a ADO.NET en la versin 2.0 del Framework the.NET, vea Novedades en ADO.NET . Aunque los componentes de ADO.NET en el Marco. NET est diseado para ser compatible hacia atrs y hacia adelante (sin incluir nuevas caractersticas), debe ser consciente de los problemas que afectan la compatibilidad hacia adelante o hacia atrs de una aplicacin. Las siguientes secciones describen lado-a-lado problemas de ejecucin que pueden afectar a la compatibilidad hacia atrs o hacia delante de su cdigo ADO.NET incluyendo: El. NET Framework para ODBC El. NET Framework para Oracle Seguridad de acceso a cdigo El conjunto de datos

SqlCommand ejecucin Microsoft Data Access Components (MDAC)

El. NET Framework para ODBC


Desde la versin 1.1, el. NET Framework para ODBC ( System.Data.Odbc ) se incluye como parte del Marco. NET. El proveedor de datos ODBC est disponible para. NET Framework versin 1.0 los desarrolladores como una descarga Web desde el acceso a datos y almacenamiento Developer Center . El espacio de nombres para el archivo. NET Framework para ODBC es Microsoft.Data.Odbc . Si usted tiene una aplicacin desarrollada para la versin de Marco. NET 1.0 que utiliza el proveedor de datos ODBC para conectarse a su origen de datos y desea ejecutar dicha aplicacin en la versin de Marco. NET 1.1 o posterior, deber actualizar el espacio de nombres para el proveedor de datos ODBC a System.Data.Odbc . A continuacin, debe volver a compilar para la versin ms reciente del Marco. NET. Si usted tiene una aplicacin desarrollada para el. NET Framework versin 2.0 que utiliza el proveedor de datos ODBC para conectarse a su origen de datos y desea ejecutar dicha aplicacin en la versin de Marco. NET 1.0, debe descargar el proveedor de datos ODBC e instalar que en el. NET Framework 1.0. A continuacin, debe cambiar el espacio de nombres del proveedor de datos ODBC para Microsoft.Data.Odbc , y volver a compilar la aplicacin para el. NET Framework versin 1.0.

El. NET Framework para Oracle


Desde la versin 1.1, el. NET Framework para Oracle ( System.Data.OracleClient ) se incluye como parte del Marco. NET. El proveedor de datos est a disposicin de. NET Framework versin 1.0 los desarrolladores como una descarga Web desde el acceso a datos y almacenamiento Developer Center . Si usted tiene una aplicacin desarrollada para el. NET Framework versin 2.0 que utiliza el proveedor de datos para conectarse al origen de datos, y desea ejecutar dicha aplicacin en el. NET Framework versin 1.0, debe descargar el proveedor de datos e instalarlo en el. NET Framework 1.0 sistema.

Seguridad de acceso a cdigo


Los datos de. NET Framework proveedores en el. NET Framework versin 1.0 ( System.Data.SqlClient , System.Data.OleDb ) son necesarios para ejecutar con permisos FullTrust. Cualquier intento de utilizar los datos. NET Framework versin del Framework. NET 1.0 en una zona con menos del permiso FullTrust causa unaSecurityException . Sin embargo, con el lanzamiento de the.NET Framework versin 2.0, todos los datos. NET Framework se puede utilizar en zonas de confianza parcial. Adems, una nueva caracterstica de seguridad fue agregado a los datos. NET Framework en la versin de Marco. NET 1.1. Esta caracterstica le permite restringir qu cadenas de conexin se puede utilizar en una zona de seguridad determinada. Tambin puede desactivar el uso de contraseas en blanco para una zona de seguridad determinada. Para obtener ms informacin, vea Seguridad de acceso a cdigo y ADO.NET . Debido a que cada instalacin del Marco. NET tiene un archivo Security.config separado, no hay problemas de compatibilidad con la configuracin de seguridad.Sin embargo, si su aplicacin depende de las capacidades de seguridad adicionales de ADO.NET incluye en la versin Framework. NET 1.1 y versiones posteriores, no ser capaz de distribuir una versin 1.0 del sistema.

SqlCommand Ejecucin
A partir de la versin de Marco. NET 1.1, la forma en que ExecuteReader ejecuta los comandos en el origen de datos ha cambiado. En la versin de Marco. NET 1.0, ExecuteReader ejecuta todos los comandos en el contexto de la sp_executesql procedimiento almacenado. Como resultado, los comandos que afectan al estado de la conexin (por ejemplo, SET NOCOUNT ON), slo se aplican a la ejecucin del comando actual. El estado de la conexin no se modifica para los comandos posteriores ejecutadas mientras la conexin est abierta. En la versin de Marco. NET 1.1 y versiones posteriores, ExecuteReader slo se ejecuta un comando en el contexto de la sp_executesql procedimiento almacenado si el comando contiene parmetros, lo que proporciona una ventaja de rendimiento. Como resultado, si un comando que afecta el estado de la conexin se incluye en un comando no

parametrizada, que modifica el estado de la conexin para todos los comandos posteriores ejecutadas mientras la conexin est abierta. Considere el siguiente lote de comandos ejecutados en una llamada a ExecuteReader .

SET NOCOUNT ON; SELECT * FROM dbo.Customers;


En la versin de Marco. NET 1.1 y versiones posteriores, NOCOUNT permanecer en ON para todos los comandos posteriores ejecutadas mientras la conexin est abierta. En la versin de Marco. NET 1.0, NOCOUNT slo lo hace durante la ejecucin del comando actual. Este cambio puede afectar tanto a la compatibilidad hacia adelante y hacia atrs de su aplicacin si depende del comportamiento de ExecuteReader para cualquiera de las versiones del Marco. NET. Para las aplicaciones que se ejecutan en las versiones anteriores y posteriores del Marco. NET, usted puede escribir su cdigo para asegurarse de que el comportamiento es el mismo, independientemente de la versin que est ejecutando. Si desea asegurarse de que un comando modifica el estado de la conexin para todos los comandos posteriores, se recomienda ejecutar el comando usando ExecuteNonQuery . Si desea asegurarse de que un comando no modifica la relacin de todos los comandos posteriores, se recomienda incluir los comandos para restablecer el estado de la conexin en el comando. Por ejemplo:

SET NOCOUNT ON; SELECT * FROM dbo.Customers; SET NOCOUNT OFF;

Microsoft Data Access Components (MDAC)


Los datos de. NET Framework para proveedores OLE DB y ODBC requiere MDAC 2.6 o posterior en todas las versiones del marco. NET y MDAC 2.8 SP1 es la recomendada. Aunque este requisito no introduce problemas de ejecucin lado-alado, es importante sealar que MDAC no es compatible actualmente con lado-a-lado ejecucin. Por lo tanto, es importante verificar que la aplicacin va a seguir funcionando correctamente con la nueva versin antes de actualizar los componentes de MDAC para su instalacin. Para obtener ms informacin acerca de MDAC, consulte el acceso a datos y almacenamiento Developer Center .

Aplicacin de ejemplo de ADO.NET


. NET Framework 2.0
Otras versiones 39 de los 57 ha calificado este til - Valorar este tema La siguiente es una sencilla aplicacin de ADO.NET que devuelve resultados de una fuente de datos y escribe el resultado en la consola o lnea de comandos.

Los ejemplos de este tema muestran cmo conectarse y recuperar datos mediante. NET Framework para SQL Server ( System.Data.SqlClient ), el. NET Framework para OLE DB ( System.Data.OleDb ), el archivo. NET Framework para ODBC ( System.Data.Odbc ), y el. NET Framework para Oracle ( System.Data.OracleClient ).Todos los proveedores de datos se puede utilizar en una nica aplicacin, si se desea. El SqlClient ejemplo siguiente se supone que se puede conectar a la Northwind base de datos de ejemplo en Microsoft SQL Server 7.0 o posterior, y devuelve una lista de registros de la Categoras tabla mediante un SqlDataReader . El proveedor de datos y Odbc ejemplos asumen una conexin con el Microsoft AccessNorthwind base de datos muestra. El OracleClient ejemplo supone una conexin con DEMO.CUSTOMER en un servidor Oracle. Tambin debe agregar una referencia a la System.Data.OracleClient.dll. Para obtener ms informacin sobre el DataReader , vea Recuperar datos mediante DataReader ).

SqlClient
C# VB

Opcin Explcita En Opcin estricta en Imports System Imports System.Data Imports System.Data.SqlClient Public Class Programa Pblico Compartido Sub Main () Dim connectionString Como cadena = GetConnectionString () Dim queryString Como cadena = _ "SELECT CategoryID, CategoryName DE dbo.Categories"; Con conexin Como Nuevo SqlConnection (connectionString) Dim comando como SqlCommand = connection.CreateCommand () command.CommandText = queryString Tratar de Connection.Open () Dim dataReader Como SqlDataReader = _ Command.ExecuteReader () Es bien dataReader.Read () Console.WriteLine (vbTab y "{0}" y vbTab y "{1}" , _ dataReader (0), dataReader (1)) Bucle dataReader.Close () Catch ex como excepcin Console.WriteLine (ex.Message) Fin Trate End Uso End Sub Privado Compartido Funcin GetConnectionString () Como Cuerda 'Para evitar almacenar la cadena de conexin en el cdigo, "se puede recuperar de un archivo de configuracin. Return "Data Source = (local); Initial Catalog = Northwind," _ Y "Integrated Security = SSPI;" End Funcin End Class

OleDb

C# VB

Opcin Explcita En Opcin estricta en Imports System Imports System.Data Imports System.Data.OleDb Public Class Programa Pblico Compartido Sub Main () Dim connectionString Como cadena = GetConnectionString () Dim queryString Como cadena = _ "SELECT CategoryID, CategoryName FROM Categoras"; Con conexin Como Nuevo OleDbConnection (connectionString) Dim comando Como OleDbCommand = connection.CreateCommand () command.CommandText = queryString Tratar de Connection.Open () Dim dataReader Como OleDbDataReader = _ Command.ExecuteReader () Es bien dataReader.Read () Console.WriteLine (vbTab y "{0}" y vbTab y "{1}" , _ dataReader (0), dataReader (1)) Bucle dataReader.Close () Catch ex como excepcin Console.WriteLine (ex.Message) Fin Trate End Uso End Sub Privado Compartido Funcin GetConnectionString () Como Cuerda 'Para evitar almacenar la cadena de conexin en el cdigo, "se puede recuperar de un archivo de configuracin. " Asume Neptuno.mdb se encuentra en c:. \ Data Return "Provider = Microsoft.Jet.OLEDB.4.0; Data Source =" _ Y "c: \ Data \ Neptuno.mdb; User Id = admin, Password =;" End Funcin End Class

Odbc
C# VB

Opcin Explcita En Opcin estricta en Importaciones sistema Importaciones System.Data Imports System.Data.Odbc Public Class Programa Pblico Compartido Sub Main ()

Dim connectionString Como cadena = GetConnectionString () Dim queryString Como cadena = _ "SELECT CategoryID, CategoryName FROM Categoras"; Con conexin Como Nuevo OdbcConnection (connectionString) Dim comando Como OdbcCommand = connection.CreateCommand () command.CommandText = queryString Tratar de Connection.Open () Dim dataReader Como OdbcDataReader = _ Command.ExecuteReader () Es bien dataReader.Read () Console.WriteLine (vbTab y "{0}" y vbTab y "{1}" , _ dataReader (0), dataReader (1)) Bucle dataReader.Close () Catch ex como excepcin Console.WriteLine (ex.Message) Fin Trate End Uso End Sub Privado Compartido Funcin GetConnectionString () Como Cuerda 'Para evitar almacenar la cadena de conexin en el cdigo, "se puede recuperar de un archivo de configuracin. " Asume Neptuno.mdb se encuentra en c:. \ Data Return "Driver = {Microsoft Access Driver (*. mdb)};" _ Y "DBQ = c: \ Data \ Neptuno.mdb; Uid = admin, contrasea:"; End Funcin End Class

OracleClient
C# VB

Opcin Explcita En Opcin estricta en Imports System Imports System.Data Imports System.Data.OracleClient Public Class Programa Pblico Compartido Sub Main () Dim connectionString Como cadena = GetConnectionString () Dim queryString Como cadena = _ "SELECT customer_id, NOMBRE DE DEMO.CUSTOMER" Con conexin Como Nuevo OracleConnection (connectionString) Dim comando Como OracleCommand connection.CreateCommand = () command.CommandText = queryString Tratar de Connection.Open () Dim dataReader Como OracleDataReader = _ Command.ExecuteReader () Es bien dataReader.Read ()

Console.WriteLine (vbTab y "{0}" y vbTab y "{1}" , _ dataReader (0), dataReader (1)) Bucle dataReader.Close () Catch ex como excepcin Console.WriteLine (ex.Message) Fin Trate End Uso End Sub Privado Compartido Funcin GetConnectionString () Como Cuerda 'Para evitar almacenar la cadena de conexin en el cdigo, "se puede recuperar de un archivo de configuracin. Return "Data Source = ThisOracleServer; Integrated Security = yes;" End Funcin End Class

Proteger aplicaciones de ADO.NET


. NET Framework 2.0
Otras versiones 2 de 5 puntuado este til - Valorar este tema Escribir un seguro de aplicaciones ADO.NET implica ms que evitar errores comunes de codificacin, como no validar la entrada del usuario. Una aplicacin que tiene acceso a datos tiene muchos puntos potenciales de falla que un atacante puede aprovechar para recuperar, manipular o destruir datos confidenciales. Por tanto, es importante entender todos los aspectos de la seguridad, desde el proceso de modelado de amenazas durante la fase de diseo de la aplicacin, para su eventual despliegue y mantenimiento continuo. El Framework. NET proporciona herramientas para proteger las aplicaciones y la administracin de polticas de seguridad. Enlaces a documentacin sobre estas herramientas se pueden encontrar en la Seguridad Herramientas tema. El Common Language Runtime (CLR) proporciona un entorno de tipo seguro para la ejecucin de cdigo en, con cdigo de acceso de seguridad (CAS) para restringir an ms los permisos de cdigo administrado. Adems de los recursos mencionados en esta seccin, el Microsoft Security Developer Center tiene hasta al da la informacin de seguridad, informes y descargas.

ADO.NET Prcticas recomendadas de seguridad

. NET Framework 2.0


Otras versiones

5 de 8 puntuado este til - Valorar este tema El Framework. NET proporciona muchas clases tiles y servicios que permiten a los desarrolladores a mejorar la seguridad de sus aplicaciones. Despus de acceder a datos protegidos prcticas de codificacin limita el dao que puede ser causado por un atacante potencial. Sin embargo, escribir cdigo seguro no protegerse contra los agujeros de seguridad auto-infligidas cuando se trabaja con recursos no administrados, tales como bases de datos. La mayora de las bases de datos del servidor, como SQL Server, tienen sus propios sistemas de seguridad, que mejoran la seguridad cuando se implementa correctamente. Sin embargo, incluso un origen de datos con un robusto sistema de seguridad puede ser vctima de un ataque si no est configurado correctamente.

Seguridad como un proceso


Asegurar una aplicacin es un proceso continuo. Nunca habr un punto en el que un desarrollador puede garantizar que una aplicacin est a salvo de todos los ataques, debido a que es imposible predecir qu tipos de ataques en el futuro nuevas tecnologas va a llevar a cabo. Por el contrario, slo porque nadie ha descubierto an (o publicada) errores de seguridad en un sistema, no quiere decir que no existen o podran existir. Es necesario planificar la seguridad durante la fase de diseo del proyecto, as como el plan de cmo la seguridad se mantendr durante la vida til de la aplicacin. En esta seccin se tratan los siguientes temas: Diseo para la Seguridad Prctica de modelado de amenazas Administrar y mantener la seguridad Ejecutar con privilegios mnimos Usar la seguridad integrada con SQL Server Utilizacin de los comandos con parmetros Controlar excepciones y errores de registro El uso de criptografa para proteger los datos Usar cdigos hash para la integridad de los datos

Diseo para la Seguridad


Uno de los mayores problemas en el desarrollo de aplicaciones seguras es que la seguridad es a menudo una idea de ltimo momento, algo que despus de implementar un proyecto de cdigo completo. No construir la seguridad en una aplicacin desde el principio conduce a aplicaciones inseguras porque el pensamiento poco se ha dado a lo que hace una aplicacin segura. Cuando se implementa la seguridad en el ltimo momento, sino que tambin conduce a ms errores, como saltos de software bajo las nuevas restricciones o tiene que ser reescritos para acomodar la funcionalidad inesperado. Cada lnea de cdigo revisado incluye la posibilidad de introducir un nuevo fallo. Por esta razn, usted debe considerar la seguridad al principio del proceso de desarrollo para que se pueda proceder a la par con el desarrollo de nuevas caractersticas. La mejor prctica para la creacin de aplicaciones seguras es empezar sin permisos a todos y luego aadir los ms estrechos permisos para la tarea concreta que se realiza. A partir de todos los permisos y despus negar los individuales, por el contrario, conduce a aplicaciones inseguras que son difciles de probar y mantener, porque los agujeros de seguridad puede existir de forma involuntaria la concesin de permisos ms de las requeridas.

Tema

Descripcin

Recursos para crear aplicaciones seguras Proteger aplicaciones

Proporciona enlaces a recursos para la creacin de aplicaciones seguras. Proporciona enlaces a recursos para la creacin de aplicaciones

seguras. Seguridad Bibliografa Proporciona vnculos a recursos externos disponibles en lnea y en forma impresa.

Prctica de modelado de amenazas


El proceso de evaluacin de las amenazas de seguridad, llamado modelado de amenazas , es necesario determinar la probabilidad y las consecuencias de las violaciones de seguridad en la aplicacin de ADO.NET. No se puede proteger un sistema contra ataques a menos que entienda todos los posibles ataques que est expuesto. El modelado de amenazas es un enfoque iterativo para evaluar las vulnerabilidades de la aplicacin para encontrar aquellas que son las ms peligrosas porque exponen los datos ms sensibles. Una vez que identifique las vulnerabilidades, las clasifiquen por orden de gravedad y crear un conjunto priorizado de contramedidas para contrarrestar las amenazas.

Tema

Descripcin

General sobre las amenazas de seguridad de aplicaciones Web Modelado de amenazas , Microsoft Security Developer Center

Describe modelado de amenazas y las mejores prcticas para las aplicaciones ASP.NET. Proporciona vnculos a recursos adicionales e informacin sobre modelado de amenazas.

Administrar y mantener la seguridad


Acceso a la administracin inadecuada de cdigo de seguridad (CAS) potencialmente puede crear debilidades de seguridad. Una vez que se implementa una aplicacin, las tcnicas de seguimiento de la seguridad se debe utilizar y los riesgos evaluados como surgen nuevas amenazas. Asegrese de que usted se suscribe a los boletines de seguridad y alertas, y que todos los Service Packs y parches estn actualizados.

Tema

Descripcin

Poltica de Gestin de la Seguridad El mantenimiento de la seguridad Prcticas recomendadas de seguridad Poltica Microsoft Windows Update Service TechNet Security Resource Center

Proporciona informacin sobre cmo crear y administrar la poltica de seguridad.

Proporciona enlaces externos a otros documentos y recursos para mantener la seguridad. Proporciona enlaces que describen cmo administrar la poltica de seguridad.

Describe el servicio Windows Update, una herramienta indispensable para estar al da con la seguridad. Proporciona herramientas de seguridad, informacin de respuesta de seguridad, tales como boletines de seguridad y alertas de virus, as como una gua prescriptiva para la seguridad de las aplicaciones.

Ejecutar con privilegios mnimos


Al disear, construir y desplegar la aplicacin, se debe asumir que su solicitud ser atacado. A menudo, estos ataques provienen de cdigo malicioso que se ejecuta con los permisos del usuario que ejecuta el cdigo. Otros pueden originarse en buenas intenciones cdigo que ha sido explotada por un atacante. Al planificar la seguridad, siempre ha

de asumir el peor de los casos va a producir. Una contramedida se puede emplear es tratar de levantar tantas paredes alrededor de su cdigo como sea posible, ejecute con privilegios mnimos. El principio de privilegios mnimos dice que cualquier privilegio concedido debe concederse a la menor cantidad de cdigo necesario, por el menor periodo de tiempo que se requiere para hacer el trabajo. Para minimizar la cantidad de dao que puede ocurrir si un ataque tiene xito, elija un contexto de seguridad para el cdigo que permite el acceso slo a los recursos que necesita para conseguir su trabajo hecho, y nada ms.

Tema

Descripcin

Cdigo de Acceso de Seguridad y ADO.NET Directrices para escribir cdigo seguro El desafo de privilegio mnimo

Describe las interacciones entre el cdigo de seguridad de acceso, seguridad basada en roles y los entornos de confianza parcial. Describe las mejores prcticas en el contexto de Visual Studio Team System. Los conceptos son aplicables a todas las aplicaciones. MSDN contenido discutiendo cmo escribir aplicaciones utilizando una cuenta de privilegios mnimos pueden ayudar a descubrir los agujeros de seguridad que un atacante podra explotar. MSDN contenido discutiendo la forma de desarrollar software, mientras que inicie sesin en Windows con privilegios no administrativos. Describe cmo cambiar el contexto de ejecucin de hacerse pasar por otro usuario de forma explcita en una base de datos de SQL Server 2005.

El desarrollo de software en Visual Studio. NET con privilegios administrativos no "Context Switching" en los Libros en pantalla de SQL Server

Usar la seguridad integrada con SQL Server


Cuando se conecta a Microsoft SQL Server, puede utilizar la autenticacin de Windows, tambin conocida como seguridad integrada, que utiliza la identidad del usuario actual de Windows activo en lugar de pasar un ID de usuario y contrasea. Uso de la autenticacin de Windows es muy recomendable ya que las credenciales de usuario no se exponen en la cadena de conexin. Si no puede utilizar la autenticacin de Windows para conectarse a SQL Server, considere la creacin de cadenas de conexin en tiempo de ejecucin mediante el SqlConnectionStringBuilder . Para obtener ms informacin, vea Crear cadenas de conexin .

Utilizacin de los comandos con parmetros


El uso de comandos parametrizados ayuda a proteger contra los ataques de inyeccin de SQL, en el que un atacante "inyecta" un comando en una sentencia de SQL que pone en peligro la seguridad en el servidor. Parametrizada comandos guardia contra un ataque de inyeccin SQL, asegurando que los valores recibidos de una fuente externa se pasan como valores nicos, y que no forman parte de la instruccin Transact-SQL. Como resultado, los comandos Transact-SQL insertados en un valor no se ejecutan en la fuente de datos. Ms bien, se evalan nicamente como un valor de parmetro. Adems de las prestaciones de la seguridad, comandos con parmetros proporcionan un mtodo conveniente para la organizacin de los valores pasados con una instruccin de Transact-SQL o un procedimiento almacenado.

Tema

Descripcin

Utilizar parmetros con DataAdapter Uso de procedimientos almacenados para actualizar datos

Describe cmo utilizar parmetros con DataAdapter . Describe cmo especificar parmetros y obtener un valor devuelto.

Utilizar parmetros con controles de origen de datos Asignacin de datos de proveedores de tipos de datos a los datos. NET Framework Tipos Los parmetros en los comandos de adaptadores de datos

Describe cmo utilizar los parmetros con controles de origen de datos ASP.NET. Describe cmo asignar. NET de datos especficas del proveedor para tipos de datos.

Describe cmo utilizar la seleccin y parmetros de actualizacin y cmo trabajar con objetos de parmetros y colecciones para los proveedores. NET Framework de datos. Describe cmo trabajar con objetos de comando con parmetros mediante instrucciones SQL o procedimientos almacenados.

Cmo: Establecer y obtener parmetros para objetos de comandos


Nota

Si va a crear una aplicacin ASP.NET, tambin tendr que evitar los ataques mediante scripts. Para obtener ms informacin, consulte general sobre los ataques de secuencias de comandos .

Controlar excepciones y errores de registro


Los atacantes a menudo usan informacin de una excepcin, tal como el nombre de su servidor, base de datos o tabla para montar un ataque a su sistema. Debido a que las excepciones pueden contener informacin especfica sobre su aplicacin o fuente de datos, puede ayudar a mantener su aplicacin y la fuente de datos ms protegidos por slo exponer la informacin esencial para el cliente.

Tema

Descripcin

Fundamentos de control de excepciones Mejores prcticas para la Gestin de excepciones Cmo: Mostrar mensajes de error seguros

Describe el manejo de excepciones para las aplicaciones. NET Framework. Describe las mejores prcticas para el manejo de excepciones.

Describe mostrar mensajes de error seguros en el contexto de seguridad del sitio Web.

El uso de criptografa para proteger los datos


Las clases de. NET Framework System.Security.Cryptography espacio de nombres se pueden utilizar desde las aplicaciones ADO.NET para evitar que los datos puedan ser ledos o modificados por terceros no autorizados. Algunas clases son contenedores para el administrado CryptoAPI de Microsoft, mientras que otros son administrados implementaciones.

Tema

Descripcin

Servicios de cifrado

Proporciona una visin general de la criptografa en el Marco. NET, se describe cmo se implementa criptografa, y cmo realizar tareas especficas criptogrficas.

Cifrar la informacin de configuracin mediante una configuracin protegida Proteger cadenas de conexin

Describe cmo utilizar la configuracin protegida para cifrar los archivos de configuracin.

Describe cmo cifrar cadenas de conexin almacenadas en los archivos de configuracin mediante una configuracin protegida.

Usar cdigos hash para la integridad de los datos


A diferencia de la criptografa, que permite que los datos a ser cifrados y descifrados, hash de datos es un proceso de un solo sentido. Hashing de datos es til cuando se desea evitar la manipulacin mediante la comprobacin de que los datos no han sido alterados: cadenas de entrada dadas idnticas, algoritmos hash siempre producen idnticos valores de salida cortos que pueden ser fcilmente comparados.

Tema

Descripcin

Asegurar la integridad de los datos mediante cdigos hash

Describe cmo se puede generar y verificar los valores hash.

Creacin de interfaces de usuario seguras


. NET Framework 2.0
Otras versiones Este tema an no ha sido calificado - Valorar este tema Las aplicaciones suelen consistir en muchas partes que deben ser protegidos de las vulnerabilidades que podran resultar en la prdida de datos o de otra manera comprometer el sistema. Creacin de interfaces de usuario seguras pueden prevenir muchos problemas mediante el bloqueo de los atacantes antes de que puedan acceder a datos o recursos del sistema.

Proteger las aplicaciones de Windows


En el pasado, las aplicaciones de Windows en general corri con todos los permisos. El Framework. NET proporciona la infraestructura para restringir la ejecucin de cdigo en una aplicacin de Windows utilizando el cdigo de acceso de seguridad (CAS). Sin embargo, CAS por s sola no es suficiente para proteger su aplicacin. Seguridad de Windows Forms Explica cmo proteger las aplicaciones Windows Forms y proporciona vnculos a temas relacionados. Archivo sea ms seguro y de acceso a datos en formularios Windows Forms Explica cmo acceder a los archivos y datos desde una aplicacin de Windows Forms en un entorno de confianza parcial. Formularios Windows Forms y aplicaciones no administradas Describe la forma de interactuar con las aplicaciones no administradas en una aplicacin de Windows Forms. Implementacin de ClickOnce para aplicaciones de Windows Forms ,

Describe cmo utilizar ClickOnce despliegue de una aplicacin de Windows Forms y se discuten las implicaciones de seguridad.

Proteger aplicaciones ASP.NET


Las aplicaciones ASP.NET generalmente necesario restringir el acceso a ciertas partes del sitio Web y proporcionar otros mecanismos para la proteccin de datos y seguridad del sitio. Estos enlaces proporcionan informacin til para asegurar la aplicacin ASP.NET. ASP.NET Seguridad de sitios Web Explica cmo proteger las aplicaciones ASP.NET. Contiene enlaces a los siguientes temas. ASP.NET Web Application Security Explica cmo funciona la seguridad ASP.NET y abarca el diseo seguro, as como la seguridad en un entorno alojado. Procedimientos de seguridad bsicos para aplicaciones Web Trata sobre seguridad mnima directrices que se aplican a todas las aplicaciones web. Proteccin de servicios Web XML creados con ASP.NET Describe cmo implementar la seguridad en un servicio Web ASP.NET. Mejora de la seguridad de aplicaciones Web MSDN discutir diferentes aspectos de la seguridad de aplicaciones Web. Crear aplicaciones ASP.NET seguras MSDN discutir diferentes aspectos de la seguridad de aplicaciones Web.

Validar la informacin del usuario


Al construir una aplicacin que accede a los datos, se debe asumir que todas las entradas del usuario es daino mientras no se demuestre lo contrario. De lo contrario, puede dejar su aplicacin vulnerable a los ataques. El Framework. NET contiene clases que le ayudarn a cumplir un dominio de valores para los controles de entrada, tales como limitar el nmero de caracteres que se pueden introducir. Ganchos de eventos le permiten escribir procedimientos para verificar la validez de los valores. Los datos de usuario de entrada pueden ser validadas y fuertemente tipado, lo que limita la exposicin de una aplicacin a las explotaciones de inyeccin de script y SQL. Sin embargo, usted no debe suponer que validar la entrada del usuario puede asegurar su aplicacin. Tambin debe garantizar el origen de datos y validar todas las entradas. Para obtener ms informacin, vea los Libros en pantalla de SQL Server o la documentacin del origen de datos. Seguridad y Entrada de usuario Describe cmo controlar errores sutiles y peligrosas que puedan suponer la entrada del usuario. Validar la informacin del usuario en pginas Web ASP.NET Vista general de la entrada del usuario en la validacin de una aplicacin ASP.NET. Controles de validacin ASP.NET Describe cmo utilizar los controles de validacin ASP.NET para verificar la entrada del usuario y, si es necesario, mostrar mensajes al usuario. Tipos de validacin para controles de servidor ASP.NET Muestra los controles de validacin disponibles y proporciona enlaces que describen cmo usarlos. Entrada de usuario en formularios Windows Forms Proporciona enlaces e informacin para la validacin de ratn y teclado en una aplicacin Windows Forms. Validacin de entrada de usuario en formularios Windows Forms Describe cmo validar la entrada del usuario en una aplicacin de Windows Forms. . NET Framework Expresiones regulares Describe cmo utilizar el Regex clase de comprobar la validez de las entradas del usuario. Asignacin de datos de proveedores de tipos de datos a los datos. NET Framework Tipos Describe cmo asignar. NET de datos especficas del proveedor para tipos de datos.

Visual Studio Tools para Office


Microsoft Visual Studio 2005 Tools para Microsoft Office System le permite extender Microsoft Word 2003, Microsoft Excel 2003 y Microsoft Outlook 2003 mediante la creacin de soluciones utilizando Visual C # y Visual Basic. Incorpora las caractersticas de seguridad disponibles en el Marco. NET, con aplicacin restringida adicional de

nivel de dominio poltico que impide que el cdigo se ejecute hasta que se autorice de forma expresa autorizacin. Para obtener ms informacin, vea Seguridad en las soluciones de Office .

Cdigo de Acceso de Seguridad y ADO.NET


. NET Framework 2.0
Otras versiones 3 de cada 13 ha calificado este til - Valorar este tema El Framework. NET ofrece seguridad basada en roles, as como el cdigo de acceso de seguridad (CAS), los cuales se implementan utilizando una infraestructura comn proporcionada por el Common Language Runtime (CLR). En el mundo del cdigo no administrado, la mayora de las aplicaciones se ejecutan con los permisos del usuario o el director. Como resultado de ello, los sistemas informticos pueden daarse y los datos privados comprometida cuando el software malicioso o lleno de errores se ejecuta por un usuario con privilegios elevados. Por el contrario, el cdigo administrado que se ejecuta en el marco. NET incluye la seguridad de acceso a cdigo, que se aplica a codificar solo. Si el cdigo se puede ejecutar o no depende del origen del cdigo u otros aspectos de la identidad del cdigo, no slo la identidad del representado. Esto reduce la probabilidad de que el cdigo administrado puede ser mal utilizada.

Permisos de acceso a cdigo

Cuando se ejecuta el cdigo, se presenta evidencia de que es evaluado por el sistema de seguridad de CLR. Normalmente, esta prueba comprende el origen del cdigo incluyendo URL, sitio, y la zona, y las firmas digitales que garantizan la identidad del conjunto. El CLR permite que el cdigo para realizar slo aquellas operaciones que el cdigo tiene permiso para realizar. El cdigo puede solicitar permisos, pero esas peticiones es un honor basado en la poltica de seguridad establecida por el administrador.

Nota

Cdigo que se ejecuta en el CLR no puede conceder permisos a s mismo. Por ejemplo, el cdigo puede solicitar y conceder menos permisos de una poltica de seguridad permite, pero nunca se le concedern ms permisos. Cuando la concesin de permisos, comience con ningn permiso en absoluto y luego aadir los ms estrechos permisos para la tarea concreta que se realiza. Comenzando con todos los permisos y luego negar los individuales conduce a aplicaciones inseguras que pueden contener agujeros de seguridad no intencionales de conceder ms permisos de los necesarios. Para obtener ms informacin, consulteConfigurar directivas de seguridad y de administracin de directivas de seguridad .
Hay tres tipos de permisos de acceso al cdigo: Permisos de acceso a cdigo se derivan de la CodeAccessPermission clase, que representa el acceso a un recurso protegido o la capacidad de realizar una operacin protegida. Esto incluye los archivos y variables de entorno, as como realizar operaciones tales como el acceso a cdigo no administrado. Los permisos de identidad representan caractersticas que identifican a una asamblea. Los permisos se conceden para un montaje basado en la evidencia, que puede incluir elementos tales como una firma digital o donde el cdigo de origen. Los permisos de identidad tambin se derivan de la CodeAccessPermission clase base. Para obtener ms informacin, vea Permisos de identidad . Permisos de seguridad basados en funciones se basan en si un director tiene una identidad determinada o es

un miembro de una funcin especifica. ElPrincipalPermission clase permite que las comprobaciones de permisos tanto declarativas e imperativas el principal activo. Para obtener ms informacin, vea Seguridad declarativa y Seguridad imperativa . Para determinar si el cdigo est autorizado a acceder a un recurso o realizar una operacin, atraviesa el tiempo de ejecucin del sistema de seguridad de la pila de llamadas, comparando los permisos concedidos a cada llamador con el permiso que se exige. Si alguna persona que llama en la pila de llamadas no tiene el permiso exigido, una SecurityException se lanza y se neg el acceso. Para obtener ms informacin, vea Peticiones de seguridad y optimizaciones de seguridad .

Solicitar permisos
El propsito de los permisos que solicitan es para informar el tiempo de ejecucin que la aplicacin requiere permisos para ejecutar y asegurar que reciba slo los permisos que realmente necesita. Por ejemplo, si su aplicacin necesita escribir datos en el disco local, entonces se requiere FileIOPermission . Si dicha autorizacin no ha sido concedida, la aplicacin no funcionar cuando se intenta escribir en el disco. Sin embargo, si la aplicacin solicita FileIOPermission y el permiso que no ha sido concedida, la aplicacin generar la excepcin al principio y no se cargar. En un escenario en el que la aplicacin slo necesita leer los datos del disco, usted puede solicitar que no se le concedan los permisos de escritura. En caso de un error o un ataque malicioso, el cdigo no puede daar los datos en los que opera. Para obtener ms informacin, vea Solicitar permisos .

Seguridad basada en funciones y CAS


Implementar tanto seguridad basada en roles y CAS mejora general de la seguridad para su aplicacin. Seguridad basada en roles puede basarse en una cuenta de Windows o una identidad personalizada, haciendo que la informacin acerca de la entidad de seguridad a disposicin del subproceso actual. Adems, las aplicaciones se requiere a menudo para proporcionar acceso a datos o recursos basndose en credenciales proporcionadas por el usuario. Tpicamente, tales aplicaciones comprueban la funcin de un usuario y facilitar el acceso a los recursos basados en esos roles. Dependiendo del tipo de aplicacin que estamos construyendo, tambin se debe considerar la aplicacin de permisos basados en roles en el origen de datos. Para obtener ms informacin, consulte "Consideraciones de

seguridad para SQL Server" en los Libros en pantalla de SQL Server, o la documentacin del producto para el origen de datos.

Tema

Descripcin

Seguridad basada en funciones

Trata sobre la seguridad basada y proporciona vnculos a temas adicionales. Describe cmo implementar la poltica basada en la seguridad. Discute el PrincipalPermission objeto.

Configuracin de la seguridad basada en polticas y directores Basados en funciones permisos de seguridad

Asambleas de sujecin
Los enlaces de esta seccin tratan la seguridad de su cdigo y sus asambleas. Fuerte de nombres da una aplicacin o componente una identidad nica que otro software puede utilizar para referirse explcitamente a ella. Fuerte-nombrar los ensamblados les protege contra ser suplantada por una asamblea que contiene cdigo hostil. Tambin se asegura de versiones consistencia entre diferentes versiones de un componente. Debe fuerte de renombre asambleas que se van a implementar en la cach de ensamblados global (GAC).

Tema

Descripcin

Directrices para escribir cdigo seguro Crear y utilizar ensamblados con nombre seguro Retrasar la firma de una Asamblea Herramienta de nombre seguro (Sn.exe) La construccin de Asambleas Seguros

Hace hincapi en la importancia de disear la seguridad en sus aplicaciones desde el principio. Explica cmo firmar un ensamblado y hacer referencia a l en una aplicacin. Discute fuertes de denominacin asambleas donde se protege la clave.

Describe el uso de la herramienta Sn.exe lnea de comandos para ensamblados con nombre. Este artculo de MSDN contiene informacin completa sobre la escritura y la implementacin de cdigo seguro.

Confianza parcial en ADO.NET 2.0


En ADO.NET 2.0, el. NET Framework para SQL Server, el archivo. NET Framework para OLE DB, el. NET Framework para ODBC, y el. NET Framework para Oracle ahora puede ejecutar en todos parcialmente entornos de confianza. En las versiones anteriores del Marco. NET, slo System.Data.SqlClient fue apoyado en menos de las aplicaciones de plena confianza. Como mnimo, una aplicacin de confianza parcial mediante el proveedor de SQL Server debe tener ejecucin y SqlClientPermission permisos.

Propiedades de permisos de atributo para confianza parcial


Para los escenarios de confianza parcial, puede utilizar SqlClientPermissionAttribute miembros a restringir an ms la capacidad disponible para. NET Framework para SQL Server.

Nota

El. NET Framework para SQL Server requiere el permiso de seguridad Plena confianza para abrir una SqlConnection con la depuracin de SQL habilitada en SQL Server 2000. Depuracin de SQL para SQL Server 2005 no utiliza esta clase. Ver SQL Server 2005 Libros en pantalla para obtener ms informacin.
En la tabla siguiente se muestran los disponibles SqlClientPermissionAttribute propiedades y sus descripciones:

Permiso propiedad de atributo

Descripcin

Accin AllowBlankPassword

Obtiene o establece una accin de seguridad. Se hereda de SecurityAttribute . Activa o desactiva el uso de una contrasea en blanco en una cadena de conexin. Los valores vlidos son verdad (para permitir el uso de contraseas en blanco) y falso (para desactivar el uso de contraseas en blanco). Se hereda de DBDataPermissionAttribute . Identifica una cadena de conexin permitida. Varias cadenas de conexin se pueden identificar.
Nota

ConnectionString

No incluya un ID de usuario o contrasea en la cadena de conexin. En esta versin, no se puede cambiar las restricciones de cadena de conexin con la Herramienta de Marco. NET Configuration. Se hereda de DBDataPermissionAttribute . KeyRestrictions Identifica los parmetros de cadena de conexin que estn permitidos o no permitidos. Parmetros de cadena de conexin se identifican en la forma = <nombre <parameter . Parmetros pueden especificar mltiples, delimitado mediante un punto y coma (;).
Nota

Si no se especifica KeyRestrictions , pero establece KeyRestrictionBehavior propiedad a AllowOnly o PreventUsage , sin parmetros de conexin de cadena adicionales estn permitidos. Se hereda de DBDataPermissionAttribute . KeyRestrictionBehavior Identifica los parmetros de cadena de conexin como los nicos parmetros adicionales permitidos ( AllowOnly ), o identifica los parmetros adicionales que no estn permitidos ( PreventUsage ). AllowOnly es el predeterminado. Se hereda deDBDataPermissionAttribute . Obtiene un identificador nico para este atributo cuando se implementa en una clase derivada. Se hereda de atributo .

TypeID

Irrestricto

Indica si el permiso sin restricciones al recurso sea declarado. Se hereda de SecurityAttribute .

ConnectionString Sintaxis
El ejemplo siguiente muestra cmo se utiliza la connectionStrings elemento de un archivo de configuracin para permitir que slo una cadena de conexin especfica a utilizar. Consulte Trabajo con cadenas de conexin para obtener ms informacin sobre el almacenamiento y la recuperacin de las cadenas de conexin de archivos de configuracin.

<connectionStrings> <Nombre add = "DatabaseConnection" connectionString = "Data Source = (local); Inicial Catalog = Northwind; Integrated Security = true; "/> </ ConnectionStrings>

KeyRestrictions Sintaxis

En el ejemplo siguiente se habilita la misma cadena de conexin, permite el uso de la Encrypt y Packet Size opciones de cadena de conexin, pero restringe el uso de accesorios que otra cadena de conexin.

<connectionStrings> <Nombre add = "DatabaseConnection" connectionString = "Data Source = (local); Inicial Catalog = Northwind; Integrated Security = true; " KeyRestrictions = "Encrypt =; Packet Size ="; KeyRestrictionBehavior = "AllowOnly" /> </ ConnectionStrings>

KeyRestrictionBehavior con sintaxis PreventUsage


En el ejemplo siguiente se habilita la misma cadena de conexin y permite que todos los dems parmetros de conexin a excepcin de ID de usuario , contraseay Persist Security Info .

<connectionStrings> <Nombre add = "DatabaseConnection" connectionString = "Data Source = (local); Inicial Catalog = Northwind; Integrated Security = true; " KeyRestrictions = "User ID =; = contrasea; Persist Security Info ="; KeyRestrictionBehavior = "PreventUsage" /> </ ConnectionStrings>

KeyRestrictionBehavior con sintaxis AllowOnly


El siguiente ejemplo permite que dos cadenas de conexin que tambin contienen Initial Catalog , Tiempo de espera de conexin , Encrypt y tamao de paqueteparmetros. Todos los dems parmetros de conexin de cadenas se encuentran restringidas.

<connectionStrings> <Nombre add = "DatabaseConnection" connectionString = "Data Source = (local); Inicial Catalog = Northwind; Integrated Security = true; " KeyRestrictions = "Initial Catalog, Conexin Timeout =; Encrypt =; Packet Size = "; KeyRestrictionBehavior = "AllowOnly" /> <Nombre add = "DatabaseConnection2" connectionString = "Data Source = SQLSERVER2; Inicial Catalog = Northwind2; Integrated Security = true; " KeyRestrictions = "Initial Catalog, Conexin Timeout =; Encrypt =; Packet Size = "; KeyRestrictionBehavior = "AllowOnly" /> </ ConnectionStrings>

Habilitacin de la confianza parcial con un conjunto de permisos personalizado


Para habilitar el uso de System.Data.SqlClient permisos para una zona en particular, un administrador del sistema debe crear un conjunto de permisos personalizado y establecerlo como el conjunto de permisos para una zona particular. Conjuntos de permisos predeterminados, tales como LocalIntranet , no se puede modificar. Por ejemplo, para incluir System.Data.SqlClient permisos de cdigo que tiene una zona de LocalIntranet , un administrador del

sistema puede copiar el conjunto de permisos para LocalIntranet , cambiarle el nombre a "CustomLocalIntranet", agregue las System.Data.SqlClient permisos, importe el CustomLocalIntranet conjunto de permisos mediante el cdigo de acceso de herramientas de seguridad (Caspol.exe) , y establecer el conjunto de permisos deLocalIntranet_Zone a CustomLocalIntranet.

Muestra conjunto de permisos


A continuacin se muestra el permiso establecido para el. NET Framework para SQL Server en un escenario de confianza parcial. Para obtener informacin sobre cmo crear conjuntos de permisos personalizados, vea Configurar conjuntos de permisos mediante Caspol.exe .

<PermissionSet class = "System.Security.NamedPermissionSet" version = "1" Name = "CustomLocalIntranet" Descripcin = "conjunto de permisos personalizado dado a las aplicaciones en la intranet local"> <Class = IPermission "System.Data.SqlClient.SqlClientPermission, System.Data, Version = 2.0.0000.0, Culture = neutral, PublicKeyToken = b77a5c561934e089" version = "1" AllowBlankPassword = "false"> <Aadir ConnectionString = "Data Source = (local); Integrated Security = SSPI"; KeyRestrictions = "Initial Catalog =; = Tiempo de espera de conexin; Encrypt =; Packet Size ="; KeyRestrictionBehavior = "AllowOnly" /> </ IPermission> </ PermissionSet>

Verificacin del acceso del cdigo de ADO.NET mediante permisos de seguridad


Para los escenarios de confianza parcial, puede requerir privilegios de CAS a determinados mtodos en el cdigo mediante la especificacin de unSqlClientPermissionAttribute . Si ese privilegio no permitido por la poltica de seguridad restringida en efecto, se produce una excepcin antes de que el cdigo se ejecute. Para obtener ms informacin sobre la poltica de seguridad, consulte Gestin de Seguridad Comn y Poltica de mejores prcticas de seguridad .

Ejemplo
El siguiente ejemplo muestra cmo escribir cdigo que requiere una cadena de conexin en particular. Simula que niegan permisos sin restricciones aSystem.Data.SqlClient , que un administrador del sistema llevara a cabo mediante una directiva de CAS en el mundo real.

Nota de seguridad

En el diseo de los permisos de seguridad de acceso a cdigo para ADO.NET, el modelo correcto es empezar con el caso ms restrictivo (sin permisos en todos) y luego aadir los permisos especficos que se necesitan para la tarea particular que el cdigo debe realizar. El patrn opuesto, empezando con todos los permisos y despus negar un permiso del sistema, no es segura, porque hay muchas maneras de expresar la misma cadena de conexin. Por ejemplo, si usted comienza con todos los permisos y luego tratar de negar el uso de la cadena de conexin "server = someserver", la cadena "servidor someserver.mycompany.com =" todava estara permitido. Por empezando siempre por la concesin de ningn permiso en absoluto, a reducir las posibilidades de que hay agujeros en el conjunto de permisos.
El cdigo siguiente muestra cmo SqlClient realiza la demanda de seguridad, lo que arroja una SecurityException si los correspondientes permisos CAS no estn en su lugar. El SecurityException salida se muestra en la ventana de la consola.

C# VB

Private Sub TestCAS ( ByVal connectString1 Como cadena , ByVal connectString2 Como cadena ) 'Simular quitar permisos SqlClient. Dim permiso Como Nuevo SqlClientPermission (PermissionState.Unrestricted) permission.Deny () "Trate de abrir una conexin. Probar Usar conexin Como Nuevo SqlConnection (connectString1) Connection.Open () Console.WriteLine ( "Connection abierto, inesperado." ) End Uso Catch ex Como System.Security.SecurityException Console.WriteLine ( "No se pudo, como se esperaba: {0}" , _ ex.FirstPermissionThatFailed) 'Elimine la lnea siguiente para ver detalles de excepcin. " Console.WriteLine ("BaseException: {0}", ex.GetBaseException ()) End Pruebe SqlClientPermission.RevertAll () 'Agregar el permiso para que una cadena de conexin especfica. " Esto generalmente se logra mediante el administrador de implementacin de "una poltica CAS, no en el cdigo. permiso = New SqlClientPermission (PermissionState.None) permission.Add (connectString1, "" , KeyRestrictionBehavior.AllowOnly) permission.PermitOnly () "Intntelo de nuevo, debe tener xito ahora. Intenta Usar conexin como New SqlConnection (connectString1) Connection.Open () Console.WriteLine ( "Conexin abierta, como se esperaba." ) End Uso Catch ex Como System.Security.SecurityException Console.WriteLine ( "Error inesperado: {0}" , ex.Message) End Pruebe -Prueba una cadena de conexin diferente. Esto debera fallar. Intenta Usar conexin como New SqlConnection (connectString2) Connection.Open () Console.WriteLine ( "Connection abierto, inesperado." ) End Uso Catch ex Como System.Security.SecurityException Console.WriteLine ( "No se pudo, como se esperaba: {0}" , ex.Message) End Pruebe End Sub
Usted debe ver esta salida en la ventana de la consola:

No se ha podido, como se esperaba: <class = IPermission "System.Data.SqlClient.

SqlClientPermission, System.Data, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089 "version =" 1 "AllowBlankPassword =" false "> <Aadir ConnectionString = "Data Source = (local); Initial Catalog = Northwind; Integrated Security = SSPI" KeyRestrictions = "" KeyRestrictionBehavior = "AllowOnly" /> </ IPermission> Conexin abierta, como se esperaba. No se ha podido, como se esperaba: Error en la solicitud.

Interoperabilidad con cdigo no administrado


El cdigo que se ejecuta fuera del Common Language Runtime (CLR) se denomina cdigo no administrado. Por lo tanto, los mecanismos de seguridad tales como CAS no se puede aplicar al cdigo no administrado. Componentes COM, interfaces ActiveX y funciones API Win32 son ejemplos de cdigo no administrado.Consideraciones especiales de seguridad se aplican cuando se ejecuta el cdigo no administrado para que no pongan en peligro la seguridad de aplicacin general.

Tema

Descripcin

Interoperar con cdigo no administrado Ensamblados de interoperabilidad primarios Solicitar permisos

Proporciona vnculos a temas adicionales en discusiones interoperabilidad con cdigo no administrado. Describe cmo trabajar con ensamblados de interoperabilidad primarios en una aplicacin. NET.

Describe cmo solicitar permisos, incluyendo cmo solicitar permiso para obtener acceso al cdigo no administrado mediante un SecurityPermissionAttribute .

Trabajar con orgenes de datos protegidos y componentes


. NET Framework 2.0
Otras versiones 0 de 2 puntuado este til - Valorar este tema

Para escribir cdigo ADO.NET seguro, usted tiene que entender los mecanismos de seguridad disponibles en el almacn de datos subyacente o base de datos.Tambin es necesario tener en cuenta las implicaciones de seguridad de otras caractersticas o componentes que la aplicacin pueda contener.

Acceso a bases de datos SQL Server


Las credenciales utilizadas para la autenticacin necesita ser manejado de manera diferente en funcin del tipo de aplicacin. Por ejemplo, en una aplicacin de Windows Forms, el usuario puede que se le pida que proporcione informacin de autenticacin, o credenciales de Windows del usuario se puede utilizar. Sin embargo, una aplicacin Web a menudo accede a los datos utilizando credenciales proporcionadas por la aplicacin en s misma en lugar de por el usuario. Para obtener ms informacin acerca de SQL Server, vea los Libros en pantalla de SQL Server.

Tema Conectar con datos y recuperarlos en ADO.NET Utilizando el. NET Framework para SQL Server Acceso a SQL Server desde una aplicacin Web ASP.NET Web Site Configuration Administracin de la seguridad SQL Server Security Center Consideraciones de seguridad para SQL Server Cmo habilitar conexiones de cifrado para el motor de base de datos Cifrar conexiones a SQL Server Seguridad de la integracin CLR

Descripcin Proporciona informacin y enlaces adicionales para trabajar con los datos, incluyendo la conexin , comando ,DataReader y DataAdapter objetos. El tema tambin se describe cmo obtener informacin de esquema de una base de datos. Describe todos los aspectos del trabajo con el. NET Framework para SQL Server.

Describe las opciones de autenticacin para las aplicaciones ASP.NET.

Trata los problemas generales de configuracin, incluyendo la creacin y configuracin de una base de datos de servicios de aplicacin para SQL Server. MSDN que describe la arquitectura de seguridad de SQL Server y la forma de ponerla en prctica. Tambin est disponible en SQL Server Books Online. Sitio web de TechNet proporciona orientacin y procedimientos para asegurar sus bases de datos de SQL Server. MSDN que describe la seguridad de SQL Server 2005 y proporciona vnculos a temas adicionales. Tambin est disponible en SQL Server Books Online.

MSDN contenido que describe cmo habilitar conexiones cifradas mediante la especificacin de un certificado para el motor de base de datos con SQL Server 2005 Configuration Manager. Tambin est disponible en SQL Server Books Online.

MSDN contenido que describe cmo configurar Secure Sockets Layer (SSL) en Servidor SQL 2005. Tambin est disponible en SQL Server Books Online. MSDN contenido que describe el modelo de seguridad de la integracin de Microsoft SQL Server con el tiempo de ejecucin de lenguaje. NET Framework CLR (Common). Tambin est disponible en SQL Server Books Online.

Acceso a Jet y fuentes de datos de Excel


Microsoft Access y Microsoft Excel puede actuar como almacn de datos de una aplicacin ADO.NET cuando los requisitos de seguridad son mnimas o inexistentes. Sus caractersticas de seguridad son eficaces para la disuasin, pero no debe confiarse en ella para hacer algo ms que desalentar a las intromisiones de los usuarios desinformados. Los archivos de datos fsicos para Access y Excel existen en el sistema de archivos, y debe ser accesible para todos los usuarios. Esto los hace vulnerables a los ataques que podran resultar en el robo o la prdida de datos, ya que los archivos pueden ser fcilmente copiados o alterados. Cuando se requiere una seguridad robusta, utilice SQL Server u otra base de datos basada en servidor donde los archivos de datos fsicos no se pueden leer desde el sistema de archivos. Los temas de Office Online siguientes contienen informacin relevante para garantizar el acceso y las fuentes de datos de Excel.

Recurso Ayude a proteger una base de datos con seguridad a nivel de usuario (MDB) Comprender la funcin de archivos de informacin de grupo de trabajo en seguridad de Access Preguntas frecuentes sobre Microsoft Access Security para Microsoft Access versiones 2.0 hasta el 2000 Ayude a asegurar y proteger los datos en Excel

Descripcin Se aplica a Access. Proporciona instrucciones para implementar la seguridad por usuarios para proteger los datos. Se aplica a Access. Explica el papel y la relacin del archivo de informacin de grupo de trabajo en seguridad de acceso.

Se aplica a Access. Muchas de las respuestas las preguntas de seguridad de acceso.

Se aplica a Excel. Discute caractersticas para mantener los datos seguros en Excel, como la proteccin de contrasea y certificados digitales. Se aplica a Excel. Presenta soluciones a los problemas comunes de seguridad.

Solucin de problemas de seguridad y proteccin

Trabajar con Remoting


. NET remoting permite crear fcilmente aplicaciones ampliamente distribuidas, tanto si los componentes de aplicacin estn todos en un ordenador o difundir por el mundo entero. Puede crear aplicaciones cliente que utilizan los objetos en otros procesos en el mismo equipo o en cualquier otro equipo que sea accesible a travs de su red. Tambin se puede utilizar. NET Remoting para comunicarse con otros dominios de aplicacin en el mismo proceso.

Recurso Configuracin de aplicaciones remotas Seguridad en comunicacin remota

Descripcin Describe cmo configurar aplicaciones remotas con el fin de evitar problemas comunes. Describe autenticacin y encriptacin, as como otros temas de seguridad relacionados con la comunicacin remota.

Consideraciones de seguridad y Remoting

Describe los problemas de seguridad con los objetos protegidos y cruce dominio de aplicacin.

Recuperacin de datos de un servicio Web


Un servicio Web XML proporciona datos que pueden ser consumidos por una aplicacin ASP.NET, una aplicacin de Windows Forms, u otro servicio Web. Es necesario para administrar la seguridad para el servicio Web en s, as como la seguridad de la aplicacin cliente.

Recurso Proteccin de servicios Web XML creados con ASP.NET Acceso a servicios Web XML en cdigo administrado Cmo: Conectarse a los datos de un servicio Web Tutorial: Conectarse a datos en un servicio Web

Descripcin Describe la autenticacin y autorizacin de las opciones disponibles a los servicios web creados con ASP.NET. Describe el proceso de localizar y acceder a los servicios web en cdigo administrado. Describe cmo conectarse a datos devueltos desde un servicio Web.

Explica a travs de la conexin a datos devueltos desde un servicio Web.

Uso de los servicios para empresas


COM + contiene su propio modelo de seguridad que se basa en las cuentas de Windows NT y proceso / hilo suplantacin. El System.EnterpriseServices espacio de nombres proporciona contenedores que permiten. NET para integrar cdigo administrado con COM + servicios de seguridad a travs de la ServicedComponentclase.

Recurso COM + Seguridad basada en funciones y. NET Framework Escribir componentes con servicio

Descripcin Describe cmo integrar cdigo administrado con COM + servicios de seguridad. Explica cmo utilizar las clases en el EnterpriseServices espacio de nombres para crear componentes con servicio.

Interoperar con cdigo no administrado


Trabajar con cdigo no administrado implica ir fuera del permetro de seguridad en el cdigo administrado. Tanto el cdigo y el cdigo que llama debe haber administrado permiso de cdigo ( SecurityPermission con el UnmanagedCode bandera especificado). El cdigo no administrado puede introducir vulnerabilidades de seguridad no deseados en su aplicacin. Por lo tanto, se debe evitar interoperar con cdigo no administrado a menos que sea absolutamente necesario.

Recurso

Descripcin

Cdigo no administrado

Proporciona una visin general de los problemas de seguridad para trabajar con cdigo no administrado. Proporciona informacin general y vnculos a temas adicionales que describen cmo interoperar con cdigo no administrado.

Interoperar con cdigo no administrado

Proteger cadenas de conexin


. NET Framework 2.0
Otras versiones

10 de los 32 ha calificado este til - Valorar este tema La proteccin del acceso a la fuente de datos es una de las metas ms importantes a la hora de proteger una aplicacin. Una cadena de conexin presenta una vulnerabilidad potencial si no est asegurado. Almacenamiento de la informacin de conexin en texto plano o de persistir en la memoria corre el riesgo de poner en peligro todo el sistema. Las cadenas de conexin incluidas en su cdigo fuente se puede leer utilizando el desensamblador de MSIL (Ildasm.exe) para ver lenguaje intermedio de Microsoft (MSIL) en un ensamblado compilado.

Cmo evitar vulnerabilidades de seguridad


Las vulnerabilidades de seguridad relacionados con las cadenas de conexin pueden surgir en funcin del tipo de autenticacin que se utiliza, cmo las cadenas de conexin se conservan en la memoria y en el disco, y las tcnicas utilizadas para su construccin en tiempo de ejecucin.

Utilizar autenticacin de Windows


Para ayudar a limitar el acceso al origen de datos, debe proteger la informacin de conexin como el ID de usuario, la contrasea y el nombre del origen de datos.Con el fin de evitar la exposicin de la informacin del usuario, se recomienda utilizar la autenticacin de Windows (a veces referido como seguridad integrada ) siempre que sea posible. La autenticacin de Windows se especifica en una cadena de conexin utilizando los integrados de seguridad oTrusted_Connection palabras clave, lo que elimina la necesidad de utilizar un ID de usuario y contrasea. Cuando se utiliza la autenticacin de Windows, los usuarios son autenticados por Windows, y el acceso a los recursos del servidor y base de datos se determina mediante la concesin de permisos a usuarios y grupos de Windows. Para situaciones donde no es posible utilizar la autenticacin de Windows, debe utilizar un cuidado especial ya que las credenciales de usuario se exponen en la cadena de conexin. En una aplicacin ASP.NET, puede configurar una cuenta de Windows como una identidad fija que se utiliza para conectarse a bases de datos y otros recursos de red. Para

habilitar la suplantacin en el elemento de identidad en el web.config archivo y especifique un nombre de usuario y contrasea.

<Identity impersonate = "true" userName = "midominio \ UserAccount" password = "*****" />


La cuenta de identidad fija debe ser una cuenta con pocos privilegios que se han otorgado permisos de slo necesarios en la base de datos. Adems, debe cifrar el archivo de configuracin para que el nombre de usuario y la contrasea no se exponen en texto claro.

No utilice UDL
Evite almacenar cadenas de conexin para un OleDbConnection en un vnculo de datos universal (UDL). UDL se almacenan en texto claro y no se pueden cifrar. Un archivo UDL es un archivo externo a base de recursos para su aplicacin, y no se puede asegurar o cifrado con el marco. NET.

Prevenir los ataques de inyeccin de cadena de conexin


Una cadena de conexin ataque de inyeccin puede ocurrir cuando la concatenacin de cadenas dinmico se utiliza para crear cadenas de conexin de base de datos del usuario. Si la entrada del usuario no se valida y texto malicioso o caracteres que no se escap, los atacantes pueden tener acceso a datos confidenciales u otros recursos en el servidor. Para solucionar este problema, ADO.NET 2.0 presenta nuevas clases de generador de cadenas de conexin para validar la sintaxis de cadena de conexin y asegrese de que los parmetros adicionales no se present. Para obtener ms informacin, vea Crear cadenas de conexin .

Utilice la opcin predeterminada de Persist Security Info


El valor predeterminado de Persist Security Info es falsa, le recomendamos que utilice este defecto en todas las cadenas de conexin. Ajuste Persist Security Infode verdad o si permite que la informacin confidencial de seguridad, incluido el ID de usuario y una contrasea, que se obtiene de una conexin despus de que ha sido abierto. Cuando Persist Security Info se establece en falso o no , informacin de seguridad se desecha despus de que se utiliza para abrir la conexin, asegurando que una fuente no confiable no tiene acceso a la informacin confidencial de seguridad.

Almacenar cadenas de conexin en los archivos de configuracin


Tambin puede almacenar cadenas de conexin en archivos de configuracin, lo que elimina la necesidad de insertar en el cdigo de la aplicacin. Los archivos de configuracin son archivos XML estndar para que el Marco. NET ha definido un conjunto comn de elementos. Las cadenas de conexin en archivos de configuracin se almacenan normalmente en el interior de la <connectionStrings> elemento en el app.config para una aplicacin de Windows, o el web.configarchivo para una aplicacin ASP.NET. Para obtener ms informacin sobre los conceptos bsicos de almacenamiento y recuperacin de las cadenas de conexin de los archivos de configuracin, consulte Trabajo con cadenas de conexin .

Cifrar secciones del archivo de configuracin mediante una configuracin protegida


ASP.NET 2.0 proporciona una nueva caracterstica, denominada configuracin protegida , que permite cifrar la informacin confidencial en un archivo de configuracin. Aunque ha sido diseado para ASP.NET, configuracin protegida tambin se puede utilizar para cifrar secciones del archivo de configuracin en las aplicaciones de Windows. Para obtener una descripcin detallada de las funciones de configuracin protegidas nuevas, vea Cifrar informacin de configuracin mediante una configuracin protegida . El fragmento de archivo de configuracin se muestra el connectionStrings seccin despus de que haya sido cifrado. El configProtectionProvider especifica el proveedor de configuracin protegida usada para cifrar y descifrar las cadenas de conexin. El EncryptedData seccin contiene el texto cifrado.

<connectionStrings configProtectionProvider="DataProtectionConfigurationProvider">

<EncryptedData> <CipherData> <CipherValue> AQAAANCMnd8BFdERjHoAwE/Cl + sBAAAAH2 ... </ CipherValue> </ CipherData> </ EncryptedData> </ ConnectionStrings>
Cuando la cadena de conexin cifrada se recupera en tiempo de ejecucin, el Marco. NET utiliza el proveedor especificado para descifrar el CipherValue y ponerla a disposicin de su aplicacin. Usted no tiene que escribir ningn cdigo adicional para gestionar el proceso de descifrado.

Protegidas proveedores de configuracin


Protegidas proveedores de configuracin estn registrados en la configProtectedData seccin del machine.config archivo en el equipo local, como se muestra en el fragmento siguiente, que muestra los dos proveedores de configuracin protegida suministrados con el Marco. NET. Los valores que se muestran aqu se han truncado para facilitar la lectura.

<configProtectedData defaultProvider="RsaProtectedConfigurationProvider"> <providers> <Add name = "RsaProtectedConfigurationProvider" type = "System.Configuration.RsaProtectedConfigurationProvider, ... /> <Add name = "DataProtectionConfigurationProvider" type = "System.Configuration.DpapiProtectedConfigurationProvider, ... /> </ Providers> </ ConfigProtectedData>
Puede configurar ms proveedores de configuracin protegida por su inclusin en el machine.config archivo. Tambin puede crear su propio proveedor de configuracin protegida por la herencia de la ProtectedConfigurationProvider clase base abstracta. En la tabla siguiente se describen los dos archivos de configuracin incluidos en el Marco. NET.

Proveedor

Descripcin

RsaProtectedConfigurationProvider

Utiliza el algoritmo de cifrado RSA para cifrar y descifrar datos. El algoritmo RSA se puede utilizar tanto para el cifrado de clave pblica y firmas digitales. Tambin se conoce como "clave pblica" o el cifrado asimtrico, ya que emplea dos claves diferentes. Puede utilizar la Herramienta Registro de IIS en ASP.NET (Aspnet_regiis.exe) para cifrar secciones de un archivo Web.config y administrar las claves de cifrado. ASP.NET descifra el archivo de configuracin cuando se procesa el archivo. La identidad de la aplicacin ASP.NET debe tener acceso de lectura a la clave de cifrado que se utiliza para cifrar y descifrar las secciones cifradas. Utiliza la API de Windows Data Protection (DPAPI) para cifrar secciones de configuracin. Se utiliza el Windows integrado en los servicios criptogrficos y puede ser configurado tanto especfico del equipo o la proteccin de cuenta de usuario especfica. Especfico del equipo de proteccin es til para varias aplicaciones en el mismo servidor que necesitan compartir informacin. De cuenta de usuario especfica de proteccin se puede utilizar con los servicios que se ejecutan con una identidad de usuario especfico, tal como un entorno de alojamiento compartido. Cada aplicacin se ejecuta bajo una identidad distinta que restringe el acceso a recursos tales como archivos y bases de datos.

DpapiProtectedConfigurationProvide r

Tanto los proveedores de ofrecer una fuerte encriptacin de datos. Sin embargo, si usted est planeando utilizar el mismo archivo de configuracin de cifrado en varios servidores, como un conjunto de servidores Web, slo

el RsaProtectedConfigurationProvider permite exportar las claves de cifrado utilizadas para cifrar los datos e importarlas a otro servidor. Para obtener ms informacin, consulte Importar y exportar configuracin protegida contenedores de claves RSA .

Utilizar las clases Configuration


El System.Configuration espacio de nombres proporciona clases para trabajar con valores de configuracin mediante programacin. El ConfigurationManager clase proporciona acceso a la mquina, aplicaciones y archivos de configuracin de usuario. Si va a crear una aplicacin ASP.NET, puede utilizar elWebConfigurationManager clase, que proporciona la misma funcionalidad a la vez que le permite acceder a los ajustes que son exclusivos de las aplicaciones ASP.NET, como las que se encuentran en <system.web> .

Nota

El System.Security.Cryptography espacio de nombres contiene clases que proporcionan opciones adicionales para cifrar y descifrar datos. Utilice estas clases si requiere servicios de cifrado que no estn disponibles mediante la configuracin protegida. Algunas de estas clases son contenedores para el administrado CryptoAPI de Microsoft, mientras que otros son puramente implementaciones administradas. Para obtener ms informacin, consulte Servicios de cifrado .

Ejemplo App.config
En este ejemplo se muestra cmo cambiar el cifrado de la connectionStrings seccin en un app.config archivo para una aplicacin de Windows. En este ejemplo, el procedimiento toma el nombre de la aplicacin como un argumento, por ejemplo, "MyApplication.exe". El app.config archivo se cifra y se copian en la carpeta que contiene el archivo ejecutable con el nombre de "MyApplication.exe.config".

Nota

La cadena de conexin slo puede ser descifrado en el equipo en el que se cifr.


El cdigo utiliza la OpenExeConfiguration mtodo para abrir el app.config archivo para editarlo, y el GetSection mtodo devuelve el connectionStrings seccin. El cdigo comprueba la IsProtected propiedad, llamando a la ProtectSection para cifrar la seccin si no est encriptada. El UnProtectSection se invoca el mtodo para descifrar la seccin. La Ahorre mtodo se completa la operacin y guarda los cambios.

Nota

Usted debe establecer una referencia a System.Configuration.dll en su proyecto para la ejecucin de cdigo.
C# VB

Shared Sub ToggleConfigEncryption ( ByVal exeConfigName Como cadena ) 'Toma el nombre del archivo ejecutable sin el '. config extensin. Intente 'Abre el archivo de configuracin y recuperar "la seccin connectionStrings. Dim config Como configuracin ConfigurationManager =. _ OpenExeConfiguration (exeConfigName) Dim seccin Como ConnectionStringsSection = DirectCast (_ config.GetSection ( "connectionStrings" ), _ ConnectionStringsSection) Si section.SectionInformation.IsProtected Entonces

'Eliminar el cifrado. section.SectionInformation.UnprotectSection () Otras ventas 'Cifrar la seccin. section.SectionInformation.ProtectSection (_ "DataProtectionConfigurationProvider" ) End Si 'Guardar la configuracin actual. config.Save () Console.WriteLine ( "Protected = {0}" , _ ) section.SectionInformation.IsProtected Catch ex como excepcin Console.WriteLine (ex.Message) Fin Trate End Sub

Ejemplo Web.config
En este ejemplo se utiliza el OpenWebConfiguration mtodo de la WebConfigurationManager . Tenga en cuenta que en este caso se puede proporcionar la ruta relativa al archivo Web.config archivo con una tilde. El cdigo requiere una referencia a la System.Web.Configuration clase. C# VB

Shared Sub ToggleWebEncrypt () 'Abrir el archivo Web.config. Dim config Como configuracin WebConfigurationManager =. _ OpenWebConfiguration ( "~" ) 'Obtener la seccin connectionStrings. Dim seccin Como ConnectionStringsSection = DirectCast (_ config.GetSection ( "connectionStrings" ), _ ConnectionStringsSection) "Cambiar el cifrado. Si section.SectionInformation.IsProtected Entonces section.SectionInformation.UnprotectSection () Ms section.SectionInformation.ProtectSection (_ "DataProtectionConfigurationProvider" ) End Si "Guardar los cambios realizados en el archivo Web.config. config.Save () End Sub
Para obtener ms informacin proteger las aplicaciones ASP.NET, vea ASP.NET Seguridad de sitios Web y ASP.NET 2.0 Prcticas de seguridad de un vistazo en el Centro de desarrolladores de ASP.NET.

Utilizar DataSets en ADO.NET


. NET Framework 2.0
Otras versiones 15 de 31 puntuado este til - Valorar este tema La ADO.NET DataSet es una representacin residente en memoria de datos que proporciona un modelo de programacin relacional coherente independientemente del origen de los datos que contiene. Un DataSet representa un conjunto completo de datos, incluyendo las tablas que contienen, el orden y restringen los datos, as como las relaciones entre las tablas. Hay varias maneras de trabajar con un conjunto de datos , que se puede aplicar independientemente o en combinacin. Usted puede: Crear mediante programacin una DataTable , DataRelation y Constraint dentro de un DataSet y rellenar las

tablas con datos. Llenar el DataSet con tablas de datos de un origen de datos relacional existente utilizando un DataAdapter . Cargar y conservar los DataSet contenidos utilizando XML. Para obtener ms informacin, vea Utilizar XML en

un DataSet . Un establecimiento inflexible de tipos DataSet tambin puede ser transportado utilizando un servicio Web XML. El diseo del conjunto de datos lo hace ideal para el transporte de datos mediante servicios Web XML. Para una visin general de los servicios Web XML, vea XML Web Introduccin a los servicios . Para un ejemplo de consumir un DataSet desde un servicio Web XML, vea Consumir DataSet a partir de un servicio Web XML .

Crear un conjunto de datos


. NET Framework 2.0
Otras versiones 6 de cada 36 ha calificado este til - Valorar este tema Se crea una instancia de un DataSet llamando al DataSet constructor. Opcionalmente, especifique un argumento de nombre. Si no se especifica un nombre para elconjunto de datos , el nombre se ajusta a "NewDataSet". Tambin puede crear un nuevo conjunto de datos basada en otra existente DataSet . El nuevo conjunto de datos puede ser una copia exacta de la existenteDataSet , un clon del DataSet que copia la estructura relacional, o esquema, pero que no contiene ninguno de los datos de la existente DataSet , o un subconjunto del conjunto de datos que incluir nicamente la modificacin las filas de la existente DataSet utilizando el GetChanges mtodo. Para obtener ms informacin, consulte Copia de contenido de DataSet . En el ejemplo de cdigo siguiente se muestra cmo crear una instancia de un DataSet . C# VB

Dim CustomerOrders As DataSet = New DataSet ( "CustomerOrders" )

Adicin de un DataTable a un DataSet


. NET Framework 2.0
Otras versiones 16 de los 51 ha calificado este til - Valorar este tema ADO.NET permite crear DataTable objetos y aadirlos a una ya existente DataSet . Puede configurar informacin de restricciones para un DataTable utilizando losPrimaryKey y Unique propiedades.

Ejemplo
El siguiente ejemplo se crea un DataSet , se agrega un nuevo objeto DataTable al objeto DataSet y, a continuacin, agrega tres DataColumn objetos sobre la mesa.Por ltimo, el cdigo establece una columna como columna de clave primaria. C# VB

Dim CustomerOrders As DataSet = New DataSet ( "CustomerOrders" ) Dim OrdersTable Como DataTable = customerOrders.Tables.Add ( "Orders" ) Dim pkOrderID Como DataColumn = ordersTable.Columns.Add (_ "OrderID" , Tipo. GetType ( "System.Int32" )) ordersTable.Columns.Add ( "OrderQuantity" , Tipo. GetType ( "System.Int32" )) ordersTable.Columns.Add ( "CompanyName" , Tipo. GetType ( "System.String" )) ordersTable.PrimaryKey = New DataColumn () {} pkOrderID

Sensibilidad a maysculas
Dos o ms tablas o relaciones con el mismo nombre, pero con el bastidor diferente, puede existir en un DataSet . En estos casos, las referencias a tablas por su nombre y las relaciones son entre maysculas y minsculas. Por ejemplo, si el DataSet dataSet contiene tablas Tabla1 y Tabla 1 , se hara referencia Tabla1 por su nombre como dataSet.Tables ["Tabla1"] , y tabla1 como dataSet.Tables ["table1"] . Intentando hacer referencia a cualquiera de las tablas como dataSet.Tables ["Tabla1"] generara una excepcin. El comportamiento de maysculas y minsculas no aplica si una sola tabla o relacin tiene un nombre particular. Por ejemplo, si el conjunto de datos tiene sloTabla 1 , se puede hacer referencia a ella utilizando dataSet.Tables ["Tabla1"] .

Nota El CaseSensitive propiedad del DataSet no afecta a este comportamiento. El CaseSensitive propiedad se aplica a los datos en el DataSet y afecta a ordenar, buscar, filtrar, aplicar restricciones, y as sucesivamente.

Espacio de nombres Support


En versiones anteriores de ADO.NET, dos tablas no podan tener el mismo nombre, incluso si estuvieran en diferentes espacios de nombres. Esta limitacin se ha quitado en ADO.NET 2.0. Un conjunto de datos puede contener dos tablas que tienen el mismo TableName valor de la propiedad, pero diferentes espacios de nombres valores de propiedad.

Agregar una relacin entre tablas


. NET Framework 2.0
Otras versiones 5 de 18 ha calificado este til - Valorar este tema En un DataSet con varias DataTable objetos, puede utilizar DataRelation para relacionar objetos de una mesa a otra, para navegar por las tablas, ya regresar nio o filas primarias de una tabla relacionada. Los argumentos necesarios para crear un DataRelation son un nombre para la DataRelation est creando, y un conjunto de uno o ms DataColumn referencias a las columnas que sirven de columnas primarias y secundarias en la relacin. Despus de haber creado una DataRelation , se puede utilizar para navegar entre las tablas y recuperar valores. Adicin de un DataRelation a un conjunto de datos , aade, por defecto, una UniqueConstraint a la tabla primaria y una ForeignKeyConstraint a la tabla secundaria. Para obtener ms informacin acerca de estas restricciones predeterminadas, vea Agregar restricciones a una tabla . En el ejemplo de cdigo siguiente se crea una DataRelation utilizando dos DataTable objetos en un conjunto de datos . Cada DataTable contiene una columna denominada CustID , que sirve de enlace entre las dos DataTable objetos. El ejemplo agrega una nica DataRelation a la relaciones de la coleccin DataSet . El primer argumento en el ejemplo especifica el nombre de la DataRelation se est creando. El segundo argumento establece el elemento primario DataColumn y el tercer argumento establece que el nio DataColumn . C# VB

customerOrders.Relations.Add ( "CustOrders" , _ customerOrders.Tables ( "Clientes" ). Las columnas ( "CustID" ), _ customerOrders.Tables ( "Orders" ). Las columnas ( "CustID" ))
Un DataRelation tambin tiene un Nested propiedad que, cuando se establece en verdadero , hace que las filas de la tabla secundaria que se anidaron dentro de la fila asociada de la tabla primaria cuando se escribe como elementos XML mediante WriteXml . Para obtener ms informacin, vea Utilizar XML en un DataSet .

Explorar una relacin entre tablas


. NET Framework 2.0
Otras versiones 17 de los 23 ha calificado este til - Valorar este tema Una de las principales funciones de una DataRelation es permitir la navegacin de un DataTable a otra dentro de un DataSet . Esto le permite recuperar todos los relacionados DataRow objetos en un DataTable cuando se administra una sola DataRow de un relacionada DataTable . Por ejemplo, despus de establecer unaDataRelation entre una tabla de clientes y una tabla de pedidos, se puede recuperar todas las filas de pedido para un cliente en particular mediante filaGetChildRows . En el ejemplo de cdigo siguiente se crea una DataRelation entre las clientes y la tabla Orders mesa de un conjunto de datos y devuelve todos los pedidos de cada cliente. C# VB

Dim customerOrdersRelation Como DataRelation = _ customerOrders.Relations.Add ( "CustOrders" , _ customerOrders.Tables ( "Clientes" ). Las columnas ( "IdCliente" ), _ customerOrders.Tables ( "Orders" ). Las columnas ( "IdCliente" )) Dim custRow, orderRow Como DataRow Para Cada custRow En customerOrders.Tables ( "Clientes" ). Filas Console.WriteLine ( "Nombre de Usuario:" y custRow ( "IdCliente" ). ToString ()) Para cada orderRow En custRow.GetChildRows (customerOrdersRelation) Console.WriteLine (orderRow ( "OrderID" ). ToString ()) Siguiente Siguiente
El ejemplo siguiente se basa en el ejemplo anterior, en relacin cuatro tablas y navegar esas relaciones. Al igual que en el ejemplo anterior, CustomerID relaciona elClientes tabla a la rdenes mesa. Para cada cliente en el Clientes mesa, todas las filas secundarias en el Reglamento tabla se determinan, para devolver el nmero de pedidos de un cliente en particular tiene y sus OrderID valores. El ejemplo ms amplia tambin devuelve los valores de los OrderDetails y Productos tablas. El rdenes tabla est relacionada con la OrderDetails tabla utilizandoOrderID para determinar, por cada pedido del cliente, qu productos y cantidades se orden. Debido a que el OrderDetails tabla slo contiene el ProductID de un producto solicitado, OrderDetails est relacionada con los productos que utilizan ProductID con el fin de devolver el ProductName . En esta relacin, losproductos tabla es el padre y la Orden detalles tabla es el nio. Como

resultado, cuando se repite a travs de la OrderDetails tabla, GetParentRow se llama para recuperar la relacionada ProductName valor. Tenga en cuenta que cuando el DataRelation se crea para los clientes y los pedidos tablas, no se especifica un valor para el createConstraints bandera (el valor predeterminado es verdadero ). Esto supone que todas las filas de la rdenes tabla tienen un CustomerID valor que existe en la matriz Clientes mesa. Si unCustomerID existe en el Reglamento tabla que no existe en el Clientes mesa, un ForeignKeyConstraint produce una excepcin que se produce. Cuando la columna puede contener valores nio que la columna principal no contienen, establezca la createConstraints bandera a false cuando se aade elDataRelation . En el ejemplo, el createConstraints indicador se establece en false para la DataRelation entre las rdenes de mesa y el OrderDetails mesa. Esto permite a la aplicacin para devolver todos los registros de la OrderDetails mesa y slo un subconjunto de los registros de la rdenes tabla sin generar una excepcin de tiempo de ejecucin. La muestra se expandi genera una salida en el siguiente formato.

Nombre de Usuario: NORTS ID del pedido: 10517 Fecha de pedido: 24/4/1997 12:00:00 AM Producto: Filo Mix Cantidad: 6 Producto: Raclette Courdavault Cantidad: 4 Producto: Lager Outback Cantidad: 6 Order ID: 11057 Fecha de pedido: 29/4/1998 12:00:00 AM Producto: Lager Outback Cantidad: 3
En el ejemplo de cdigo siguiente es una muestra ampliada, donde los valores de las OrderDetails y Productos tablas se volvi, con slo un subconjunto de los registros de la rdenes tabla que se devuelve. C# VB

Dim customerOrdersRelation Como DataRelation = _ customerOrders.Relations.Add ( "CustOrders" , _ customerOrders.Tables ( "Clientes" ). Las columnas ( "IdCliente" ), _ customerOrders.Tables ( "Orders" ). Las columnas ( "IdCliente" )) Dim orderDetailRelation Como DataRelation = _ customerOrders.Relations.Add ( "OrderDetail" , _ customerOrders.Tables ( "Orders" ). Las columnas ( "OrderID" ), _ customerOrders.Tables ( "OrderDetails" ). Las columnas ( "OrderID" ), False ) Dim orderProductRelation Como DataRelation = _ customerOrders.Relations.Add ( "OrderProducts" , _ customerOrders.Tables ( "Productos" ). Las columnas ( "ProductID" ), _ customerOrders.Tables ( "OrderDetails" ). Las columnas ( "ProductID" )) Dim custRow, orderRow, detailRow Como DataRow Para Cada custRow En customerOrders.Tables ( "Clientes" ). Filas Console.WriteLine ( "Nombre de Usuario:" y custRow ( "IdCliente" ). ToString ()) Para cada orderRow En custRow.GetChildRows (customerOrdersRelation) Console.WriteLine ( "Order ID:" y orderRow ( "OrderID" .) ToString ()) Console.WriteLine (vbTab y "Fecha de la Orden:" & _ orderRow ( "OrderDate" ). ToString ()) Para cada detailRow En orderRow.GetChildRows (orderDetailRelation)

Console.WriteLine (vbTab y "Producto:" & _ detailRow.GetParentRow (orderProductRelation) _ ( "ProductName" ). ToString ()) Console.WriteLine (vbTab y "Cantidad:" & _ detailRow ( "Cantidad" ). ToString ()) Siguiente Siguiente Siguiente

Utilizar DataSet con datos existentes


. NET Framework 2.0
Otras versiones 3 de 8 puntuado este til - Valorar este tema El DataSet es una representacin en memoria relacional de datos que es independiente de cualquier fuente de datos. Sin embargo, el conjunto de datos se puede utilizar en conjuncin con los datos existentes en una fuente de datos cuando se utiliza con un. proveedor de datos. A. NET Framework utiliza un DataAdapter para rellenar el DataSet con datos e informacin de esquema, as como para resolver los cambios en los datos en el origen de datos. Consulte los temas siguientes para obtener ms informacin sobre cmo cargar un DataSet y resolver los cambios en el origen de datos: Llenar un DataSet desde un DataAdapter . En este tema se describe cmo cargar un conjunto de datos con

datos de un origen de datos. Actualizar orgenes de datos con DataAdapters . En este tema se describe cmo resolver los cambios en los datos de un DataSet en el origen de datos. Agregar restricciones existentes a un DataSet . Este tema describe cmo llenar un DataSet con informacin de clave principal de una fuente de datos. Utilizar parmetros con DataAdapter y Uso de procedimientos almacenados para actualizar datos . Estos temas

se describe cmo asociar las columnas de las tablas de un DataSet a parmetros de entrada y de salida de los comandos ejecutados en un origen de datos. El DataSet tambin puede leer y escribir datos XML existentes. Para obtener ms informacin, vea Utilizar XML en un DataSet .

Combinar contenido de DataSet


. NET Framework 2.0
Otras versiones 13 de los 19 ha calificado este til - Valorar este tema Usted puede utilizar el Merge mtodo para combinar el contenido de un DataSet , DataTable o DataRow matriz en una ya existente DataSet . Varios factores y opciones afectar la cantidad de datos nuevos se combina en una ya existente DataSet , incluyendo claves primarias, nombres de tabla y espacios de nombres,preserveChanges , MissingSchemaAction y restricciones.

Claves Primarias
Si la tabla de recibir nuevos datos y el esquema de una mezcla tiene una clave principal, las nuevas filas de los datos de entrada se corresponden con las filas existentes que tienen los mismos originales de valores de clave principal como las de los datos entrantes. Si las columnas del esquema entrante coinciden con los del esquema existente, los datos de las filas existente es modificada. Las columnas que no coinciden con el esquema existentes son ignorados o aadido basado en la MissingSchemaAction parmetro. Las nuevas filas con valores de clave principal que no coincidan con las filas existentes se agregarn a la tabla existente. Si las filas entrantes o existentes tienen un estado de fila aadida , sus valores de clave principal se corresponden con el actual valor de clave principal de la Alta fila porque no original versin de fila existe. Si una tabla entrante y una tabla existente contiene una columna con el mismo nombre pero con diferentes tipos de datos, se produce una excepcin y elMergeFailed caso de que el conjunto de datos se levanta. Si una tabla entrante y una tabla existente que ambos han definido teclas, pero las claves primarias son para las columnas diferentes, se produce una excepcin y el MergeFailed caso de que el conjunto de datos se levanta. Si la tabla de recibir nuevos datos a partir de una mezcla no tiene una clave principal, las nuevas filas de los datos de entrada no puede ser igualada a las filas existentes en la tabla y en cambio se agregarn a la tabla existente.

Nombres de tabla y espacios de nombres


DataTable objetos opcionalmente se le puede asignar un espacio de nombres valor de la propiedad. Cuando espacios de nombres se asignan valores, un conjunto de datos puede contener varias DataTable objetos con el mismo TableName valor. Durante las operaciones de fusin, tanto TableName y espacio de nombres se utilizan para identificar el destino de una combinacin. Si no hay ningn espacio de nombres se ha asignado, slo el TableName se utiliza para identificar el destino de una combinacin.

Nota Este comportamiento ha cambiado en la versin 2.0 del Marco. NET. En la versin 1.1, los espacios de nombres con el apoyo, pero fueron ignorados durante las operaciones de fusin. Por esta razn, un conjunto de datos que utiliza espacios de nombres valores de las propiedades tendrn diferentes comportamientos dependiendo de la versin del Marco. NET que est ejecutando. Por ejemplo, supongamos que tiene dos conjuntos de datos que contienen tablas de datos con los mismos TableName valores de la propiedad, pero diferentes espacios de nombres valores de propiedad. En la versin 1.1 del Marco. NET, los diferentesespacios de nombres nombres se ignorarn cuando la fusin de las dos DataSet objetos. Sin embargo, en la versin 2.0 del Marco. NET, provoca la fusin de dos nuevas tablas de datos que se crear en el objetivo conjunto de datos . Los originales tablas de datos no se vern afectados por la fusin.

PreserveChanges

Cuando se pasa un DataSet , DataTable o DataRow matriz al Merge mtodo, puede incluir parmetros opcionales que especifican si se conservarn o no cambios en el actual conjunto de datos y cmo manejar los nuevos elementos de esquema que se encuentran en los datos entrantes. El primero de estos parmetros despus de que los datos de entrada es un indicador booleano, PreserveChanges , que especifica si o no a conservar los cambios en la existente DataSet . Si elPreserveChanges indicador se establece en verdadero , los valores entrantes no sobrescriben los valores existentes en la actual versin de la fila de la fila existente.Si el PreserveChanges indicador se establece en falsos valores entrantes sobrescriben los valores existentes en la actual versin de la fila de la fila existente. Si elPreserveChanges bandera no se especifica, se establece en false de forma predeterminada. Para obtener ms informacin acerca de las versiones de fila, veaEstados de fila y versiones de fila . Cuando PreserveChanges es cierto , los datos de la fila existente se mantiene en la actual versin de la fila de la fila existente, aunque los datos de la originalversin de la fila de la fila existente se sobrescribe con los datos de la original versin de la fila de la fila de entrada. El RowState de la fila existente se establece enModified . Aplican las siguientes excepciones: Si la fila existente tiene un RowState de Deleted , el RowState sigue siendo eliminados y no se establece en Modified . Los datos de la fila entrante se guardarn en la original versin de la fila de la fila existente, sobrescribiendo el original versin de la fila de la fila existente (a menos que la fila entrante tiene un RowState de Alta ). Si la fila entrante tiene un RowState de Added , los datos de la original versin de la fila de la fila existente

no se sobrescribirn con los datos de la fila de entrada, ya que la fila de entrada no tiene una original versin de fila. Cuando PreserveChanges es falso , tanto los actuales y originales versiones de fila de la fila existente se sobrescribe con los datos de la fila de entrada, y elRowState de la fila existente se establece en el RowState de la fila de entrada. Aplican las siguientes excepciones: Si la fila entrante tiene un RowState de Sin cambios y la fila existente tiene

un RowState de Modified , Deleted o Alta , el RowState de la fila existente se establece en Modified . Si la fila entrante tiene un RowState de Alta y la fila existente tiene un RowState de Sin cambios , modificado o suprimido , el RowState de la fila existente se establece en Modified . Adems, los datos de la original versin de la fila de la fila existente no se sobrescribe con los datos de la fila de entrada porque la fila de entrada no tiene una original versin de fila.

MissingSchemaAction
Usted puede utilizar el opcional MissingSchemaAction parmetro de la fusin mtodo para especificar el modo de mezcla se encargar de los elementos del esquema de los datos entrantes que no forman parte del actual conjunto de datos . La siguiente tabla describe las opciones para MissingSchemaAction .

MissingSchemaAction opcin Aadir

Descripcin

Aadir la nueva informacin de esquema para el conjunto de datos y poblar las nuevas columnas con los valores entrantes. Este es el valor predeterminado. Aadir el nuevo esquema y la informacin clave principal a la DataSet y rellenar las nuevas columnas con los valores entrantes. Lanza una excepcin si la informacin de esquema coincidente se encuentra. No haga caso de la nueva informacin de esquema.

AddWithKey

Error Pasar por alto

Limitaciones

Con la fusin mtodo, las restricciones no se comprueban hasta que todos los datos se ha aadido a la ya existente DataSet . Una vez que los datos han sido aadidas, las restricciones se aplican a los valores actuales en el conjunto de datos . Debe asegurarse de que el cdigo controla las excepciones que puedan ser arrojados por violacines de restriccin. Considere un caso en el que una fila existente en un conjunto de datos es una inalterado fila con un valor de clave principal de 1. Durante una operacin de combinacin con una modificacin fila de entrada con un original valor de clave principal de 2 y un actual valor de clave principal de 1, la fila actual y la fila de entrada no se consideran coincidentes debido a que los originales valores de clave principal diferente. Sin embargo, cuando se completa la combinacin y las restricciones se comprueban, una excepcin ser lanzada debido a que los actuales valores de clave principal violar la restriccin de unicidad para la columna de clave principal.

Nota Cuando se insertan registros en una tabla de base de datos que contiene una columna de incremento automtico, como una columna de identidad, el valor de columna de identidad devuelto por el inserto no coincida con el valor en el conjunto de datos , haciendo que las filas devueltas para ser aadido en lugar de fusionarse. Para obtener ms informacin, vea Recuperar valores de identidad o Autonumrico .
En el ejemplo de cdigo siguiente combina dos DataSet con esquemas diferentes objetos en un conjunto de datos con los esquemas combinados de los dos entrantes DataSet objetos. C# VB

Con conexin Como SqlConnection = New SqlConnection (_ connectionString) Dim adaptador Como SqlDataAdapter = New SqlDataAdapter (_ "SELECT IdCliente, NombreCompaa FROM Clientes" , conexin) Connection.Open () Dim clientes As DataSet = New DataSet () adapter.FillSchema (clientes, SchemaType.Source, "Clientes" ) adapter.Fill (clientes, "Clientes" ) Dim rdenes As DataSet = New DataSet () orders.ReadXml ( "orders.xml" , XmlReadMode.ReadSchema) orders.AcceptChanges () customers.Merge (pedidos, verdaderos , MissingSchemaAction.AddWithKey) End Uso
En el ejemplo de cdigo siguiente se toma una ya existente DataSet con actualizaciones y pasa los cambios a un DataAdapter para ser procesados en la fuente de datos. Los resultados se fusionaron en el original conjunto de datos . Despus de rechazar los cambios que resultaron en un error, los cambios fusionados estn comprometidos con AcceptChanges . C# VB

Dim clientes As DataTable = dataSet.Tables ( "Clientes" ) "Hacer modificaciones a la tabla Clientes. "Obtener cambios en el DataSet. Dim dataSetChanges As DataSet = DataSet.GetChanges () "Agregar un controlador de eventos para controlar los errores durante la actualizacin. AddHandler adapter.RowUpdated, Nueva SqlRowUpdatedEventHandler (_

AddressOf OnRowUpdated) Connection.Open () adapter.Update (dataSetChanges, "Clientes" ) Connection.close () 'Combinar las actualizaciones. DataSet.Merge (dataSetChanges, verdadero , MissingSchemaAction.Add) "Rechazar los cambios en las filas con errores y borrar el error. Dim errRows () As DataRow = dataSet.Tables ( "Clientes" ). GetErrors () Dim errRow Como DataRow Para Cada errRow En errRows errRow.RejectChanges () errRow.RowError = Nada Siguiente 'Confirmar los cambios. dataSet.AcceptChanges ()

C# VB

Private Sub OnRowUpdated (_ ByVal remitente como objeto , ByVal args Como SqlRowUpdatedEventArgs) Si args.Status = UpdateStatus.ErrorsOccurred Entonces args.Row.RowError = args.Errors.Message args.Status = UpdateStatus.SkipCurrentRow Fin Si Fin Sub

Copiar contenido de DataSet


. NET Framework 2.0
Otras versiones 6 de cada 11 ha calificado este til - Valorar este tema Puede crear una copia de un conjunto de datos para que pueda trabajar con datos sin afectar los datos originales, o trabajar con un subconjunto de los datos de unDataSet . Cuando se copia un conjunto de datos , puede: Crear una copia exacta del conjunto de datos , incluyendo el esquema, datos, informacin de estado de fila y

versiones de fila. Crear un conjunto de datos que contiene el esquema de una ya existente DataSet , pero slo las filas que se han modificado. Usted puede devolver todas las filas que se han modificado, o especificar un determinado DataRowState . Para obtener ms informacin sobre los estados de fila, vea Estados de fila y versiones de fila . Copie el esquema o estructura relacional del DataSet solo, sin copiar ninguna fila. Las filas se pueden importar

a una ya existente DataTable utilizandoImportRow . Para crear una copia exacta del DataSet que incluye tanto el esquema y los datos, utilice la Copia mtodo del DataSet . En el ejemplo de cdigo siguiente se muestra cmo crear una copia exacta del DataSet . C# VB

Dim copyDataSet Como DataSet = customerDataSet.Copy ()

Para crear una copia de un conjunto de datos que incluye el esquema y slo los datos que representan aadido , modificado o suprimido filas, utilice elGetChanges mtodo del DataSet . Tambin puede utilizar GetChanges para volver slo las filas con un estado de fila especificado pasando un DataRowState valor al llamar a GetChanges . En el ejemplo de cdigo siguiente se muestra cmo pasar una DataRowState al llamar a GetChanges . C# VB

'Copiar todos los cambios. Dim changeDataSet Como DataSet = customerDataSet.GetChanges () 'Copiar slo las filas nuevas. Dim addedDataSetAs DataSet = _ customerDataSet.GetChanges (DataRowState.Added)
Para crear una copia de un DataSet que slo incluye esquema, utilice el Clone mtodo del DataSet . Tambin puede agregar filas existentes al clonado DataSetutilizando el ImportRow mtodo de la DataTable . ImportRow aade datos, estatales fila, y la informacin de versin de fila a la tabla especificada. Los valores de columna se aaden nicamente cuando coincide el nombre de columna y el tipo de datos es compatible. En el ejemplo de cdigo siguiente se crea un clon de un conjunto de datos y luego agrega las filas de la original DataSet al Clientes en la tabla DataSet clon para los clientes donde el CountryRegion columna tiene el valor "Alemania". C# VB

Dim germanyCustomers As DataSet = customerDataSet.Clone () Dim copyRows () As DataRow = _ customerDataSet.Tables ( "Clientes" ). Seleccione ( "CountryRegion = 'Alemania'" ) Dim customerTable Como DataTable = germanyCustomers.Tables ( "Customers" ) Dim copyRow Como DataRow Para cada copyRow En copyRows customerTable.ImportRow (copyRow) Prximo

Trabajar con eventos DataSet


. NET Framework 2.0
Otras versiones 2 de 2 puntuado este til - Valorar este tema El DataSet objeto proporciona tres eventos: Dispuestas , ya iniciada, y MergeFailed .

El Evento MergeFailed
El evento ms comnmente usado del DataSet objeto se MergeFailed , que se produce cuando el esquema de los DataSet objetos que se fusionan estn en conflicto. Esto ocurre cuando un origen y de destino DataRow tienen el mismo valor de clave principal y la EnforceConstraints propiedad se establece en true. Por ejemplo, si las columnas de clave principal de una tabla que se fusionan diferentes entre las tablas en los dos DataSet objetos, se produce una

excepcin y elMergeFailed evento se levanta. El MergeFailedEventArgs pasa al MergeFailed evento tienen un conflicto de propiedad que identifica el conflicto de esquema entre los dos DataSet objetos, y un cuadro de propiedad que identifica el nombre de la tabla en conflicto. El fragmento de cdigo siguiente se muestra cmo agregar un controlador de eventos para el MergeFailed evento. C# VB

AddHandler workDS.MergeFailed, Nueva MergeFailedEventHandler (_ AddressOf DataSetMergeFailed) Private Shared Sub DataSetMergeFailed (_ remitente como objeto , args Como MergeFailedEventArgs) Console.WriteLine ( "Merge no para la tabla" y args.Table.TableName) Console.WriteLine ( "Conflicto =" y args.Conflict) End Sub

El evento Initialized
El inicializado evento se produce despus de que el conjunto de datos constructor inicializa una nueva instancia de la DataSet . El IsInitialized mtodo devuelve verdadero si el conjunto de datos se ha completado la inicializacin, de lo contrario, devuelve falso . El BeginInit mtodo, que comienza la inicializacin de un conjunto de datos , lo establece en false . El EndInit mtodo, que pone fin a la inicializacin del conjunto de datos , se establece averdadero . Estos mtodos son utilizados por el Visual Studio. NET entorno de diseo para inicializar un conjunto de datos que est siendo utilizado por otro componente. No comnmente los utilizar en el cdigo.

El evento Disposed
DataSet se deriva de la MarshalByValueComponent clase, que expone tanto el Dispose mtodo y el Dispuesta evento. El Dispuesta eventos agrega un controlador de eventos para escuchar el evento Disposed en el componente. Usted puede utilizar el Disposed caso de un conjunto de datos si desea ejecutar cdigo cuando elDispose mtodo se llama. Deseche Libera los recursos utilizados por el MarshalByValueComponent .

Nota El DataSet y DataTable heredan de objetos MarshalByValueComponent y apoyar la ISerializable interfaz para comunicacin remota. Estos son los nicos objetos de ADO.NET que puede controlarse a distancia. Para obtener ms informacin, consulte . NET Remoting .
Para obtener informacin sobre otros eventos disponibles cuando se trabaja con un conjunto de datos , vea Trabajar con eventos DataTable y Trabajar con eventos DataAdapter .

Trabajar con DataSet con tipo


. NET Framework 2.0

Otras versiones 2 de cada 20 ha calificado este til - Valorar este tema Junto con el acceso a los valores finales de la envolvente a travs de variables de tipos dbiles, el conjunto de datos proporciona acceso a los datos a travs de una metfora inflexible de tipos. Las tablas y las columnas que forman parte del conjunto de datos se puede acceder usando nombres fciles de usar y variables inflexible de tipos. Un escrito DataSet es una clase que se deriva de un conjunto de datos . Como tal, hereda todos los mtodos, eventos y propiedades de un conjunto de datos .Adems, un escrito conjunto de datos proporciona mtodos inflexible de tipos, eventos y propiedades. Esto significa que puede acceder a tablas y columnas por nombre, en lugar de utilizar mtodos inspirados en los fondos. Aparte de la mejora de la legibilidad del cdigo, un escrito conjunto de datos tambin permite que el Visual Studio. NET editor de cdigo para completar automticamente las lneas a medida que escribe. Adems, el establecimiento inflexible de tipos DataSet proporciona acceso a los valores como el tipo correcto en tiempo de compilacin. Con una inflexible de tipos DataSet , los errores de discordancia de tipo son capturados cuando se compila el cdigo en lugar de en tiempo de ejecucin.

Generar un DataSet con establecimiento inflexible de tipos


. NET Framework 2.0
Otras versiones 3 de cada 23 ha calificado este til - Valorar este tema

Dado un esquema XML que se ajusta al esquema del lenguaje de definicin XML (XSD) estndar, se puede generar una inflexible de tipos DataSet utilizando la herramienta Xsd.exe proporciona con el SDK de Framework. NET. El siguiente cdigo muestra la sintaxis para generar un conjunto de datos con esta herramienta.

xsd.exe / d / l: CS XSDSchemaFileName.xsd / n: XSDSchema.Namespace


En esta sintaxis, la / d directiva indica a la herramienta para generar un conjunto de datos , y la l /: indica a la herramienta el idioma a utilizar (por ejemplo, C # o Visual Basic NET.). El facultativo / n: directiva indica a la herramienta para generar tambin un espacio de nombres para el conjunto de datos llamadoXSDSchema.Namespace . La salida del comando es XSDSchemaFileName.cs, que puede ser compilado y usado en una aplicacin de ADO.NET. El cdigo generado puede ser compilado como una biblioteca o un mdulo. El siguiente cdigo muestra la sintaxis para compilar el cdigo generado como una biblioteca utilizando el compilador de C # (csc.exe).

csc.exe / t: library XSDSchemaFileName.cs / r: System.dll / r: System.Data.dll


El / t: directiva indica a la herramienta para compilar en una biblioteca, y la / r: directivas especificar bibliotecas dependientes necesarios para compilar. La salida del comando es XSDSchemaFileName.dll, que se puede pasar al compilador al compilar una aplicacin ADO.NET con la / r: Directiva. El siguiente cdigo muestra la sintaxis para acceder al espacio de nombres pasan a Xsd.exe en una aplicacin ADO.NET. C# VB

Las importaciones XSDSchema. Espacio de nombres


En el ejemplo de cdigo siguiente se utiliza un escrito DataSet denominado CustomerDataSet para cargar una lista de clientes de la Northwind base de datos. Una vez que los datos se cargan mediante el relleno mtodo, el ejemplo recorre cada cliente en el Clientes tabla con el escrito CustomersRow ( DataRow ) objeto. Esto proporciona acceso directo a la CustomerID columna, en lugar de a travs de la DataColumnCollection . C# VB

Dim clientes como CustomerDataSet = New CustomerDataSet () Dim adaptador Como SqlDataAdapter New SqlDataAdapter (_ "SELECT * FROM dbo.Customers:" , _ "Data Source = (local); Integrada" & _ "Security = SSPI; Initial Catalog = Northwind" ) adapter.Fill (clientes, "Clientes" ) Dim customerRow Como CustomerDataSet.CustomersRow Para Cada customerRow En customers.Customers Console.WriteLine (customerRow.CustomerID) Prximo
A continuacin se presenta el esquema XML utilizado para el ejemplo.

<? Xml version = "1.0" encoding = "UTF-8"> <xs:schema id="CustomerDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> <xs:element name="CustomerDataSet" msdata:IsDataSet="true"> <xs:complexType> <xs:choice maxOccurs="unbounded"> name="Customers"> <xs:element <xs:complexType> <xs:sequence> <xs:element name="CustomerID" type="xs:string" minOccurs="0" /> </ Xs: sequence> </ Xs: complexType>

</ Xs: element> </ Xs: choice> </ Xs: complexType> </ Xs: element> </ Xs: schema>

Utilizar anotaciones con un DataSet con tipo


. NET Framework 2.0
Otras versiones 4 de 6 puntuado este til - Valorar este tema Las anotaciones permiten modificar los nombres de los elementos en su escrito conjunto de datos sin modificar el esquema subyacente. Modificacin de los nombres de los elementos en el esquema subyacente hara que el escrito DataSet para referirse a objetos que no existen en el origen de datos, as como perder una referencia a los objetos que existen en el origen de datos. Usando anotaciones, puede personalizar los nombres de los objetos en su escrito conjunto de datos con los nombres ms significativos, por lo que el cdigo sea ms legible y su escrito conjunto de datos ms fcil para los clientes a utilizar, dejando esquema subyacente intacto. Por ejemplo, el elemento de esquema siguiente para el clientes de la tabla Northwind base de datos se traducira en una DataRow nombre del objeto de CustomersRow y una DataRowCollectionnombrado clientes .

name="Customers"> <xs:element <xs:complexType> <xs:sequence> <xs:element name="CustomerID" type="xs:string" minOccurs="0" /> </ Xs: sequence> </ Xs: complexType> </ Xs: element>
A DataRowCollection nombre de clientes es significativo en el cdigo de cliente, pero un DataRow nombre de CustomersRow es engaosa, ya que es un nico objeto. Adems, en situaciones comunes, el objeto se refiere sin Row identificador y en su lugar se refiere simplemente como un cliente objeto. La solucin consiste en anotar el esquema e identificar nuevos nombres para el DataRow y DataRowCollection objetos. Lo que sigue es la versin anotada del esquema anterior.

<xs:element name="Customers" codegen:typedName="Customer" codegen:typedPlural="Customers"> <xs:complexType> <xs:sequence> <xs:element name="CustomerID" type="xs:string" minOccurs="0" /> </ Xs: sequence> </ Xs: complexType> </ Xs: element>
Especificacin de un typedName valor del cliente se traducir en una DataRow nombre de objeto de cliente . Especificacin de un typedPlural valor de Clientesconserva la DataRowCollection nombre de los clientes .

La siguiente tabla muestra las anotaciones disponibles para su uso.

Anotacin typedName typedPlural typedParent typedChildren nullValue

Descripcin Nombre del objeto. Nombre de una coleccin de objetos. Nombre del objeto al que se refiere en una relacin padre. Nombre del mtodo para devolver los objetos a partir de una relacin de hijo. Valor si el valor subyacente es DBNull . Consulte la tabla siguiente para NullValue anotaciones. El valor predeterminado es _throw .

La siguiente tabla muestra los valores que se pueden especificar para la nullValue anotacin.

nullValue Valor Valor de reemplazo

Descripcin

Especifique un valor a devolver. El valor devuelto debe coincidir con el tipo del elemento. Por ejemplo, utilice nullValue = "0" para devolver 0 para campos enteros nulos. Lanza una excepcin. Este es el valor predeterminado. Devuelve una referencia nula o lanzar una excepcin si un tipo primitivo se encuentra. Para cadenas, volver String.Empty , de lo contrario devolver un objeto creado a partir de un constructor vaco. Si un tipo primitivo se encuentra, una excepcin.

_throw _null _empty

La siguiente tabla muestra los valores predeterminados para los objetos de un escrito conjunto de datos y las anotaciones disponibles.

Objeto / Mtodo / Evento DataTable DataTable Mtodos

Defecto TableNameDataTable NewTableNameRow AddTableNameRow DeleteTableNameRow TableName TableNameRow DataTable.ColumnNameColumn DataRow.ColumnName

Anotacin typedPlural typedName

DataRowCollection DataRow DataColumn

typedPlural typedName typedName

Propiedad Nio Accessor Padres Accessor DataSet Eventos

PropertyName GetChildTableNameRows TableNameRow TableNameRowChangeEvent TableNameRowChangeEventHandler

typedName typedChildren typedParent typedName

Para utilizar con tipo DataSet anotaciones, debe incluir la siguiente xmlns referencia en el lenguaje de definicin de esquemas XML (XSD).

xmlns: codegen = "urn: schemas-microsoft-com: xml-msprop"


A continuacin se muestra un esquema anotado que expone el Los clientes de la tabla Northwind base de datos con relacin a la rdenes mesa incluido.

<? Xml version = "1.0" encoding = "UTF-8"> <Xs: schema id = "CustomerDataSet" xmlns: codegen = "urn: schemas-microsoft-com: xml-msprop" xmlns = "" xmlns: xs = "http://www.w3.org/2001/XMLSchema" xmlns: msdata = "urn: schemas-microsoft-com: xml-msdata"> <xs:element name="CustomerDataSet" msdata:IsDataSet="true"> <xs:complexType> <xs:choice maxOccurs="unbounded"> <xs:element name="Customers" codegen:typedName="Customer" codegen:typedPlural="Customers"> <xs:complexType> <xs:sequence> <xs:element name="CustomerID" codegen:typedName="CustomerID" type="xs:string" minOccurs="0" /> <xs:element name="CompanyName" codegen:typedName="CompanyName" type="xs:string" minOccurs="0" /> <xs:element name="Phone" codegen:typedName="Phone" codegen:nullValue="" type="xs:string" minOccurs="0" /> </ Xs: sequence> </ Xs: complexType> </ Xs: element> <xs:element name="Orders" codegen:typedName="Order" codegen:typedPlural="Orders"> <xs:complexType> <xs:sequence> <xs:element name="OrderID" codegen:typedName="OrderID" type="xs:int" minOccurs="0" /> <xs:element name="CustomerID" codegen:typedName="CustomerID" codegen:nullValue="" type="xs:string" minOccurs="0" /> <xs:element name="EmployeeID" codegen:typedName="EmployeeID" codegen:nullValue="0" type="xs:int" minOccurs="0" /> <xs:element name="OrderAdapter" codegen:typedName="OrderAdapter" codegen:nullValue="1980-01-01T00:00:00" type="xs:dateTime" minOccurs="0" /> </ Xs: sequence> </ Xs: complexType> </ Xs: element> </ Xs: choice> </ Xs: complexType> <xs:unique name="Constraint1"> <xs:selector xpath=".//Customers" /> <xs:field xpath="CustomerID" /> </ Xs: unique> <xs:keyref name="CustOrders" refer="Constraint1" codegen:typedParent="Customer" codegen:typedChildren="GetOrders">

<xs:selector xpath=".//Orders" /> <xs:field xpath="CustomerID" /> </ Xs: keyref> </ Xs: element> </ Xs: schema>
En el ejemplo de cdigo siguiente se utiliza una inflexible de tipos DataSet creado a partir del esquema de ejemplo. Utiliza un SqlDataAdapter para rellenar elClientes mesa y otro SqlDataAdapter para rellenar la Pedidos mesa. El establecimiento inflexible de tipos DataSet define los DataRelations . C# VB

"Supone un objeto SqlConnection vlida conexin con nombre. Dim customerAdapter Como SqlDataAdapter = New SqlDataAdapter (_ "SELECT CustomerID, CompanyName telefnicas de los clientes" , y conexin) Dim orderAdapter Como SqlDataAdapter = New SqlDataAdapter (_ "SELECT OrderID, CustomerID, EmployeeID, OrderAdapter DE pedidos" , y conexin) "Llenar un DataSet con establecimiento inflexible de tipos. Connection.Open () Dim clientes As CustomerDataSet = New CustomerDataSet () customerAdapter.Fill (clientes, "Clientes" ) orderAdapter.Fill (clientes, "Pedidos" ) Connection.close () 'Aadir un evento inflexible de tipos. AddHandler customers.Customers.CustomerChanged, y Nueva CustomerDataSet.CustomerChangeEventHandler (_ AddressOf OnCustomerChanged) 'Aadir un DataRow inflexible de tipos. Dim newCustomer Como CustomerDataSet.Customer = _ customers.Customers.NewCustomeromer () newCustomer.CustomerID = "NEW01" newCustomer.CompanyName = "Mi Nueva Empresa" customers.Customers.AddCustomer (newCustomer) 'Ir a la relacin nio. Dim cliente Como CustomerDataSet.Customer Dim orden como CustomerDataSet. Orden Para cada cliente En customers.Customers Console.WriteLine (Customer.CustomerID) Para cada orden en customer.GetOrders () Console.WriteLine (vbTab y orden . OrderID) Siguiente Siguiente Private Shared Sub OnCustomerChanged (_ remitente como objeto , e Como CustomerDataSet.CustomerChangeEvent) End Sub

Crear y utilizar DataTables


. NET Framework 2.0
Otras versiones 3 de cada 12 ha calificado este til - Valorar este tema Un conjunto de datos se compone de una coleccin de tablas, relaciones y restricciones. En ADO.NET, DataTable objetos se utilizan para representar las tablas en unDataSet . Un DataTable representa una tabla de datos en memoria relacional;. los datos son locales a la aplicacin basada en la que reside, pero se puede rellenar desde un origen de datos como Microsoft SQL Server mediante un DataAdapter Para obtener ms informacin, consulte Llenado un DataSet desde un DataAdapter. La DataTable clase es un miembro de la System.Data espacio de nombres en el. NET Framework. Puede crear y utilizar un DataTable de manera independiente o como miembro de un conjunto de datos , y DataTable objetos tambin se puede utilizar en conjuncin con objetos de otros frameworks. NET, incluyendo elDataView . Se accede a la coleccin de tablas en un DataSet a travs de la Tablas de la propiedad DataSet objeto. El esquema o estructura de una tabla se representa con columnas y restricciones. Se define el esquema de una DataTable con DataColumn objetos as comoForeignKeyConstraint y UniqueConstraint objetos. Las columnas de una tabla puede asignar a las columnas de un origen de datos contienen valores calculados a partir de expresiones, automticamente incrementa sus valores, o contienen valores de clave principal. Adems de un esquema, un DataTable tambin debe tener filas para contener y datos de pedidos. El DataRow clase representa los datos reales contenidos en una tabla. Se utiliza el DataRow y sus propiedades y mtodos para recuperar, evaluar y manipular los datos en una tabla. Al acceder y modificar los datos dentro de una fila, el DataRow objeto mantiene tanto su estado actual y original. Puede crear relaciones padre-hijo entre tablas utilizando una o ms columnas relacionadas en las tablas. Se crea una relacin entre DataTable objetos utilizando unDataRelation . DataRelation objetos pueden entonces ser utilizados para devolver el nio pariente o filas primarias de una fila determinada. Para obtener ms informacin, vea Agregar una relacin entre tablas .

Crear un DataTable
. NET Framework 2.0
Otras versiones 10 de los 54 ha calificado este til - Valorar este tema

Un DataTable , lo que representa una tabla de datos relacionales en memoria, se pueden crear y utilizar de forma independiente, o puede ser utilizado por otros. NET Framework, con mayor frecuencia como un miembro de un conjunto de datos . Se puede crear un DataTable objeto mediante el correspondiente DataTable constructor. Se puede aadir al conjunto de datos utilizando el Agregar mtodo para aadirlo a la DataTable del objeto Tablas coleccin. Tambin puede crear DataTable objetos dentro de un conjunto de datos mediante el uso de relleno o FillSchema mtodos de la DataAdapter objeto o de un esquema XML predefinidos o deducida utilizando los ReadXml , ReadXmlSchema o InferXmlSchema mtodos del DataSet . Tenga en cuenta que despus de haber agregado un DataTable como miembro de la Tablas de coleccin de un conjunto de datos , no se puede agregar a la coleccin de tablas de cualquier otroconjunto de datos . Cuando se crea un DataTable , que no tiene un esquema (es decir, una estructura). Para definir el esquema de la tabla, debe crear y aadir DataColumn objetos alColumnas coleccin de la mesa. Tambin se puede definir una columna de clave principal para la tabla, y crear y agregar restriccin objetos al restriccionescoleccin de la mesa. Una vez definido el esquema para un DataTable , puede agregar filas de datos a la tabla mediante la adicin de DataRow objetos a la filas de la tabla de coleccin. Usted no est obligado a proporcionar un valor para el TableName propiedad cuando se crea un DataTable , se puede especificar la propiedad en otro momento, o se puede dejar en blanco. Sin embargo, cuando se agrega una tabla sin un TableName valor a un conjunto de datos , la tabla se le dar un nombre predeterminado incremental de la Tabla N , a partir de "Tabla" para Table0.

Nota Le recomendamos que evite la "Tabla N "convencin de nomenclatura al proporcionar un TableName valor, porque el nombre de suministrarle puede entrar en conflicto con un nombre de tabla predeterminado existente en el DataSet . Si el nombre proporcionado ya existe, se produce una excepcin.
En el ejemplo siguiente se crea una instancia de un objeto DataTable objeto y le asigna el nombre "Clientes". C# VB

Dim mesa de trabajo como DataTable = New DataTable ( "Clientes" )


En el ejemplo siguiente se crea una instancia de un objeto DataTable mediante la adicin a la tablas de una coleccin DataSet . C# VB

Dim clientes As DataSet = New DataSet Dim customersTable Como DataTable = _ customers.Tables.Add ( "CustomersTable" )

Definir el esquema de DataTable

. NET Framework 2.0


Otras versiones 2 de 2 puntuado este til - Valorar este tema El esquema o estructura de una tabla est representada por columnas y restricciones. Se define el esquema de una DataTable con DataColumn objetos as comoForeignKeyConstraint y UniqueConstraint objetos. Las columnas de una tabla puede asignar a las columnas de un origen de datos contienen valores calculados a partir de expresiones, automticamente incrementa sus valores, o contienen valores de clave principal. Referencias por nombre a las columnas, relaciones y restricciones de una tabla distinguen entre maysculas y minsculas. Dos o ms columnas, relaciones y restricciones por lo tanto puede existir en una tabla que tiene el mismo nombre, pero que difieren en el caso. Por ejemplo, usted puede tener Col1 y col1 . En tal caso, como una referencia a una de las columnas por nombre debe coincidir con el caso del nombre de columna exactamente, de lo contrario se produce una excepcin. Por ejemplo, si la tabla myTable contiene las columnas Col1 y col1 , que hara referencia a Col1 por su nombre como myTable.Columns ["Col1"] , y col1como myTable.Columns ["col1"] . Intentando hacer referencia a cualquiera de las columnas como myTable.Columns ["col1"] generara una excepcin. La regla de maysculas y minsculas no aplica si slo una columna, relacin o restriccin con un nombre en particular existe. Es decir, si no hay otro objeto columna, relacin o restriccin en la tabla coincide con el nombre de ese objeto en particular la columna, relacin o restriccin, puede hacer referencia al objeto por su nombre utilizando cualquier caso, y sin excepcin. Por ejemplo, si la tabla tiene slo Col1 , puede hacer referencia a ella utilizando my.Columns ["COL1"] .

Nota El CaseSensitive propiedad de la DataTable no afecta a este comportamiento. El CaseSensitive propiedad se aplica a los datos de una tabla y afecta a ordenar, buscar, filtrar, aplicar restricciones, y as sucesivamente, pero no a las referencias a las columnas, relaciones y restricciones.

Adicin de columnas a una tabla


. NET Framework 2.0
Otras versiones 10 de 17 puntuado este til - Valorar este tema Un DataTable contiene una coleccin de DataColumn objetos referenciados por el Columns propiedad de la mesa. Esta coleccin de columnas, junto con todas las limitaciones, define el esquema, o estructura, de la mesa. Se crea DataColumn objetos dentro de una tabla mediante la DataColumn constructor, o llamando al agregar el mtodo de columnas de la tabla de la propiedad, que es una DataColumnCollection . El Add mtodo acepta opcional ColumnName , DataType y Expression argumentos y crea un nuevo DataColumn como miembro de la coleccin. Tambin acepta una ya existente DataColumn objeto y lo agrega a la coleccin y devuelve una referencia

al aadido DataColumn si se solicita. Porque DataTable objetos no son especficos de cualquier fuente de datos, tipos. NET Framework se utilizan cuando se especifica el tipo de datos de una DataColumn . El ejemplo siguiente aade cuatro columnas a un DataTable . C# VB

Dim mesa de trabajo Como DataTable = New DataTable ( "Clientes" ) Dim workCol Como DataColumn = workTable.Columns.Add (_ "CustID" , Tipo. GetType ( "System.Int32" )) workCol.AllowDBNull = false workCol.Unique = verdadero workTable.Columns.Add ( "CustLName" , Tipo. GetType ( "System.String" )) workTable.Columns.Add ( "CustFName" , Tipo. GetType ( "System.String" )) workTable.Columns.Add ( "Compras" , escriba. GetType ( "System.Double" ))
En el ejemplo, observe que las propiedades de la CustID columna est configurado para no permitir DBNull valores y para restringir los valores que ser nico. Sin embargo, si se define la CustID columna como columna de clave principal de la tabla, el AllowDBNull propiedad automticamente se establecer en falso y lanica propiedad automticamente se establecer en verdad . Para obtener ms informacin, vea Definir una clave principal para una tabla .

Precaucin Si un nombre de columna no se suministra para una columna, la columna recibe el nombre predeterminado incremental de la columna N, comenzando con "Columna1", cuando se agrega a la coleccin DataColumnCollection . Se recomienda evitar la convencin de nomenclatura de "Columna N "cuando se proporciona un nombre de columna, porque el nombre de suministrarle puede entrar en conflicto con un nombre predeterminado columna existente en elDataColumnCollection . Si el nombre proporcionado ya existe, se produce una excepcin.

Crear columnas de expresin


. NET Framework 2.0
Otras versiones 1 de cada 4 ha calificado este til - Valorar este tema Se puede definir una expresin para una columna, lo que le permite contener un valor calculado a partir de los valores de otra columna de la misma fila o de los valores de la columna de varias filas de la tabla. Para definir la expresin a evaluar, utilizar la expresin caracterstica de la columna de destino y utilizar elColumnName propiedad para hacer referencia a otras columnas de la expresin. El DataType de la columna de expresin debe ser adecuado para el valor que devuelve la expresin. La siguiente tabla enumera varios posibles usos para las columnas de expresin en una tabla.

Tipo Expression Comparacin Clculo Agregacin

Ejemplo "Total> = 500" "UnitPrice * Quantity" Sum (Price)

Puede establecer la expresin de la propiedad en una ya existente DataColumn objeto, o puede incluir la propiedad como el tercer argumento pasado alDataColumn constructor, como se muestra en el siguiente ejemplo. C# VB

workTable.Columns.Add ( "Total" , Tipo. GetType ( "System.Double" )) workTable.Columns.Add ( "SalesTax" , Tipo. GetType ( "System.Double" ), _ "Total * 0,086" )
Las expresiones pueden hacer referencia a otras columnas de expresin, sin embargo, una referencia circular, en la que dos expresiones de referencia entre s, generar una excepcin. Para las reglas sobre las expresiones de escritura, consulte la expresin de la propiedad DataColumn clase.

Crear columnas AutoIncrement


. NET Framework 2.0
Otras versiones 0 de 3 puntuado este til - Valorar este tema Para asegurar los valores nicos de columna, puede establecer los valores de las columnas para incrementar automticamente cuando se agregan nuevas filas a la tabla. Para crear un incremento automtico DataColumn , establezca la AutoIncrement propiedad de la columna a la verdad . El DataColumn comienza entonces con el valor definido en el AutoIncrementSeed propiedad, y con cada fila aadida al valor de los AutoIncrement columna se incrementa por el valor definido en elAutoIncrementStep propiedad de la columna. Para AutoIncrement columnas, se recomienda que la ReadOnly propiedad del objeto DataColumn se establece en verdadero . El ejemplo siguiente muestra cmo crear una columna que comienza con un valor de 200 y aade incrementalmente en pasos de 3. C# VB

Dim workColumn Como DataColumn = workTable.Columns.Add (_ "CustomerID" , typeof (Int32)) workColumn.AutoIncrement = verdadero

workColumn.AutoIncrementSeed = 200 workColumn.AutoIncrementStep = 3

Definir una clave principal para una tabla


. NET Framework 2.0
Otras versiones 5 de 18 ha calificado este til - Valorar este tema Una tabla de base de datos comnmente tiene una columna o grupo de columnas que identifica de manera nica cada fila de la tabla. Esta columna identificar o grupo de columnas se denomina clave principal. Cuando se identifica un solo DataColumn como PrimaryKey para un DataTable , la tabla ajusta automticamente la AllowDBNull propiedad de la columna a la falsay la nica propiedad verdadera . Por varias columnas claves principales, slo la AllowDBNull propiedad se establece automticamente en false . El PrimaryKey caracterstica de un DataTable recibe como su valor de una matriz de uno o ms DataColumn objetos, como se muestra en los siguientes ejemplos.El primer ejemplo se define una columna como la clave principal. C# VB

workTable.PrimaryKey = New DataColumn () {workTable.Columns ( "CustID" )} 'Or Dim columnas (1) Como DataColumn columnas (0) = workTable.Columns ( "CustID" ) workTable.PrimaryKey = columnas
El ejemplo siguiente define dos columnas como clave principal. C# VB

workTable.PrimaryKey = New DataColumn () {workTable.Columns ( "CustLName" ), _ workTable.Columns ( "CustFName" )} 'Or Dim KeyColumn (2) Como DataColumn KeyColumn (0) = workTable.Columns ( "CustLName" ) KeyColumn (1) = workTable.Columns ( "CustFName" ) workTable.PrimaryKey = KeyColumn

Agregar restricciones a una tabla


. NET Framework 2.0
Otras versiones

2 de 6 puntuado este til - Valorar este tema Puede utilizar restricciones a imponer restricciones sobre los datos en una DataTable , con el fin de mantener la integridad de los datos. Una restriccin es una regla automtica, aplicado a una columna o columnas relacionadas, que determina el curso de accin cuando el valor de una fila es de alguna manera alterado. Las restricciones se aplican cuando la EnforceConstraints propiedad del DataSet es cierto . Hay dos tipos de restricciones en ADO.NET: el ForeignKeyConstraint y la UniqueConstraint . Por defecto, las restricciones se crea automticamente cuando se crea una relacin entre dos o ms tablas mediante la adicin de un DataRelation al DataSet . Sin embargo, puede desactivar este comportamiento especificandocreateConstraints = false al crear la relacin.

ForeignKeyConstraint
A ForeignKeyConstraint impone reglas sobre cmo las actualizaciones y eliminaciones en las tablas relacionadas se propagan. Por ejemplo, si un valor de una fila de una tabla se actualiza o elimina, y ese valor se utiliza tambin en una o ms tablas relacionadas, un ForeignKeyConstraint determina lo que ocurre en las tablas relacionadas. Los DeleteRule y UpdateRule propiedades del ForeignKeyConstraint definir la accin a tomar cuando el usuario intenta eliminar o actualizar una fila en una tabla relacionada. En la siguiente tabla se describen las opciones disponibles para los DeleteRule y UpdateRule propiedades del ForeignKeyConstraint .

Norma que establezca

Descripcin

Cascada SetNull Setdefault Ninguno

Borra o actualiza las filas relacionadas. Establece los valores de las filas relacionadas en DBNull . Establece los valores de las filas relacionadas en el valor predeterminado. No realizar ninguna accin en las filas relacionadas. Este es el valor predeterminado.

Un ForeignKeyConstraint puede restringir, as como propagar, cambios en las columnas relacionadas. Dependiendo de las propiedades establecidas para laForeignKeyConstraint de una columna, si la EnforceConstraints propiedad

del conjunto de datos es verdadera , la realizacin de ciertas operaciones en la fila primaria va a resultar en una excepcin. Por ejemplo, si el DeleteRule propiedad de la ForeignKeyConstraint es Ninguno , una fila padre no puede ser eliminado si tiene alguna fila de nios. Usted puede crear una restriccin de clave externa entre las columnas individuales o entre una serie de columnas con el ForeignKeyConstraint constructor. Pase el resultante ForeignKeyConstraint objeto al Aade mtodo de la tabla de restricciones de propiedad, que es un ConstraintCollection . Tambin se puede pasar argumentos de constructor para varias sobrecargas del Add mtodo de un ConstraintCollection para crear un ForeignKeyConstraint . Cuando se crea un ForeignKeyConstraint , se pueden pasar las DeleteRule y UpdateRule valores al constructor como argumentos, o se pueden establecer como propiedades como en el siguiente ejemplo (donde la DeleteRule valor se establece en Ninguno ). C# VB

Dim custOrderFK Como ForeignKeyConstraint = New ForeignKeyConstraint ( "CustOrderFK" , _ custDS.Tables ( "CustTable" ). Las columnas ( "IdCliente" ), _ custDS.Tables ( "OrdersTable" ). Las columnas ( "IdCliente" )) custOrderFK.DeleteRule = Rule.None 'No se puede eliminar un valor para el cliente que tiene asociados los pedidos existentes. custDS.Tables ( "OrdersTable" ). Constraints.Add (custOrderFK)

AcceptRejectRule
Los cambios en las filas se pueden aceptar con el mtodo AcceptChanges mtodo o cancelado usando el RejectChanges mtodo del DataSet , DataTable oDataRow . Cuando un conjunto de datos contiene ForeignKeyConstraints , invocando la AcceptChanges o RejectChanges mtodos cumplir laAcceptRejectRule . El AcceptRejectRule propiedad de la ForeignKeyConstraint determina qu accin se tomar en las filas secundarias cuando AcceptChanges oRejectChanges se llama en la fila principal. La siguiente tabla muestra los ajustes disponibles para el AcceptRejectRule .

Norma que establezca

Descripcin

Cascada Ninguno

Aceptar o rechazar cambios en filas secundarias. No realizar ninguna accin en las filas secundarias. Este es el valor predeterminado.

UniqueConstraint
El UniqueConstraint objeto, que se puede asignar a una sola columna o un conjunto de columnas de una DataTable , garantiza que todos los datos de la columna o columnas especificadas es nico por fila. Se puede crear una restriccin nica para una columna o conjunto de columnas mediante el UniqueConstraintconstructor. Pase el resultante UniqueConstraint objeto al Aade mtodo de la tabla de restricciones de propiedad, que es un ConstraintCollection . Tambin se puede pasar argumentos de constructor para varias sobrecargas del Add mtodo de un ConstraintCollection para crear un UniqueConstraint . Al crear unUniqueConstraint para una columna o columnas, si lo desea, puede especificar si la columna o columnas son una clave principal. Tambin puede crear una restriccin nica para una columna mediante el establecimiento de la nica propiedad de la columna a la verdad . Como alternativa, el establecimiento de la nica propiedad de una sola columna para falso elimina cualquier restriccin nica que pueda existir. Definicin de una columna o columnas como clave principal de una tabla se crear automticamente una restriccin de unicidad para la columna o columnas especificadas. Si elimina una columna de laPrimaryKey propiedad de un objeto DataTable , el UniqueConstraint se retira. En el ejemplo siguiente, se crea un UniqueConstraint por dos columnas de una DataTable . C#

VB

Dim custTable Como DataTable = custDS.Tables ( "Customers" ) Dim custUnique Como UniqueConstraint = _ New UniqueConstraint ( New DataColumn () {custTable.Columns ( "IdCliente" ), _ custTable.Columns ( "CompanyName" )}) custDS.Tables ( "Clientes" ). Constraints.Add (custUnique)

Manipular datos en DataTable


. NET Framework 2.0
Otras versiones 2 de cada 11 ha calificado este til - Valorar este tema Despus de crear un DataTable en un DataSet , se pueden realizar las mismas actividades que lo hara al usar una tabla en una base de datos. Usted puede agregar, ver, editar y borrar datos de la tabla, se puede controlar los errores y eventos, y se pueden consultar los datos en la tabla. Cuando se modifican los datos de unDataTable , tambin puede verificar si los cambios son precisos, y determinar si se debe aceptar o rechazar mediante programacin los cambios.

Agregar datos a una tabla


. NET Framework 2.0
Otras versiones 14 de los 26 ha calificado este til - Valorar este tema Despus de crear una DataTable y definir su estructura usando columnas y restricciones, se pueden agregar nuevas filas de datos a la tabla. Para agregar una nueva fila, declarar una nueva variable como de tipo DataRow . Un nuevo DataRow objeto se devuelve al llamar al NewRow mtodo. La DataTable crea entonces elDataRow objeto basado en la estructura de la tabla, como se define por la DataColumnCollection . En el siguiente ejemplo se muestra cmo crear una nueva fila llamando al NewRow mtodo. C# VB

Dim workRow Como DataRow = workTable.NewRow ()


A continuacin, puede manipular la nueva fila aadida utilizando un ndice o el nombre de la columna, como se muestra en el siguiente ejemplo. C#

VB

workRow ( "CustLName" ) = "Smith" workRow (1) = "Smith"


Despus que los datos se inserta en la nueva fila, el Add mtodo se utiliza para agregar la fila a la DataRowCollection , que se muestra en el siguiente cdigo. C# VB

workTable.Rows.Add (workRow)
Tambin puede llamar al Aade mtodo para agregar una nueva fila pasando un array de valores, cuyo tipo es del objeto , como se muestra en el siguiente ejemplo. C# VB

workTable.Rows.Add ( nuevo Objeto () {1, "Smith" })


Pasar una matriz de valores, cuyo tipo es del objeto , al agregar mtodo crea una nueva fila dentro de la tabla y establece sus valores de columna a los valores de la matriz de objetos. Tenga en cuenta que los valores de la matriz se corresponden secuencialmente a las columnas, basndose en el orden en que aparecen en la tabla. En el ejemplo siguiente se agrega 10 filas a la recin creada Clientes mesa. C# VB

Dim workRow Como DataRow Dim i como Integer Para i = 0 a 9 workRow = workTable.NewRow () workRow (0) = i workRow (1) = "CustName" y I.ToString () workTable.Rows.Add (workRow) Prximo

Ver datos en una tabla


. NET Framework 2.0
Otras versiones 2 de cada 11 ha calificado este til - Valorar este tema Puede acceder a los contenidos de un DataTable mediante el uso de las filas y columnas de las colecciones de la DataTable . Tambin puede utilizar el Select para devolver subconjuntos de los datos en una DataTable de acuerdo con los criterios de inclusin de criterios de bsqueda, orden y estado de fila. Adems, puede utilizar el encontrar el mtodo de DataRowCollection en la bsqueda de una fila determinada mediante un valor de clave principal.

La Seleccin del mtodo DataTable objeto devuelve un conjunto de DataRow objetos que coinciden con los criterios especificados. Seleccione toma argumentos opcionales de una expresin de filtro, la expresin clase y DataViewRowState . La expresin de filtro identifica qu filas a devolver, segn DataColumn valores, como LastName = 'Smith' . La expresin de ordenacin sigue las convenciones estndar de SQL para ordenar las columnas, por ejemplo LastName ASC, FirstName ASC . Para las reglas sobre las expresiones de escritura, consulte la expresin de la propiedad DataColumn clase.

Punta Si va a realizar una serie de llamadas a la Seleccin de un mtodo DataTable , puede aumentar el rendimiento creando primero una DataView para la DataTable. Creacin de los DataView ndices de las filas de la tabla. El Select mtodo entonces uses ese ndice, reduciendo significativamente el tiempo necesario para generar el resultado de la consulta. Para obtener informacin sobre cmo crear una DataView para una DataTable , vea Crear y utilizar DataViews .
El Select mtodo permite determinar qu versin de las filas para ver o manipular basado en un DataViewRowState . En la tabla siguiente se describen las posibles DataViewRowState valores de la enumeracin.

DataViewRowState valor CurrentRows Suprimido ModifiedCurrent

Descripcin

Filas actuales, incluidas las filas sin modificar, aadidos y modificados. Una fila eliminada. Una versin actual, que es una versin modificada de los datos originales. (Ver ModifiedOriginal .) La versin original de todas las filas modificadas. La versin actual est disponible utilizando ModifiedCurrent . Una nueva fila. Ninguno. Filas originales, incluidas las filas sin modificar y eliminar. Una fila sin cambios.

ModifiedOriginal

Adicional Ninguno OriginalRows Sin cambios

En el siguiente ejemplo, el DataSet objeto se filtra de modo que usted est trabajando solamente con las filas cuyos DataViewRowState se establece CurrentRows. C# VB

Dim columna como DataColumn Dim fila como DataRow Dim currentRows () As DataRow = _ mesa de trabajo. Seleccione ( Nada , Nada , DataViewRowState.CurrentRows) Si (currentRows.Length <1) Luego Console.WriteLine ( "No hay filas actuales encontrado" ) Otras ventas

para cada columna en workTable.Columns Console.Write (vbTab y column.ColumnName) Prximo Console.WriteLine (vbTab y "RowState" ) Para cada fila En currentRows Para cada columna En workTable.Columns Console.Write (vbTab y fila (columna). ToString ()) Prximo Dim RowState Como cadena = _ Sistema. Enum . GetName (row.RowState. GetType (), row.RowState) Console.WriteLine (vbTab y RowState) Siguiente Fin Si
El Select mtodo se puede utilizar para devolver filas con diferentes RowState valores o valores de campo. El ejemplo siguiente devuelve un DataRow matriz que hace referencia todas las filas que se han eliminado, y devuelve otro DataRow matriz que hace referencia a todas las filas, ordenados por CustLName , donde elCustID columna es mayor que 5. Para obtener informacin acerca de cmo ver la informacin de la Deleted fila, vea Estados de fila y versiones de fila . C# VB

"Recuperar todos los registros borrados. Dim deletedRows () Como DataRow = mesa de trabajo. Seleccione ( Nada , Nada , DataViewRowState.Deleted) 'Recuperar filas donde custid> 5, y el orden de CustLName. Dim custRows () As DataRow = mesa de trabajo. Seleccione (_ "CustID> 5" , "CustLName ASC" )

Utilizando el mtodo de carga


. NET Framework 2.0
Otras versiones 1 de 1 puntuado este til - Valorar este tema Puede utilizar la carga mtodo para cargar una DataTable con las filas de un origen de datos. Este es un mtodo sobrecargado que, en su forma ms simple, acepta un solo parmetro, un objeto DataReader . De esta forma, simplemente carga el DataTable con las filas. Si lo desea, puede especificar el LoadOption parmetro para controlar la cantidad de datos se agrega a la DataTable .

El LoadOption parmetro es particularmente til en los casos en que el DataTable ya contiene filas de datos, ya que describe cmo los datos entrantes desde la fuente de datos se combinan con los datos que ya estn en la mesa. Por ejemplo, PreserveCurrentValues (el valor predeterminado) especifica que en los casos en que se marca una fila como aadido en la DataTable , el original o valor de cada columna se ajusta al contenido de la fila correspondiente de la fuente de datos. Elactual valor retendr los valores asignados cuando la fila se agrega y el RowState de la fila se establece cambiado . La tabla siguiente ofrece una breve descripcin de los LoadOption valores de la enumeracin.

LoadOption valor OverwriteRow

Descripcin Si las filas entrantes tienen el mismo PrimaryKey valor como una fila ya en el DataTable , los originales y actuales valores de cada columna se sustituyen con los valores de la fila de entrada, y el RowState propiedad se establece en Sin cambios . Las filas del origen de datos que no existen en el DataTable se agregan con un RowState de valor sin cambios . Esta opcin refresca efecto en el contenido de la DataTable para que coincida con el contenido de la fuente de datos. Si las filas entrantes tienen el mismo PrimaryKey valor como una fila ya en el DataTable , el original valor se establece en el contenido de la fila de entrada, y el actual valor no cambia. Si el RowState es aadida o modificada , se ajusta a la modificacin . Si el RowState era Deleted , sigue siendo eliminados . Las filas del origen de datos que no existen en el DataTable se agregan, y el RowState se establece en Sin cambios . Si las filas entrantes tienen el mismo PrimaryKey valor como la fila ya en el DataTable , el actual valor se copia en el original valor, y el actual valor se establece en el contenido de la fila de entrada. Si el RowState en el DataTable se agreg , el RowState permanece agreg . Para las filas marcadas como modificado o suprimido, el RowState es Modified . Las filas del origen de datos que no existen en el DataTable se agregan, y el RowState se establece en Alta .

PreserveCurrentValues (por defecto)

UpdateCurrentValues

El ejemplo siguiente utiliza la Carga mtodo para mostrar una lista de los cumpleaos de los empleados de la Northwind base de datos. [Visual Basic]

Private Sub LoadBirthdays (connectionString ByVal como secuencia) "Se supone que connectionString es una cadena de conexin vlida 'A la base de datos Northwind de SQL Server. QueryString Dim As String = _ "SELECT Apellido, Nombre, fecha de nacimiento" & _ "DESDE dbo.Employees" & _ "ORDER BY fecha de nacimiento, apellidos, nombre" 'Abrir y llenar un DataSet. Adaptador As SqlDataAdapter = New SqlDataAdapter (_ queryString, connectionString) Empleados Dim As New DataSet adapter.Fill (empleados, "Empleados")

'Crear un SqlDataReader para su uso con el mtodo de carga. Como lector Dim DataTableReader employees.GetDataReader = () 'Crear una instancia de DataTable y asignar la primera 'DataTable en la coleccin DataSet.Tables a ella. Dim dataTableEmp Como DataTable = employees.Tables (0) 'Llenar el DataTable con los datos llamando a la carga y 'Pasar el SqlDataReader. dataTableEmp.Load (lector, LoadOption.OverwriteRow) 'Recorrer la coleccin de filas y mostrar los valores "En la ventana de la consola. EmployeeRow As DataRow For Each employeeRow En dataTableEmp.Rows Console.WriteLine ("{0: MM \ \ dd \ \ yyyy}" & ControlChars.Tab & _ "{1}, {2}", _ employeeRow ("Fecha de Nacimiento"), _ employeeRow ("LastName"), _ employeeRow ("Nombre")) EmployeeRow Siguiente "Mantener la ventana abierta para ver el contenido. Console.ReadLine () End Sub

Modificar datos en una tabla


. NET Framework 2.0
Otras versiones 0 de 8 puntuado este til - Valorar este tema Cuando se realizan cambios en los valores de columna en una DataRow , los cambios son inmediatamente colocados en el estado actual de la fila. El DataRowStatese ajusta entonces a modificacin , y los cambios se acepta o se rechaza el uso de AcceptChanges o RejectChanges mtodos de la DataRow . El DataRow tambin proporciona tres mtodos que puede utilizar para suspender el estado de la fila mientras se est editando. Estos mtodos son BeginEdit , EndEdit y CancelEdit . Al modificar los valores de columna en una DataRow directamente, el DataRow gestiona los valores de la columna utilizando el actual , por defecto , y originalesversiones de filas. Adems de estas versiones de filas, los BeginEdit , EndEdit y CancelEdit mtodos utilizan una versin de la fila cuarta propuesta . Para obtener ms informacin acerca de las versiones de fila, vea Estados de fila y versiones de fila . El Proyecto de versin de fila existe durante una operacin de edicin que se inicia llamando a BeginEdit y que termina, ya sea mediante el uso de EndEdit oCancelEdit, o llamando a AcceptChanges o RejectChanges . Durante la operacin de edicin, puede aplicar la lgica de validacin a las columnas individuales mediante la evaluacin de la ProposedValue en elColumnChanged caso de la DataTable . El ColumnChanged evento tiene DataColumnChangeEventArgs que mantienen una referencia a la columna que est cambiando y al ProposedValue . Despus de evaluar el valor propuesto, usted puede modificar o cancelar la edicin. Cuando la edicin se termin, la fila se mueve fuera de la propuesta estatal.

Puede confirmar ediciones llamando EndEdit , o puede cancelar llamando CancelEdit . Tenga en cuenta que mientras EndEdit no confirma los cambios, el conjunto de datos en realidad no aceptar los cambios hasta AcceptChanges se llama. Tenga en cuenta tambin que si se llama a AcceptChanges antes de que haya terminado la edicin con EndEdit o CancelEdit , la edicin se termin y las propuestas de valores de fila son aceptados tanto para los actuales y originalesversiones de filas. De la misma manera, llamando RejectChanges termina la edicin y descarta las actuales y propuesta versiones de filas. Llamar a EndEdit oCancelEdit despus de llamar a AcceptChanges o RejectChanges tiene ningn efecto porque la edicin ya ha terminado. En el siguiente ejemplo se muestra cmo utilizar BeginEdit con EndEdit y CancelEdit . El ejemplo tambin se comprueba la ProposedValue en el ColumnChangedcaso y decide si debe cancelar la edicin. C# VB

Dim mesa de trabajo Como DataTable = New DataTable workTable.Columns.Add ( "Apellido" , Tipo. GetType ( "System.String" )) AddHandler workTable.ColumnChanged, _ New DataColumnChangeEventHandler ( AddressOf OnColumnChanged) Dim workRow Como DataRow = workTable.NewRow () workRow (0) = "Smith" workTable.Rows.Add (workRow) workRow.BeginEdit () 'Hace que el evento ColumnChanged para escribir un mensaje y cancelar la edicin. workRow (0) = "" workRow.EndEdit () 'Muestra "Smith, New". Console.WriteLine ( "{0}, {1}" , workRow (0), workRow.RowState) Private Shared Sub OnColumnChanged (_ remitente como objeto , args Como DataColumnChangeEventArgs) Si args.Column.ColumnName = "Apellido" Entonces Si args.ProposedValue.ToString () = "" Entonces Console.WriteLine ( "Apellido no puede estar en blanco. Editar cancelado". ) args.Row.CancelEdit () Fin Si Fin Si Fin Sub

Estados de fila y versiones de fila


. NET Framework 2.0
Otras versiones

8 de cada 10 ha calificado este til - Valorar este tema ADO.NET gestiona las filas de las tablas mediante estados de fila y versiones. Un estado de fila indica el estado de una fila; versiones de filas a mantener los valores almacenados en una fila que se modifica, incluyendo valores actuales, originales, por defecto y. Por ejemplo, despus de haber realizado una modificacin de una columna en una fila, la fila tendr un estado de fila de modificacin , y dos versiones de filas: actual , que contiene los valores de la fila actual y original , que contiene los valores de la fila antes de la columna fue modificada. Cada DataRow objeto tiene un RowState propiedad que se puede examinar para determinar el estado actual de la fila. La siguiente tabla ofrece una descripcin breve de cada RowState valor de enumeracin.

RowState valor Sin cambios

Descripcin

No se han realizado cambios desde la ltima llamada a AcceptChanges o desde la fila fue creado por DataAdapter.Fill . La fila se ha agregado a la mesa, pero AcceptChanges no se ha llamado. Algunos elementos de la fila se ha cambiado. La fila se ha eliminado de la mesa, y AcceptChanges no se ha llamado. La fila no es parte de ninguna DataRowCollection . El RowState de una fila de nueva creacin se establece en Independiente . Despus de que el nuevo DataRow se aade a la DataRowCollection llamando al Aade mtodo, el valor de la RowState propiedad se establece en Alta . Independiente tambin se establece para una fila que se ha eliminado de un DataRowCollection mediante el Remove mtodo, o por laeliminacin mtodo seguido por la AcceptChanges mtodo.

Adicional Modificado Suprimido Separado

Cuando AcceptChanges se llama en un DataSet , DataTable o DataRow , todas las filas con un estado de fila de eliminados se quitan. Las filas restantes se les da un estado de fila sin cambios , y los valores de la original versin de fila son reemplazados por los actuales valores de versin de filas. Cuando RejectChanges se llama, todas las filas con un estado de fila de Alta se eliminan. Las filas restantes se les da un estado de fila sin cambios , y los valores de la actual versin de la fila se sobrescriben con los originales valores de versin de filas. Puede ver las versiones de filas diferentes de una fila pasando una DataRowVersion parmetro con la referencia de columna, como se muestra en el siguiente ejemplo. C# VB

Dim custRow Como DataRow = custTable.Rows (0) Dim custID Como cadena = custRow ( "IdCliente" , DataRowVersion.Original). ToString ()
La siguiente tabla ofrece una descripcin breve de cada DataRowVersion valor de enumeracin.

DataRowVersion valor Corriente

Descripcin

Los valores actuales de la fila. Esta versin de fila no existe para las filas con un RowState de Deleted .

Defecto

La versin de fila predeterminada para una fila determinada. La versin de fila predeterminado de un aadido , modificado o sin cambiosfila actual . La versin de fila predeterminado de un Deleted fila es original . La versin de fila predeterminado de un unifamiliar filapropuesta . Los valores originales de la fila. Esta versin de fila no existe para las filas con un RowState de Alta . Los valores propuestos para la fila. Esta versin de fila existe durante una operacin de edicin en una fila, o para una fila que no es parte de una DataRowCollection .

Original

Propuesto

Se puede comprobar si un objeto DataRow tiene una versin de fila en particular llamando la HasVersion mtodo y pasar un DataRowVersion como argumento.Por ejemplo, DataRow.HasVersion (DataRowVersion.Original) devolver falso para las filas recin agregadas antes AcceptChanges ha sido llamado. En el ejemplo de cdigo siguiente se muestran los valores de todos los registros borrados de una tabla. eliminados filas no tienen una actual versin de la fila, por lo que debe pasar DataRowVersion.Original al acceder a los valores de columna. C# VB

Dim catTable Como DataTable = catDS.Tables ( "Categoras" ) Dim delRows () As DataRow = catTable. Seleccione ( Nada , Nada , DataViewRowState.Deleted) Console.WriteLine ( "filas eliminados:" & vbCrLf) Dim catCol Como DataColumn Dim delRow Como DataRow Para cada catCol En catTable.Columns Console.Write (catCol.ColumnName y vbTab) Prximo Console.WriteLine () Para cada delRow En delRows Para Cada catCol En catTable.Columns Console.Write (delRow (catCol, DataRowVersion.Original) y vbTab) Prximo Console.WriteLine () Prximo

Eliminar una fila de una tabla


. NET Framework 2.0
Otras versiones 5 de cada 11 ha calificado este til - Valorar este tema

Hay dos mtodos que puede utilizar para eliminar un DataRow de un objeto DataTable objeto: el Remove mtodo de la DataRowCollection objeto, y la eliminacindel mtodo DataRow objeto. Considerando que las Retirar mtodo elimina un objeto DataRow de la DataRowCollection , el Delete mtodo slo marca la fila para su eliminacin. La remocin se produce cuando la aplicacin llama al mtodo AcceptChanges mtodo. Mediante el uso de Delete , se puede comprobar mediante programacin qu filas estn marcados para su eliminacin antes de que realmente la eliminacin de ellos. Cuando una fila se marcan para su eliminacin, su RowState propiedad se establece eliminados . Cuando se utiliza un DataSet o DataTable junto con un DataAdapter y una fuente de datos relacional, utilice la eliminacin del mtodo DataRow para eliminar la fila. La eliminacin mtodo marca la fila como eliminados en el DataSet o DataTable , pero no lo elimina. En cambio, cuando el DataAdapter encuentra una fila marcada como eliminada , se ejecuta su DeleteCommand mtodo para eliminar la fila en el origen de datos. La fila puede ser eliminado definitivamente utilizando el AcceptChanges mtodo. Si utiliza Remover para eliminar la fila, la fila se elimina por completo de la tabla, pero el DataAdapter no eliminar la fila en el origen de datos. La Quitar mtodo de la DataRowCollection toma una DataRow como argumento y la elimina de la coleccin, como se muestra en el siguiente ejemplo. C# VB

workTable.Rows.Remove (workRow)
Por el contrario, el ejemplo siguiente se muestra cmo llamar al Delete mtodo en un objeto DataRow para cambiar su RowState a Deleted . C# VB

workRow.Delete
Si una fila est marcada para su eliminacin y se llama a la AcceptChanges mtodo de la DataTable objeto, la fila se elimina de la DataTable . Por el contrario, si se llama a RejectChanges , el RowState de la fila vuelve a lo que era antes de ser marcados como eliminados .

Nota Si el RowState de una DataRow se agreg , lo que significa que se acaba de agregar a la mesa, y entonces se marca como Deleted , se quita de la tabla.

Agregar y leer informacin de error de fila


. NET Framework 2.0
Otras versiones 0 de 1 puntuado este til - Valorar este tema Para evitar tener que responder a la fila errores durante la edicin de los valores de un DataTable , puede agregar la informacin de error en la fila para su uso posterior. El DataRow objeto proporciona una RowError propiedad en cada

fila para este propsito. Adicin de datos a la RowError propiedad de un DataRowestablece el HasErrors propiedad de la DataRow a verdadero . Si el DataRow es parte de un DataTable y DataRow.HasErrors es cierto , el DataTable.HasErrorspropiedad es tambin verdadera . Esto se aplica tambin al conjunto de datos a la que el DataTable pertenece. Cuando se prueba de errores, puede comprobar elHasErrors propiedad para determinar si la informacin de error se ha agregado a ninguna fila. Si HasErrors es cierto , puede utilizar el GetErrors mtodo de laDataTable a regresar y examinar slo las filas con errores, como se muestra en el siguiente ejemplo. C# VB

Dim mesa de trabajo Como DataTable = New DataTable ( "Clientes" ) workTable.Columns.Add ( "CustID" , Tipo. GetType ( "System.Int32" )) workTable.Columns.Add ( "Total" , Tipo. GetType ( "System.Double" )) AddHandler workTable.RowChanged, Nueva DataRowChangeEventHandler ( AddressOf OnRowChanged) Dim i como Int32 Para i = 0 a 10 workTable.Rows.Add ( Nuevo objeto () {i, i * 100}) Siguiente Si workTable.HasErrors Entonces Console.WriteLine ( "Los errores en la tabla" y workTable.TableName) Dim Myrow Como DataRow Para cada Myrow En workTable.GetErrors () Console.WriteLine ( "CustID =" y Myrow ( "CustID" ). ToString ()) Console.WriteLine ( "Error =" & vbCrLf y myRow.RowError) Siguiente Fin Si Private Shared Sub OnRowChanged (_ remitente como objeto , args Como DataRowChangeEventArgs) "Comprobar si los valores cero. Si CDbl (args.Row ( "Total" )) = 0 Entonces args.Row.RowError = _ "total no puede ser 0." End Sub

Aceptar o rechazar cambios en filas


. NET Framework 2.0
Otras versiones Este tema an no ha sido calificado - Valorar este tema Despus de verificar la exactitud de los cambios realizados a los datos en una DataTable , puede aceptar los cambios mediante la AcceptChanges mtodo de laDataRow , DataTable o DataSet , que establecer los actuales valores de la

fila para ser los originales valores y establecer el RowState propiedad Sin cambios .Aceptar o rechazar cambios limpia el RowError informacin y establece el HasErrors propiedad a falso . Aceptar o rechazar los cambios tambin pueden afectar a la actualizacin de datos en la fuente de datos. Para obtener ms informacin, vea Actualizar orgenes de datos con DataAdapters . Si las restricciones de clave existe en la DataTable , los cambios aceptados o rechazados con AcceptChanges y RejectChanges se propagan a las filas secundarias de la DataRow segn el ForeignKeyConstraint.AcceptRejectRule . Para obtener ms informacin, vea Agregar restricciones a una tabla . El siguiente ejemplo comprueba las filas con errores, resuelve los errores en su caso, y rechaza las filas en las que el error no se puede resolver. Tenga en cuenta que, de los errores resueltos, la RowError valor se restablece en una cadena vaca, haciendo que el HasErrors propiedad que se establece en false . Cuando todas las filas con errores se han resuelto o se rechaza, AcceptChanges est llamado a aceptar todos los cambios para toda la DataTable . C# VB

Si workTable.HasErrors Entonces Dim errRow Como DataRow Para cada errRow en workTable.GetErrors () Si errRow.RowError = "Total no puede exceder de 1000." Entonces errRow ( "Total" ) = 1000 errRow.RowError = "" "Borrar el error. Otras ventas errRow.RejectChanges () Fin Si Siguiente Fin Si workTable.AcceptChanges ()

Trabajar con eventos DataTable


. NET Framework 2.0
Otras versiones

8 de cada 11 ha calificado este til - Valorar este tema La DataTable objeto proporciona una serie de eventos que pueden ser procesados por una aplicacin. La siguiente tabla describe DataTable eventos.

Evento

Descripcin

Inicializado

Se produce despus de la EndInit mtodo de un objeto DataTable se llama. Este evento tiene como objetivo principal apoyar a los escenarios en tiempo de diseo.

ColumnChanged ColumnChanging RowChanged

Se produce despus de que un valor ha sido cambiado con xito en un DataColumn . Se produce cuando un valor se ha sometido a una DataColumn . Se produce despus de una DataColumn valor o el RowState de una DataRow en el objeto DataTable se ha cambiado correctamente. Se produce cuando un cambio se ha sometido a una DataColumn valor o el RowState de una DataRow en el objeto DataTable . Se produce despus de un DataRow en el objeto DataTable se ha marcado como eliminado . Se produce antes de un DataRow en el objeto DataTable est marcado como eliminado . Se produce despus de una llamada al Clear mtodo de la DataTable se ha borrado correctamente cada DataRow . Se produce despus de que el Clear mtodo se llama, pero antes de Clear operacin comienza. Se produce despus de un nuevo DataRow es creado por una llamada a la NewRow mtodo de la DataTable . Se produce cuando la DataTable se Dispuesta . Se hereda de MarshalByValueComponent .

RowChanging

RowDeleted

RowDeleting

TableCleared

TableClearing

TableNewRow

Dispuesto

Nota

La mayora de las operaciones que agregan o eliminan filas no elevar los ColumnChanged y ColumnChanging eventos. Sin embargo, el ReadXml mtodo plantea ColumnChanged y ColumnChanging eventos, a menos que el XmlReadMode se establece DiffGram o se establece en automtico cuando el documento XML que se lee es un DiffGram .

Otros eventos relacionados


El restricciones propiedad alberga una ConstraintCollection ejemplo. El ConstraintCollection clase expone una CollectionChanged evento. Este evento se desencadena cuando un obstculo se agrega, modifica o elimina de la ConstraintCollection . El Columnas propiedad alberga una coleccin DataColumnCollection ejemplo. El DataColumnCollection clase expone una CollectionChanged evento. Este evento se activa cuando un objeto DataColumn se agrega, modifica o elimina de la DataColumnCollection . Las modificaciones que hacen que el evento para disparar incluyen cambios en la posicin del nombre, tipo, expresin u ordinal de una columna. Los cuadros propiedad de un conjunto de datos tiene un DataTableCollection ejemplo. El DataTableCollection clase expone tanto a CollectionChanged y unCollectionChanging evento. Estos eventos se desencadenan cuando un DataTable se agrega o se elimina del conjunto de datos . Cambios en DataRows tambin pueden desencadenar eventos para un asociado DataView . El DataView expone una clase ListChanged evento que se activa cuando un objeto DataColumn o cuando cambia el valor de la composicin o

el criterio de ordenacin de la vista cambia. El DataRowView clase expone unPropertyChanged evento que se activa cuando una asociada DataColumn cambia el valor.

Secuencia de operaciones
Esta es la secuencia de operaciones que se producen cuando un DataRow se agrega, modifica o elimina: 1. Cree el registro propuesto y aplicar los cambios. 2. Las restricciones de comprobacin para columnas de expresin no. 3. Levante las RowChanging o RowDeleting eventos segn corresponda. 4. 5. Establecer el registro propuesto para ser el registro actual. Actualizacin de los ndices asociados. Levante ListChanged eventos asociados DataView objetos y PropertyChanged eventos para asociados DataRowView objetos. Evaluar todas las columnas de expresin, pero retrasar la comprobacin de un lmite a estas columnas. Levante ListChanged eventos asociados DataView objetos y PropertyChanged eventos para asociados DataRowView objetos afectados por las evaluaciones de expresin de columna. Levante RowChanged o RowDeleted eventos segn corresponda.

6.
7.

8. 9.

10. Comprobar restricciones sobre columnas de expresin.

Nota

Los cambios en las columnas de expresin nunca levantan DataTable eventos. Los cambios en las columnas de expresin slo levantar DataView yDataRowView eventos. Columnas de expresin pueden tener dependencias en mltiples columnas otros, y pueden ser evaluadas varias veces durante una solaDataRow operacin. Cada evaluacin de la expresin provoca eventos, y un nico objeto DataRow operacin puede plantear mltiples ListChanged yPropertyChanged eventos cuando las columnas de expresin se ve afectada, posiblemente incluyendo varios eventos para la columna de la misma expresin.

Ejemplo
En el siguiente ejemplo se muestra cmo crear controladores de eventos para y TableClearing eventos. Cada controlador de eventos muestra la salida en la ventana de la consola cuando se dispar. C# VB

Private Sub DataTableEvents () Dim tabla como DataTable = New DataTable ( "Customers" ) 'Agregar dos columnas, id y nombre. table.Columns.Add ( "id" , Tipo. GetType ( "System.Int32" )) table.Columns.Add ( "nombre" , Tipo. GetType ( "System.String" )) 'Establecer la clave principal. table.Columns ( "id" ). nico = Verdadero table.PrimaryKey = New DataColumn () {table.Columns ( "id" )} "Agregar un controlador de eventos RowChanged. AddHandler table.RowChanged, _ New DataRowChangeEventHandler ( AddressOf Row_Changed) "Agregar un controlador de eventos RowChanging. AddHandler table.RowChanging, _ New DataRowChangeEventHandler ( AddressOf Row_Changing) "Agregar un controlador de eventos RowDeleted. AddHandler table.RowDeleted, Nueva _

DataRowChangeEventHandler ( AddressOf Row_Deleted) "Agregar un controlador de eventos RowDeleting. AddHandler table.RowDeleting, Nueva _ DataRowChangeEventHandler ( AddressOf Row_Deleting) "Agregar un controlador de eventos ColumnChanged. AddHandler table.ColumnChanged, _ New DataColumnChangeEventHandler ( AddressOf Column_Changed) "Agregar un controlador de eventos ColumnChanging para la tabla. AddHandler table.ColumnChanging, Nueva _ DataColumnChangeEventHandler ( AddressOf Column_Changing) "Agregar un controlador de eventos TableNewRow. AddHandler table.TableNewRow, Nueva _ DataTableNewRowEventHandler ( AddressOf Table_NewRow) "Agregar un controlador de eventos TableCleared. AddHandler table.TableCleared, Nueva _ DataTableClearEventHandler ( AddressOf Table_Cleared) "Agregar un controlador de eventos TableClearing. AddHandler table.TableClearing, Nueva _ DataTableClearEventHandler ( AddressOf Table_Clearing) "Aadir un cliente. Dim fila como DataRow = table.NewRow () fila ( "id" ) = 1 fila ( "nombre" ) = "Customer1" table.Rows.Add (fila) table.AcceptChanges () "Cambiar el nombre del cliente. table.Rows (0). Item ( "nombre" ) = "ChangedCustomer1" "Eliminar la fila. table.Rows (0). Eliminar () 'Limpia la mesa. table.Clear () End Sub Private Sub Row_Changed ( ByVal remitente como objeto , _ ByVal e como DataRowChangeEventArgs) Console.WriteLine ( "Evento Row_Changed: name = {0}; action = {1}" , _ e.Row ( "nombre" ), e.Action) End Sub Private Sub Row_Changing ( ByVal remitente como objeto , _ ByVal e como DataRowChangeEventArgs) Console.WriteLine ( "Row_Changing Evento: name = {0}; action = {1}" , _ e.Row ( "nombre" ), e.Action) End Sub Private Sub Row_Deleted ( ByVal remitente como objeto , _ ByVal e como DataRowChangeEventArgs) Console.WriteLine ( "Evento Row_Deleted: name = {0}; action = {1}" , _

e.Row ( "nombre" , DataRowVersion.Original), e.Action) End Sub Private Sub Row_Deleting ( ByVal remitente como objeto , _ ByVal e como DataRowChangeEventArgs) Console.WriteLine ( "Row_Deleting Evento: name = {0}; action = {1}" , _ e.Row ( "nombre" ), e.Action) End Sub Private Sub Column_Changed ( ByVal remitente como objeto , _ ByVal e como DataColumnChangeEventArgs) Console.WriteLine ( "Evento Column_Changed: ColumnName = {0}; RowState = {1}" , _ e.Column.ColumnName, e.Row.RowState) End Sub Private Sub Column_Changing ( ByVal remitente como objeto , _ ByVal e como DataColumnChangeEventArgs) Console.WriteLine ( "Evento Column_Changing: ColumnName = {0}; RowState = {1}" , _ e.Column.ColumnName, e.Row.RowState) End Sub Private Sub Table_NewRow ( ByVal remitente como objeto , _ ByVal e como DataTableNewRowEventArgs) Console.WriteLine ( "Evento Table_NewRow: RowState = {0}" , _ e.Row.RowState.ToString ()) End Sub Private Sub Table_Cleared ( ByVal remitente como objeto , _ ByVal e como DataTableClearEventArgs) Console.WriteLine ( "Evento Table_Cleared: TableName = {0}; Filas = {1}" , _ e.TableName, e.Table.Rows. Conde . ToString ()) End Sub Private Sub Table_Clearing ( ByVal remitente como objeto , _ ByVal e como DataTableClearEventArgs) Console.WriteLine ( "Table_Clearing evento: TableName = {0}; Filas = {1}" , _ e.TableName, e.Table.Rows. Conde . ToString ()) End Sub

Combinar contenido de DataSet


. NET Framework 2.0
Otras versiones

13 de los 19 ha calificado este til - Valorar este tema Usted puede utilizar el Merge mtodo para combinar el contenido de un DataSet , DataTable o DataRow matriz en una ya existente DataSet . Varios factores y opciones afectar la cantidad de datos nuevos se combina en una ya existente DataSet , incluyendo claves primarias, nombres de tabla y espacios de nombres,preserveChanges , MissingSchemaAction y restricciones.

Claves Primarias
Si la tabla de recibir nuevos datos y el esquema de una mezcla tiene una clave principal, las nuevas filas de los datos de entrada se corresponden con las filas existentes que tienen los mismos originales de valores de clave principal como las de los datos entrantes. Si las columnas del esquema entrante coinciden con los del esquema existente, los datos de las filas existente es modificada. Las columnas que no coinciden con el esquema existentes son ignorados o aadido basado en la MissingSchemaAction parmetro. Las nuevas filas con valores de clave principal que no coincidan con las filas existentes se agregarn a la tabla existente. Si las filas entrantes o existentes tienen un estado de fila aadida , sus valores de clave principal se corresponden con el actual valor de clave principal de la Alta fila porque no original versin de fila existe. Si una tabla entrante y una tabla existente contiene una columna con el mismo nombre pero con diferentes tipos de datos, se produce una excepcin y elMergeFailed caso de que el conjunto de datos se levanta. Si una tabla entrante y una tabla existente que ambos han definido teclas, pero las claves primarias son para las columnas diferentes, se produce una excepcin y el MergeFailed caso de que el conjunto de datos se levanta. Si la tabla de recibir nuevos datos a partir de una mezcla no tiene una clave principal, las nuevas filas de los datos de entrada no puede ser igualada a las filas existentes en la tabla y en cambio se agregarn a la tabla existente.

Nombres de tabla y espacios de nombres


DataTable objetos opcionalmente se le puede asignar un espacio de nombres valor de la propiedad. Cuando espacios de nombres se asignan valores, un conjunto de datos puede contener varias DataTable objetos con el mismo TableName valor. Durante las operaciones de fusin, tanto TableName y espacio de nombres se utilizan para identificar el destino de una combinacin. Si no hay ningn espacio de nombres se ha asignado, slo el TableName se utiliza para identificar el destino de una combinacin.

Nota Este comportamiento ha cambiado en la versin 2.0 del Marco. NET. En la versin 1.1, los espacios de nombres con el apoyo, pero fueron ignorados durante las operaciones de fusin. Por esta razn, un conjunto de datos que utiliza espacios de nombres valores de las propiedades tendrn diferentes comportamientos dependiendo de la versin del Marco. NET que est ejecutando. Por ejemplo, supongamos que tiene dos conjuntos de datos que contienen tablas de datos con los mismos TableName valores de la propiedad, pero diferentes espacios de nombres valores de propiedad. En la versin 1.1 del Marco. NET, los diferentesespacios de nombres nombres se ignorarn cuando la fusin de las dos DataSet objetos. Sin embargo, en la versin 2.0 del Marco. NET, provoca la fusin de dos nuevas tablas de datos que se crear en el objetivo conjunto de datos . Los originales tablas de datos no se vern afectados por la fusin.

PreserveChanges
Cuando se pasa un DataSet , DataTable o DataRow matriz al Merge mtodo, puede incluir parmetros opcionales que especifican si se conservarn o no cambios en el actual conjunto de datos y cmo manejar los nuevos elementos de esquema que se encuentran en los datos entrantes. El primero de estos parmetros despus de que los datos de entrada es un indicador booleano, PreserveChanges , que especifica si o no a conservar los cambios en la existente DataSet . Si elPreserveChanges indicador se establece en verdadero , los valores entrantes no sobrescriben los valores existentes en la actual versin de la fila de la fila existente.Si el PreserveChanges indicador

se establece en falsos valores entrantes sobrescriben los valores existentes en la actual versin de la fila de la fila existente. Si elPreserveChanges bandera no se especifica, se establece en false de forma predeterminada. Para obtener ms informacin acerca de las versiones de fila, veaEstados de fila y versiones de fila . Cuando PreserveChanges es cierto , los datos de la fila existente se mantiene en la actual versin de la fila de la fila existente, aunque los datos de la originalversin de la fila de la fila existente se sobrescribe con los datos de la original versin de la fila de la fila de entrada. El RowState de la fila existente se establece enModified . Aplican las siguientes excepciones: Si la fila existente tiene un RowState de Deleted , el RowState sigue siendo eliminados y no se establece en Modified . Los datos de la fila entrante se guardarn en la original versin de la fila de la fila existente, sobrescribiendo el original versin de la fila de la fila existente (a menos que la fila entrante tiene un RowState de Alta ). Si la fila entrante tiene un RowState de Added , los datos de la original versin de la fila de la fila existente

no se sobrescribirn con los datos de la fila de entrada, ya que la fila de entrada no tiene una original versin de fila. Cuando PreserveChanges es falso , tanto los actuales y originales versiones de fila de la fila existente se sobrescribe con los datos de la fila de entrada, y elRowState de la fila existente se establece en el RowState de la fila de entrada. Aplican las siguientes excepciones: Si la fila entrante tiene un RowState de Sin cambios y la fila existente tiene

un RowState de Modified , Deleted o Alta , el RowState de la fila existente se establece en Modified . Si la fila entrante tiene un RowState de Alta y la fila existente tiene un RowState de Sin cambios , modificado o suprimido , el RowState de la fila existente se establece en Modified . Adems, los datos de la original versin de la fila de la fila existente no se sobrescribe con los datos de la fila de entrada porque la fila de entrada no tiene una original versin de fila.

MissingSchemaAction
Usted puede utilizar el opcional MissingSchemaAction parmetro de la fusin mtodo para especificar el modo de mezcla se encargar de los elementos del esquema de los datos entrantes que no forman parte del actual conjunto de datos . La siguiente tabla describe las opciones para MissingSchemaAction .

MissingSchemaAction opcin Aadir

Descripcin

Aadir la nueva informacin de esquema para el conjunto de datos y poblar las nuevas columnas con los valores entrantes. Este es el valor predeterminado. Aadir el nuevo esquema y la informacin clave principal a la DataSet y rellenar las nuevas columnas con los valores entrantes. Lanza una excepcin si la informacin de esquema coincidente se encuentra. No haga caso de la nueva informacin de esquema.

AddWithKey

Error Pasar por alto

Limitaciones
Con la fusin mtodo, las restricciones no se comprueban hasta que todos los datos se ha aadido a la ya existente DataSet . Una vez que los datos han sido aadidas, las restricciones se aplican a los valores actuales en el conjunto de datos . Debe asegurarse de que el cdigo controla las excepciones que puedan ser arrojados por violacines de restriccin. Considere un caso en el que una fila existente en un conjunto de datos es una inalterado fila con un valor de clave principal de 1. Durante una operacin de combinacin con una modificacin fila de entrada con un original valor de

clave principal de 2 y un actual valor de clave principal de 1, la fila actual y la fila de entrada no se consideran coincidentes debido a que los originales valores de clave principal diferente. Sin embargo, cuando se completa la combinacin y las restricciones se comprueban, una excepcin ser lanzada debido a que los actuales valores de clave principal violar la restriccin de unicidad para la columna de clave principal.

Nota Cuando se insertan registros en una tabla de base de datos que contiene una columna de incremento automtico, como una columna de identidad, el valor de columna de identidad devuelto por el inserto no coincida con el valor en el conjunto de datos , haciendo que las filas devueltas para ser aadido en lugar de fusionarse. Para obtener ms informacin, vea Recuperar valores de identidad o Autonumrico .
En el ejemplo de cdigo siguiente combina dos DataSet con esquemas diferentes objetos en un conjunto de datos con los esquemas combinados de los dos entrantes DataSet objetos. C# VB

Con conexin Como SqlConnection = New SqlConnection (_ connectionString) Dim adaptador Como SqlDataAdapter = New SqlDataAdapter (_ "SELECT IdCliente, NombreCompaa FROM Clientes" , conexin) Connection.Open () Dim clientes As DataSet = New DataSet () adapter.FillSchema (clientes, SchemaType.Source, "Clientes" ) adapter.Fill (clientes, "Clientes" ) Dim rdenes As DataSet = New DataSet () orders.ReadXml ( "orders.xml" , XmlReadMode.ReadSchema) orders.AcceptChanges () customers.Merge (pedidos, verdaderos , MissingSchemaAction.AddWithKey) End Uso
En el ejemplo de cdigo siguiente se toma una ya existente DataSet con actualizaciones y pasa los cambios a un DataAdapter para ser procesados en la fuente de datos. Los resultados se fusionaron en el original conjunto de datos . Despus de rechazar los cambios que resultaron en un error, los cambios fusionados estn comprometidos con AcceptChanges . C# VB

Dim clientes As DataTable = dataSet.Tables ( "Clientes" ) "Hacer modificaciones a la tabla Clientes. "Obtener cambios en el DataSet. Dim dataSetChanges As DataSet = DataSet.GetChanges () "Agregar un controlador de eventos para controlar los errores durante la actualizacin. AddHandler adapter.RowUpdated, Nueva SqlRowUpdatedEventHandler (_ AddressOf OnRowUpdated) Connection.Open () adapter.Update (dataSetChanges, "Clientes" ) Connection.close ()

'Combinar las actualizaciones. DataSet.Merge (dataSetChanges, verdadero , MissingSchemaAction.Add) "Rechazar los cambios en las filas con errores y borrar el error. Dim errRows () As DataRow = dataSet.Tables ( "Clientes" ). GetErrors () Dim errRow Como DataRow Para Cada errRow En errRows errRow.RejectChanges () errRow.RowError = Nada Siguiente 'Confirmar los cambios. dataSet.AcceptChanges ()

C# VB

Private Sub OnRowUpdated (_ ByVal remitente como objeto , ByVal args Como SqlRowUpdatedEventArgs) Si args.Status = UpdateStatus.ErrorsOccurred Entonces args.Row.RowError = args.Errors.Message args.Status = UpdateStatus.SkipCurrentRow Fin Si Fin Sub

Creacin y uso de un DataTableReader


. NET Framework 2.0
Otras versiones 0 de 6 puntuado este til - Valorar este tema El DataTableReader presenta el contenido de un DataTable o un DataSet en forma de uno o ms de slo lectura, los conjuntos de resultados de slo avance.

Cuando se crea un objeto DataTableReader desde una DataTable , el resultado DataTableReader objeto contiene un conjunto de resultados con los mismos datos que el DataTable desde que fue creado, a excepcin de las filas que se han marcado como eliminado. Las columnas aparecen en el mismo orden que en el original DataTable . A DataTableReader puede contener varios conjuntos de resultados si se crea llamando CreateDataReader . Los resultados estn en el mismo orden que las tablas de datos en el DataSet objeto Tablas coleccin.

Crear un DataTableReader
. NET Framework 2.0
Otras versiones 0 de 2 puntuado este til - Valorar este tema Los DataTable y DataSet clases tienen un CreateDataReader mtodo que devuelve el contenido de la DataTable o el contenido del DataSet objeto Tablas coleccin como una o ms de slo lectura, slo avance de conjuntos de resultados.

Ejemplo
La aplicacin de consola siguiente se crea un DataTable ejemplo. A continuacin, se pasa el llenado DataTable a un procedimiento que llama al CreateDataReadermtodo, que se repite a travs de los resultados contenidos en el DataTableReader . C# VB

Private Sub TestCreateDataReader ( ByVal dt Como DataTable) 'dado un DataTable, recuperar un objeto DataTableReader "permitiendo el acceso a todos los datos de las tablas es: Con lector Como DataTableReader dt.CreateDataReader = () Do Si No reader.HasRows Entonces Console.WriteLine ( "Empty DataTableReader " ) lo dems PrintColumns (lector) Fin Si Console.WriteLine ( "========================" ) Loop Mientras reader.NextResult () End Uso End Sub Privado Funcin GetCustomers () Como DataTable 'Crear muestra la tabla Clientes, con el fin de "demostrar el comportamiento de la DataTableReader. Dim tabla Como Nuevo DataTable 'Crear dos columnas, ID y el nombre. Dim idColumn Como DataColumn = table.Columns.Add ( "ID" , GetType ( Integer )) table.Columns.Add ( "Nombre" , GetType ( cadena )) 'Establecer la columna ID como columna de clave primaria.

table.PrimaryKey = New DataColumn () {} idColumn table.Rows.Add table.Rows.Add table.Rows.Add table.Rows.Add Volver mesa final Funcin ( ( ( ( Nuevo Nuevo Nuevo Nuevo objeto objeto objeto objeto () () () () {1, {2, {3, {4, "Mara" }) "Andy" }) "Peter" }) "Russ" })

Private Sub PrintColumns (_ ByVal lector Como DataTableReader) . 'Recorrer todas las filas de la DataTableReader hacer bien reader.Read () Para i Como Integer = 0 Para reader.FieldCount - 1 Console.Write (lector (i). ToString () & "" ) Siguiente Console.WriteLine () Loop End Sub
El ejemplo muestra el siguiente resultado en la ventana de la consola:

1 2 3 4

Mary Andy Peter Russ

Navegacin por el contenido de un DataTableReader


. NET Framework 2.0
Otras versiones 1 de cada 3 ha calificado este til - Valorar este tema El DataTableReader obtiene el contenido de uno o ms DataTable objetos en forma de uno o ms de slo lectura, los conjuntos de resultados slo hacia delante. A DataTableReader puede contener varios conjuntos de resultados si se crea mediante el uso de la CreateDataReader mtodo. Cuando hay ms de un conjunto de resultados, los NextResult mtodo, el cursor para el conjunto de resultados siguiente. Este es un proceso de slo avance. No es posible volver a un conjunto de resultados anterior.

Ejemplo
En el siguiente ejemplo, el TestConstructor mtodo crea dos DataTable casos. Para demostrar este constructor para el objeto DataTableReader clase, el ejemplo crea un nuevo objeto DataTableReader basado en una matriz

que contiene las dos tablas de datos , y realiza una operacin simple, la impresin de los contenidos de las primeras columnas de la ventana de la consola. C# VB

Private Sub TestConstructor () 'Crear dos adaptadores de datos, una para cada uno de los dos "tablas de datos a rellenar. Dim customerDataTable Como DataTable = GetCustomers () Dim productDataTable Como DataTable = GetProducts () 'Crear el nuevo DataTableReader. Usando lector Como Nuevo DataTableReader (_ New DataTable () {customerDataTable, productDataTable}) "Imprimir el contenido de cada uno de los conjuntos de resultados. No PrintColumns (lector) Loop Mientras reader.NextResult () End Uso Console.WriteLine ( "Presione Enter para terminar." ) Console.ReadLine () End Sub Privado Funcin GetCustomers () Como DataTable 'Crear muestra la tabla Clientes, con el fin de "demostrar el comportamiento de la DataTableReader. Dim tabla Como Nuevo DataTable 'Crear dos columnas, ID y el nombre. Dim idColumn Como DataColumn = table.Columns.Add ( "ID" , GetType ( Integer )) table.Columns.Add ( "Nombre" , GetType ( cadena )) 'Establecer la columna ID como columna de clave primaria. table.PrimaryKey = New DataColumn () {} idColumn table.Rows.Add table.Rows.Add table.Rows.Add table.Rows.Add Volver mesa final Funcin ( ( ( ( Nuevo Nuevo Nuevo Nuevo objeto objeto objeto objeto () () () () {1, {2, {3, {4, "Mara" }) "Andy" }) "Peter" }) "Russ" })

Private Function GetProducts () As DataTable 'Crear muestra la tabla Products, con el fin de "demostrar el comportamiento de la DataTableReader. Dim tabla Como Nuevo DataTable 'Crear dos columnas, ID y el nombre. Dim idColumn Como DataColumn = table.Columns.Add ( "ID" , GetType ( Integer )) table.Columns.Add ( "Nombre" , GetType ( cadena )) 'Establecer la columna ID como columna de clave primaria. table.PrimaryKey = New DataColumn () {} idColumn table.Rows.Add table.Rows.Add table.Rows.Add table.Rows.Add ( ( ( ( Nuevo Nuevo Nuevo Nuevo objeto objeto objeto objeto () () () () {1, {2, {3, {4, "Tarjeta de red inalmbrica" }) "disco duro" }) "Monitor" }) "CPU" })

Volver mesa final Funcin Private Sub PrintColumns (_ ByVal lector Como DataTableReader) . 'Recorrer todas las filas de la DataTableReader hacer bien reader.Read () Para i Como Integer = 0 Para reader.FieldCount - 1 Console.Write (lector (i). ToString () & "" ) Siguiente Console.WriteLine () Loop End Sub

Crear y utilizar DataViews


. NET Framework 2.0
Otras versiones 0 de 5 puntuado este til - Valorar este tema Un DataView le permite crear diferentes vistas de los datos almacenados en una DataTable , una capacidad que se utiliza a menudo en aplicaciones de enlace de datos. El uso de un DataView , puede exponer los datos en una tabla con diferentes criterios de ordenacin, y se puede filtrar los datos por estado de fila o basndose en una expresin de filtro. Un DataView proporciona una vista dinmica de datos en el subyacente DataTable : el contenido, el orden y pertenencia reflejar los cambios que se producen. Este comportamiento difiere de la Seleccin mtodo de la DataTable , que devuelve un DataRow matriz a partir de una tabla basada en un filtro especial y / o orden de clasificacin: Este contenido refleja los cambios en la tabla subyacente, pero su composicin y ordenando permanecer esttico. Las capacidades dinmicas de laDataView lo hacen ideal para aplicaciones de enlace de datos. Un DataView le proporciona una vista dinmica de un conjunto nico de datos, al igual que una vista de base de datos, a los que puede aplicar diferentes criterios de clasificacin y filtrado. A diferencia de una base de datos de vista, sin embargo, un DataView no puede ser tratada como una tabla y no puede proporcionar una vista de tablas combinadas. Tampoco se puede excluir columnas que existen en la tabla de origen, ni se puede aadir columnas, como las columnas de clculo, que no existen en la tabla de origen. Puede utilizar un DataViewManager para administrar la configuracin de vista para todas las tablas de un DataSet . El DataViewManager le proporciona una forma cmoda de administrar la configuracin de vista predeterminada para cada tabla. Al enlazar un control a ms de una tabla de un DataSet , la unin a unDataViewManager es la eleccin ideal.

Creacin de un DataView
. NET Framework 2.0
Otras versiones 2 de 4 puntuado este til - Valorar este tema Hay dos formas de crear un DataView . Usted puede utilizar el DataView constructor, o puede crear una referencia a la DefaultView propiedad de la DataTable . ElDataView constructor puede estar vaco, o puede tomar un DataTable como un solo argumento, o un DataTable junto con criterios de filtro, los criterios de ordenacin, y un filtro de fila del estado. Para obtener ms informacin acerca de los argumentos adicionales disponibles para su uso con el DataView , veaOrdenar y filtrar datos mediante DataView . Debido a que el ndice de un DataView se basa tanto en el DataView se crea, y cuando alguna de las Ordenar , RowFilter o RowStateFilter propiedades se modifican, se consigue un mejor rendimiento mediante el suministro de cualquier tipo de ordenacin inicial o criterios de filtrado como argumentos del constructor cuando se crea el DataView . Creacin de un DataView sin especificar especie o criterios de filtro y despus colocar el Sort , RowFilter oRowStateFilter propiedades ms adelante hace que el ndice que se construir por lo menos dos veces: una vez cuando el DataView se crea, y de nuevo cuando alguna de las propiedades del filtro tipo o se modifican . Tenga en cuenta que si crea un DataView utilizando el constructor que no toma ningn argumento, usted no ser capaz de utilizar el DataView hasta que haya establecido la Tabla propiedad. En el ejemplo de cdigo siguiente se muestra cmo crear un DataView utilizando el DataView constructor. A RowFilter , Ordenar columna y DataViewRowStatese suministran junto con el DataTable . C# VB

Dim custDV Como DataView = New DataView (custDS.Tables ( "Clientes" ), _ "Country = 'EE.UU.'" , _ "ContactName" , _ DataViewRowState.CurrentRows)
En el ejemplo de cdigo siguiente se muestra cmo obtener una referencia a los valores de DataView de un DataTable utilizando el DefaultView propiedad de la mesa. C# VB

Dim custDV Como DataView = custDS.Tables ( "Clientes" ). DefaultView

Ordenar y filtrar datos mediante DataView


. NET Framework 2.0
Otras versiones

4 de 8 puntuado este til - Valorar este tema El DataView proporciona varias maneras de ordenar y filtrar los datos de un DataTable : Usted puede utilizar el Ordenar propiedad para especificar las rdenes de columnas simples o mltiples de

orden e incluyen ASC (ascendente) y los parmetros de DESC (descendente). Usted puede utilizar el ApplyDefaultSort propiedad para crear automticamente un orden de clasificacin, en orden ascendente, basado en la columna de clave primaria o columnas de la tabla. ApplyDefaultSort slo se aplica cuando el Ordenar propiedad es referencia null o una cadena vaca, y cuando la mesa se ha una clave principal definida. Usted puede utilizar el RowFilter propiedad para especificar subconjuntos de filas en funcin de sus valores de columna. Para ms informacin sobre expresiones vlidas para la RowFilter propiedad, vea la informacin de referencia para la expresin de la propiedad DataColumn clase. Si desea devolver los resultados de una consulta en particular en los datos, en lugar de proporcionar una visin dinmica de un subconjunto de los datos, utilice la Bsqueda o FindRows mtodos de la DataView para alcanzar el mejor rendimiento en lugar de establecer la RowFilter propiedad. Ajuste de laRowFilter propiedad reconstruye el ndice de los datos, aadiendo sobrecarga a la aplicacin y disminuir el rendimiento. El RowFilter esta propiedad se puede utilizar en una aplicacin enlazado a datos donde un control dependiente muestra resultados filtrados. La Bsqueda y FindRows mtodos aprovechan el ndice actual sin que el ndice que se va reconstruyendo. Para obtener ms informacin acerca de las Encuentra y FindRows mtodos, consulte Bsqueda de un DataView . Usted puede utilizar el RowStateFilter propiedad para especificar las versiones de fila para verlo. El DataView implcitamente que gestiona fila versin para exponer dependiendo de la RowState de la fila subyacente. Por ejemplo, si el RowStateFilter se establece DataViewRowState.Deleted , el DataViewexpone la original versin de la fila de todos los eliminados filas porque no hay actual versin de fila. Puede determinar qu versin de fila de una fila est siendo expuesto a travs de la RowVersion propiedad de la DataRowView . La tabla siguiente muestra las opciones para DataViewRowState .

DataViewRowState opciones CurrentRows

Descripcin

La actual versin de la fila de todos los Unchanged , Added y Modified filas. Este es el valor predeterminado. La actual versin de fila de todas las Aadido filas. La original versin de la fila de todos los eliminados filas. La actual versin de la fila de todos Modificados filas. La original versin de fila de todas las Modificados filas. No hay filas. La original versin de la fila de todos los no modificados , modificados y eliminados filas. La actual versin de la fila de todos sin cambios filas.

Adicional Suprimido ModifiedCurrent ModifiedOriginal Ninguno OriginalRows

Sin cambios

Para obtener ms informacin sobre los estados de fila y versiones de fila, vea Estados de fila y versiones de fila .

En el ejemplo de cdigo siguiente se crea una vista que muestra todos los productos en los que el nmero de unidades en stock es menor o igual al nivel de pedido, ordenadas en primer lugar por ID de proveedor y luego por nombre de producto. C# VB

Dim prodView Como DataView = New DataView (prodDS.Tables ( "Productos" ), _ "UnitsInStock <= ReorderLevel" , _ "IdProveedor, ProductName" , _ DataViewRowState.CurrentRows)

Visualizacin de datos mediante un DataView


. NET Framework 2.0
Otras versiones 0 de 3 puntuado este til - Valorar este tema El DataView se usa comnmente en aplicaciones de enlace de datos, donde un control expone el contenido de la tabla subyacente como una vista. Los temas siguientes describen cmo exponer el contenido de un DataView a un control personalizado, o en una aplicacin que no est enlazado a datos, incluida la forma de buscar determinados valores en un DataView y cmo crear vistas de datos de nios de padres e hijos relaciones.

Ver el contenido de un DataView


. NET Framework 2.0

Otras versiones

0 de 1 puntuado este til - Valorar este tema Un DataView expone una coleccin enumerable de DataRowView objetos. Los DataRowView objetos exponen los valores como matrices de objetos que estn indexadas en el nombre o la referencia ordinal de la columna en la tabla subyacente. Puede acceder a la DataRow que expone la DataRowView mediante el uso de la Fila propiedad de la DataRowView . Al ver los valores mediante el uso de un DataRowView , la RowStateFilter propiedad de la DataView determina qu versin de la fila subyacente DataRow se expone. Para obtener informacin sobre cmo acceder a las diferentes versiones de filas utilizando un DataRow , vea Estados de fila y versiones de fila . En el ejemplo de cdigo siguiente se muestran todos los valores actuales y originales de una tabla. C# VB

Dim catView Como DataView = New DataView (catDS.Tables ( "Categoras" )) Console.WriteLine ( "Valores actuales:" ) WriteView (catView) Console.WriteLine ( "Valores originales:" ) catView.RowStateFilter = DataViewRowState.ModifiedOriginal WriteView (catView) Public Shared Sub WriteView (thisDataView Como DataView) Dim rowView Como DataRowView Dim i como Integer Para cada rowView En thisDataView Para i = 0 Para thisDataView.Table.Columns. Count - 1 Console.Write (rowView (i) & vbTab) Prximo Console.WriteLine () Next End Sub

Bsqueda de un DataView
. NET Framework 2.0

Otras versiones

4 de 9 puntuado este til - Valorar este tema Puede buscar filas en funcin de sus valores clave de ordenacin mediante la Bsqueda y FindRows mtodos de la DataView . La sensibilidad caso de valores de bsqueda en las Encuentra y FindRows mtodos se determina por la CaseSensitive propiedad del subyacente DataTable . Valores de bsqueda debe coincidir con los valores de criterio de ordenacin existentes en su totalidad con el fin de devolver un resultado. La Bsqueda mtodo devuelve un entero con el ndice de la DataRowView que coincida con los criterios de bsqueda. Si ms de una fila coincide con los criterios de bsqueda, slo el ndice de coincidencia de la primera DataRowView se devuelve. Si no se encuentran coincidencias, Find devuelve -1. Para devolver los resultados de bsqueda que coinciden con varias filas, utilice el FindRows mtodo. FindRows funciona igual que la Bsqueda mtodo, excepto que devuelve un DataRowView matriz que hace referencia todas las filas coincidentes en la DataView . Si no se encuentran coincidencias, el DataRowView array estar vaca. Para utilizar la Bsqueda o FindRows mtodos que debe especificar un criterio de ordenacin o bien mediante el establecimiento de ApplyDefaultSort averdadero o utilizando el Ordenar propiedad. Si no se especifica el orden de clasificacin, se produce una excepcin. La Bsqueda y FindRows mtodos toman una serie de valores como entrada cuya longitud coincide con el nmero de columnas en el orden de clasificacin. En el caso de una especie en una sola columna, se puede pasar un solo valor. Para los criterios de ordenacin que contienen varias columnas, se pasa una matriz de objetos. Tenga en cuenta que para una especie en varias columnas, los valores de la matriz de objetos debe coincidir con el orden de las columnas especificadas en la Sort de la propiedad DataView . En el ejemplo de cdigo siguiente se muestra la ENCONTRAR mtodo que se llama contra un DataView con un orden de columnas solo gnero. C# VB

Dim custView Como DataView = _ New DataView (custDS.Tables ( "Clientes" ), "" , _ "CompanyName" , DataViewRowState.CurrentRows) Dim rowIndex Como Integer = custView.Find ( "La caja de Cracker" ) Si rowIndex = -1 Entonces Console.WriteLine ( "No hay coincidencias". ) Otras ventas Console.WriteLine ( "{0}, {1}" , _ custView (rowIndex) ( "IdCliente" ). ToString (), _ custView (rowIndex) ( "CompanyName" ). ToString ()) End Si
Si su Ordenar propiedad especifica varias columnas, debe pasar un array de objetos con los valores de bsqueda para cada columna en el orden especificado por el Ordenar propiedad, como en el ejemplo de cdigo siguiente. C# VB

Dim custView Como DataView = _ New DataView (custDS.Tables ( "Clientes" ), "" , _ "CompanyName, ContactName" , _ DataViewRowState.CurrentRows) Dim foundRows () Como DataRowView = _ custView.FindRows ( Nuevo objeto () { "La caja de Cracker" , "Liu Wong" }) Si foundRows.Length = 0 Entonces

Console.WriteLine ( "No hay coincidencias". ) Otras ventas Dim mydrv Como DataRowView Para Cada mydrv En foundRows Console.WriteLine ( "{0}, {1}" , _ mydrv ( "CompanyName" ). ToString (), mydrv ( "ContactName" ). ToString ()) Siguiente Fin Si

Relaciones desplazarse mediante un DataView


. NET Framework 2.0
Otras versiones 1 de 1 puntuado este til - Valorar este tema Si existe una relacin entre las tablas de un DataSet , puede crear un DataView que contiene filas de la tabla secundaria relacionada con la CreateChildView mtodo de la DataRowView para las filas de la tabla principal. Por ejemplo, el cdigo siguiente muestra las categoras y sus correspondientes productos por orden alfabtico ordenar por CategoryName y ProductName . C# VB

Dim catTable Como DataTable = catDS.Tables ( "Categoras" ) Dim prodTable Como DataTable = catDS.Tables ( "Productos" ) 'Crear una relacin entre las tablas Categoras y Productos. Dim relacin como DataRelation = catDS.Relations.Add ( "CatProdRel" , _ catTable.Columns ( "CategoryID" ), _ prodTable.Columns ( "CategoryID" )) 'Crear DataViews para las tablas Categoras y Productos. Dim catView Como DataView = New DataView (catTable, "" , _ "CategoryName" , DataViewRowState.CurrentRows) Dim prodView Como DataView 'Iterar a travs de la tabla Categoras. Dim catDRV, prodDRV Como DataRowView Para cada catDRV En catView Console.WriteLine (catDRV ( "CategoryName" )) 'Crear un objeto DataView de los registros secundarios de productos. prodView = catDRV.CreateChildView (relacin) prodView.Sort = "ProductName"

Para cada prodDRV En prodView Console.WriteLine (vbTab y prodDRV ( "ProductName" )) Siguiente Siguiente

Modificar datos con un DataView


. NET Framework 2.0
Otras versiones 2 de cada 3 ha calificado este til - Valorar este tema Usted puede utilizar el DataView para agregar, eliminar o modificar las filas de datos de la tabla subyacente. La capacidad de utilizar el DataView para modificar los datos de la tabla subyacente se controla mediante el establecimiento de una de las tres propiedades booleanas de la DataView . Estas propiedades son AllowNew ,AllowEdit y AllowDelete . Se establece en verdadero de forma predeterminada. Si AllowNew es cierto , puede utilizar el AddNew mtodo de la DataView para crear un nuevo DataRowView . Tenga en cuenta que una nueva fila no se agrega en realidad al subyacente DataTable hasta el EndEdit mtodo de la DataRowView se llama. Si el CancelEdit mtodo de la DataRowView se llama, la nueva fila se descarta. Tenga en cuenta tambin que slo puede editar un DataRowView a la vez. Si llama a la AddNew o BeginEdit mtodo de la DataRowView mientras que una fila pendiente existe, EndEdit se llama implcitamente en la fila de espera. Cuando EndEdit se llama, los cambios se aplican a la subyacente DataTable y ms tarde puede ser confirmado o rechazado mediante el AcceptChanges o RejectChanges mtodos del objeto DataTable , DataSet o DataRow objeto. Si AllowNewes falsa , se produce una excepcin si se llama al AddNew mtodo de la DataRowView . Si AllowEdit es cierto , se puede modificar el contenido de un DataRow mediante el DataRowView . Puede confirmar los cambios en la fila subyacente mediante DataRowView.EndEdit o rechazar los cambios usando DataRowView.CancelEdit . Tenga en cuenta que slo una fila puede ser editado a la vez. Si se llama a losAddNew o BeginEdit mtodos de la DataRowView mientras que una fila pendiente existe, EndEdit se llama implcitamente en la fila de espera. Cuando EndEdit se llama, los cambios propuestos se colocan en la actual versin de la fila del subyacente DataRow y ms tarde puede ser confirmado o rechazado mediante elAcceptChanges o RejectChanges mtodos del objeto DataTable , DataSet o DataRow objeto. Si AllowEdit es falsa , se produce una excepcin si se intenta modificar un valor en el DataView . Cuando uno ya existente DataRowView se est editando, los acontecimientos de la subyacente DataTable todava se incrementar con los cambios propuestos.Tenga en cuenta que si usted llama a EndEdit o CancelEdit en el subyacente DataRow , los cambios pendientes se aplica o cancelado sin importar si EndEdit oCancelEdit se llama en el DataRowView . Si AllowDelete es cierto , puede eliminar filas de la DataView mediante la eliminacin mtodo de la DataView o DataRowView objeto, y las filas se eliminan del subyacente DataTable . Ms tarde, puede confirmar o rechazar las eliminaciones utilizando AcceptChanges o RejectChanges respectivamente. Si AllowDelete esfalsa , se produce una excepcin si se llama a la eliminacin del mtodo DataView o DataRowView .

El siguiente ejemplo de cdigo desactiva utilizando el DataView para eliminar filas y agrega una nueva fila a la tabla subyacente mediante la DataView . C# VB

Dim custTable Como DataTable = custDS.Tables ( "Customers" ) Dim custView Como DataView = custTable.DefaultView custView.Sort = "CompanyName" custView.AllowDelete = False Dim newDRV Como DataRowView custView.AddNew = () newDRV ( "IdCliente" ) = "ABCDE" newDRV ( "CompanyName" ) = "ABC Products" newDRV.EndEdit ()

Trabajar con eventos DataView


. NET Framework 2.0
Otras versiones 1 de cada 3 ha calificado este til - Valorar este tema Usted puede utilizar el ListChanged caso de DataView para determinar si un punto de vista ha sido actualizado. Las actualizaciones que aumentan el evento incluyen agregar, eliminar o modificar una fila en la tabla subyacente, agregar o eliminar una columna en el esquema de la tabla subyacente, y un cambio en la relacin entre padres y nios. El ListChanged evento tambin le avisa si la lista de filas que est viendo ha cambiado significativamente debido a la aplicacin de un nuevo criterio de ordenacin o un filtro. El ListChanged evento implementa el ListChangedEventHandler delegado de la System.ComponentModel espacio de nombres y toma como entrada unListChangedEventArgs objeto. Puede determinar qu tipo de cambio se ha producido con el ListChangedType valor de enumeracin en el ListChangedTypepropiedad de la ListChangedEventArgs objeto. Para los cambios que implican agregar, eliminar o mover filas, el nuevo ndice de la fila agregado o movido y el ndice anterior de la fila eliminada se puede acceder mediante el NewIndex propiedad de la ListChangedEventArgs objeto. En el caso de una fila movido, el ndice de la fila anterior movido se puede acceder usando el OldIndex caracterstica de la ListChangedEventArgs objeto. El DataViewManager tambin expone una ListChanged evento para que le notifique si una tabla se ha aadido o eliminado, o si un cambio se ha hecho para la Relaciones de la coleccin subyacente DataSet . En el ejemplo de cdigo siguiente se muestra cmo agregar un ListChanged controlador de eventos. C# VB

AddHandler custView.ListChanged, _ New System.ComponentModel.ListChangedEventHandler (_ AddressOf OnListChanged) Private Shared Sub OnListChanged (_

remitente como objeto , args Como System.ComponentModel.ListChangedEventArgs) Console.WriteLine ( "ListChanged:" ) Console.WriteLine (vbTab y "Type =" & _ Sistema. Enum . GetName (args.ListChangedType. GetType (), _ args.ListChangedType)) Console.WriteLine (vbTab y "OldIndex =" y args.OldIndex) Console.WriteLine (vbTab y "NewIndex =" y args.NewIndex) End Sub

Configuracin de vistas de tabla predeterminadas mediante DataViewManager


. NET Framework 2.0
Otras versiones 1 de 2 puntuado este til - Valorar este tema Puede utilizar un DataViewManager para administrar la configuracin de vista para todas las tablas de una DataView . Si usted tiene un control que desea enlazar a varias tablas, como una red que navega las relaciones, un DataViewManager es ideal. El DataViewManager contiene una coleccin de DataViewSetting objetos que se utilizan para establecer la configuracin de la vista de las tablas en el DataSet . ElDataViewSettingCollection contiene una DataViewSetting objeto para cada tabla en un DataSet . Usted puede establecer el valor predeterminadoApplyDefaultSort , Ordenar , RowFilter y RowStateFilter propiedades de la tabla referenciada mediante su DataViewSetting . Puede hacer referencia a laDataViewSetting para una tabla en particular por nombre o referencia ordinal, o pasando una referencia a ese objeto tabla especfica. Se puede acceder a la coleccin de DataViewSetting objetos en un DataViewManager utilizando el DataViewSettings propiedad. En el ejemplo de cdigo siguiente se llena un DataSet con el SQL Server Northwind tablas de base de datos Clientes , Pedidos y Detalles de pedidos , crea las relaciones entre las tablas, utiliza un DataViewManager para establecer por defecto DataView ajustes, y se une a un DataGrid al DataViewManager . El ejemplo define el valor predeterminado DataView ajustes para todas las tablas del DataSet para ordenar por la clave principal de la tabla ( ApplyDefaultSort = verdadero ), y modifica el orden de clasificacin de los clientes tabla para ordenar por CompanyName . C# VB

"Supone una conexin SqlConnection vlida a Neptuno. ' Crear una conexin, DataAdapters, y un conjunto de datos. Dim custDA Como SqlDataAdapter = New SqlDataAdapter (_ "SELECT IdCliente, NombreCompaa FROM Clientes" , conexin) Dim orderDA Como SqlDataAdapter = New SqlDataAdapter (_ "SELECT OrderID, CustomerID FROM Pedidos" , conexin) Dim ordDetDA Como SqlDataAdapter = New SqlDataAdapter (_ "SELECT OrderID, ProductID, Cantidad FROM [Detalles de pedidos]" , conexin) Dim custDS As DataSet = New DataSet () "Abrir la conexin.

Connection.Open () "Llenar el DataSet con informacin de esquema y datos. custDA.MissingSchemaAction = MissingSchemaAction.AddWithKey orderDA.MissingSchemaAction = MissingSchemaAction.AddWithKey ordDetDA.MissingSchemaAction = MissingSchemaAction.AddWithKey custDA.Fill (custDS, "Clientes" ) orderDA.Fill (custDS, "Orders" ) ordDetDA.Fill (custDS, "OrderDetails" ) 'Cierra la conexin. Connection.close () 'Crear relaciones. custDS.Relations.Add ( "CustomerOrders" , _ custDS.Tables ( "Clientes" ). Las columnas ( "IdCliente" ), _ custDS.Tables ( "Orders" ). Las columnas ( "IdCliente" )) custDS.Relations.Add ( "OrderDetails" , _ custDS.Tables ( "Orders" ). Las columnas ( "OrderID" ), _ custDS.Tables ( "OrderDetails" ). Las columnas ( "OrderID" )) 'Crear la configuracin predeterminada DataView. Dim ViewManager Como DataViewManager = New DataViewManager (custDS) Dim viewSetting Como DataViewSetting Para Cada viewSetting En viewManager.DataViewSettings viewSetting.ApplyDefaultSort = Verdadero Siguiente viewManager.DataViewSettings ( "Clientes" ). Sort = "CompanyName" "Enlazar a un DataGrid. Dim red Como System.Windows.Forms.DataGrid = New System.Windows.Forms.DataGrid () grid.SetDataBinding (ViewManager, "Clientes" )

Crear un DataTable desde DataView


. NET Framework 2.0
Otras versiones 11 de los 15 ha calificado este til - Valorar este tema

Una vez que haya recuperado los datos de un origen de datos y han llenado un DataTable con los datos, es posible que desee ordenar, limitar filtro, o de lo contrario los datos devueltos sin recuperarlo de nuevo. El DataView clase lo hace posible. Adems, si usted necesita para crear un nuevo objeto DataTable del DataView , puede utilizar el ToTable mtodo para copiar todas las filas y columnas, o un subconjunto de los datos en un nuevo DataTable . El ToTable mtodo proporciona sobrecargas para: Crear un DataTable columnas que contienen que son un subconjunto de las columnas de la DataView . Crear un DataTable que incluye slo las filas distintas de la DataView , de forma anloga a la palabra clave DISTINCT en Transact-SQL.

Ejemplo
El ejemplo de aplicacin de consola siguiente se crea un DataTable que contiene los datos de la Person.Contact en la tabla AdventureWorks base de datos de la muestra. A continuacin, el ejemplo crea una ordenada y filtrada DataView basado en el DataTable . Despus de mostrar el contenido de la DataTable y DataView, se crea una nueva DataTable desde la DataView mediante una llamada al ToTable mtodo, seleccionar slo un subconjunto de las columnas disponibles. Por ltimo, el ejemplo muestra el contenido de la nueva DataTable . VB

Private Sub DemonstrateDataView () 'Recuperar un objeto DataTable de la base de datos de ejemplo AdventureWorks. ' connectionString se supone que es una cadena de conexin vlida. Dim adaptador como New SqlDataAdapter (_ "SELECT FirstName, LastName, EmailAddress FROM Person.Contact WHERE Nombre LIKE 'Mich%'" , connectionString) Dim tabla Como Nuevo DataTable adapter.Fill (tabla) Console.WriteLine ( : "nombre de la tabla original" y table.TableName) valores de impresin actual 'de la tabla. PrintTableOrView (tabla, "Valores actuales en la tabla" ) 'Ahora crea un DataView basado en el DataTable. ' Ordenar y filtrar los datos. Dim vista como DataView = table.DefaultView view.Sort = "Apellido, Nombre" view.RowFilter = "LastName> 'M'" PrintTableOrView (vista "Valores actuales en la vista" ) 'Crear un nuevo objeto DataTable basndose en el DataView, "pidiendo slo dos columnas con valores distintos "en las columnas. Dim newtable Como DataTable = view.ToTable ( "UniqueLastNames" , verdadera , "Nombre" , "Apellido" ) PrintTableOrView (newtable, "Tabla creada a partir de DataView" ) Console.WriteLine ( "nombre de la tabla nueva:" y newTable.TableName) Console.WriteLine ( "Presione cualquier tecla para continuar." ) Console.ReadKey () End Sub = Dv.Table Console.WriteLine (etiqueta) 'Recorrer cada fila de la vista. Para Cada rowView Como DataRowView En dv sw = New System.IO.StringWriter 'Recorrer cada columna.

Para cada columna como DataColumn En table.Columns 'Salida del valor de los datos de cada columna. sw.Write (rowView (col.ColumnName). ToString () & "," ) Siguiente salida = sw.ToString "Se quita el. Trasero", ", por lo que la salida es correcta Si output.Length> 2 Entonces salida = output.Substring (0, output.Length - 2) Fin Si 'Muestra la fila de la ventana de la consola. Console.WriteLine (salida) Prximo Console.WriteLine () End Sub Private Sub PrintTableOrView(ByVal table As DataTable, ByVal label As String) Dim sw As System.IO.StringWriter Dim output As String Console.WriteLine (etiqueta) 'Recorrer cada fila de la tabla. Para cada fila como DataRow En table.Rows sw = New System.IO.StringWriter 'Recorrer cada columna. Para cada columna como DataColumn En table.Columns 'Salida del valor de los datos de cada columna. sw.Write (fila (col). ToString () & "," ) Siguiente salida = sw.ToString "Se quita el. Trasero", ", por lo que la salida es correcta Si output.Length> 2 Entonces salida = output.Substring (0, output.Length - 2) Fin Si 'Muestra la fila de la ventana de la consola. Console.WriteLine (salida) Prximo Console.WriteLine () Final Sub End Mdulo
C#

privado esttico vaco DemonstrateDataView () { / / Recuperar un DataTable desde la base de datos de ejemplo AdventureWorks. / / connectionString se supone que es una cadena de conexin vlida. SqlDataAdapter adapter = nuevo SqlDataAdapter ( "SELECT FirstName, LastName, EmailAddress" + "FROM Person.Contact WHERE Nombre LIKE '% Mich' " , GetConnectionString ()); DataTable tabla = nuevo DataTable (); adapter.Fill (tabla); Console.WriteLine ( "nombre de la tabla original:" table.TableName +); / / Imprimir valores de la tabla actual. PrintTableOrView (tabla, "Los valores actuales en la tabla" ); / / Ahora crea un DataView basado en el DataTable. / / Ordenar y filtrar los datos. DataView view = table.DefaultView;

view.Sort = "Apellido, Nombre" ; view.RowFilter = "Apellidos> 'M'" ; PrintTableOrView (ver, "Los valores actuales de Vista" ); / / Crear un nuevo objeto DataTable basndose en el DataView, / / solicitante slo dos columnas con valores distintos / / en las columnas. newtable DataTable = view.ToTable ( "UniqueLastNames" , verdadero , "Nombre" , "Apellido" ); PrintTableOrView (newtable, "Tabla creada a partir de DataView" ); Console.WriteLine ( "nombre de la tabla nueva:" + newTable.TableName); Console.WriteLine ( "Presione cualquier tecla para continuar." ); Console.ReadKey (); } privado esttico vaco PrintTableOrView (DataView dv, cadena de la etiqueta) { System.IO.StringWriter sw; cadena de produccin; DataTable tabla = dv.Table; Console.WriteLine (etiqueta); / / Recorrer cada fila de la vista. foreach (DataRowView rowView en dv) { sw = nuevo System.IO.StringWriter (); / / Recorrer cada columna. foreach (DataColumn col en table.Columns) { . / / Salida del valor de los datos de cada columna sw.Write (rowView [col.ColumnName] ToString () +. "," ); } salida = sw.ToString (); / / Se quita el. Trasero ",", por lo que la salida es correcta si (output.Length> 2) { output.Substring salida = (0, output.Length - 2); } / / Muestra la fila de la ventana de la consola. Console.WriteLine (salida); } Console.WriteLine (); } privado esttico vaco PrintTableOrView (DataTable tabla, cadena de la etiqueta) { System.IO.StringWriter sw; cadena de produccin; Console.WriteLine (etiqueta); / / Recorrer cada fila de la tabla. foreach (DataRow fila en table.Rows) { sw = nuevo System.IO.StringWriter (); . / / Recorrer cada columna foreach (DataColumn col en table.Columns)

{ . / / Salida del valor de los datos de cada columna sw.Write (row [col] ToString () +. "," ); } salida = sw.ToString (); / / Se quita el. Trasero ",", por lo que la salida es correcta si (output.Length> 2) { output.Substring salida = (0, output.Length - 2); } / / Muestra la fila de la ventana de la consola. Console.WriteLine (salida); }// Console.WriteLine (); }
}

Utilizar XML en un DataSet


. NET Framework 2.0
Otras versiones 0 de 3 puntuado este til - Valorar este tema Con ADO.NET se puede rellenar un DataSet a partir de una secuencia XML o un documento. Puede utilizar la secuencia o el documento XML para abastecer alconjunto de datos ya sea de datos, la informacin del esquema, o ambos. La informacin suministrada por la corriente o el documento XML se puede combinar con los datos existentes y la informacin de esquema ya est presente en el conjunto de datos . ADO.NET tambin le permite crear una representacin XML de un DataSet , con o sin su esquema, con el fin de transportar el conjunto de datos a travs de HTTP para su uso por otra aplicacin o plataforma habilitada para XML. En una representacin XML de un DataSet , los datos se escriben en XML y el esquema, si se incluye en lnea en la representacin, est escrito utilizando el lenguaje de definicin de esquema XML (XSD). XML Schema y XML proporciona un formato conveniente para transferir el contenido de un conjunto de datos hacia y desde los clientes remotos.

DiffGrams
. NET Framework 2.0
Otras versiones

7 de cada 17 ha calificado este til - Valorar este tema Un DiffGram es un formato XML que identifica las versiones actual y original de elementos de datos. El conjunto de datos utiliza el formato DiffGram para cargar y conservar su contenido, y para serializar su contenido para el transporte a travs de una conexin de red. Cuando un DataSet se escribe como un DiffGram, rellena el DiffGram con toda la informacin necesaria para recrear con precisin el contenido, aunque no el esquema del DataSet , incluidos los valores de las columnas de ambos los originales y actuales versiones de filas, la informacin de error de fila y fila orden. Al enviar y recuperar un conjunto de datos de un servicio Web XML, el formato DiffGram se utiliza implcitamente. Adems, al cargar el contenido de un DataSetdesde XML mediante el ReadXml mtodo, o al escribir el contenido de un DataSet en XML utilizando el WriteXml mtodo, puede especificar que el contenido puede ser ledo o escrito como un DiffGram. Para obtener ms informacin, vea Cargar DataSet desde XML y escribir un DataSet como datos XML . Mientras que el formato DiffGram se utiliza principalmente en el Marco. NET como un formato de serializacin para el contenido de un conjunto de datos , tambin puede utilizar DiffGrams para modificar los datos en las tablas de una base de datos Microsoft SQL Server. Un DiffGram es generado por escrito el contenido de todas las tablas a un <diffgram> elemento.

Para generar un DiffGram


1. 2. Generar una lista de tablas raz (es decir, las mesas sin padre). Para cada tabla y sus descendientes en la lista, escriba la versin actual de todas las filas en la seccin de DiffGram primero. Para cada tabla en el DataSet , escribe la versin original de todas las filas, en su caso, en el <before> seccin del DiffGram. Para las filas que tienen errores, escribir el contenido del error en el <errors> seccin del DiffGram.

3. 4.

Un DiffGram se procesa con el fin de principio del archivo XML hasta el final.

Para procesar un DiffGram


1. 2. Procesar la primera seccin de la DiffGram que contiene la versin actual de las filas. Procesar la segunda o la <before> seccin que contiene la versin original de fila filas modificadas y eliminadas.

Nota

Si una fila est marcada eliminada, la operacin de eliminacin puede eliminar descendientes de la fila, as, dependiendo de la cascada caracterstica de la corriente DataSet .
3. Procesar la <errors> seccin. Establezca la informacin de error para la fila y la columna especificada para cada artculo en esta seccin.

Nota

Si se establece la XmlWriteMode a DiffGram, el contenido de la meta DataSet y el original conjunto de datos puede ser diferente.

Formato DiffGram
El formato DiffGram est dividido en tres secciones: los datos actuales, los datos originales (o "antes"), y una seccin de errores, como se muestra en el siguiente ejemplo.

<? Xml version = "1.0"> <Diffgr: diffgram

xmlns: msdata = "urn: schemas-microsoft-com: xml-msdata" xmlns: diffgr = "urn: schemas-microsoft-com: xml-diffgram-v1" xmlns: xsd = "http://www.w3.org/2001/XMLSchema"> <DataInstance> </ DataInstance> <diffgr:before> </ Diffgr: antes de> <diffgr:errors> </ Diffgr: Errores> </ Diffgr: diffgram>
El formato DiffGram consta de los siguientes bloques de datos: < DataInstance > El nombre de este elemento, DataInstance , se utiliza para describir las explicaciones de esta documentacin. A DataInstance elemento representa unconjunto de datos o una fila de una DataTable . En lugar de DataInstance , el elemento que contiene el nombre del DataSet o DataTable . Este bloque del formato DiffGram contiene los datos actuales, si ha sido modificado o no. Un elemento, o fila, que ha sido modificado se identifica con el diffgr: hasChanges anotacin. <diffgr:before> Este bloque del formato DiffGram contiene la versin original de una fila. Los elementos de este bloque se hacen coincidir con los elementos de la DataInstance bloque con el diffgr: id anotacin. <diffgr:errors> Este bloque del formato DiffGram contiene informacin de error para una fila determinada en la DataInstance bloque. Los elementos de este bloque se hacen coincidir con los elementos de la DataInstance bloque con el diffgr: id anotacin.

Anotaciones DiffGram
DiffGrams usar varias anotaciones para relacionar los elementos de los bloques de DiffGram diferentes que representan diferentes versiones de fila o informacin de error en el DataSet . En la tabla siguiente se describen las anotaciones DiffGram que se definen en el espacio de nombres DiffGram urn: schemas-microsoft-com: xml-diffgram-v1 .

Anotacin

Descripcin

identificacin

Se utiliza para emparejar los elementos de los <diffgr:before> y <diffgr:errors> cuadras de elementos en el < DataInstance > bloque. Los valores con la diffgr: id anotacin estn en la forma [TableName] [RowIdentifier] . Por ejemplo: <Customers diffgr:id="Customers1"> . Identifica qu elemento de la < DataInstance > bloque es el elemento principal del elemento actual. Los valores con la diffgr: ParentIDanotacin estn en la forma [TableName] [RowIdentifier] . Por ejemplo: diffgr:parentId="Customers1"> <Orders . Identifica una fila en la < DataInstance > bloque modificado. El hasChanges anotacin puede tener uno de los tres valores siguientes:
insertado

ParentID

hasChanges

modificado

Identifica una Alta fila. Identifica una modificacin fila que contiene una original versin de la fila en la <diffgr:before> bloque. Tenga en cuenta queeliminados filas tendrn una original versin de la fila en la <diffgr:before> bloque, pero no habr ningn elemento anotado en el <DataInstance > bloque.

descenso

Identifica un elemento en el cual uno o ms hijos de una relacin padre-hijo han sido modificados. hasErrors Identifica una fila en la < DataInstance > bloque con un RowError . El elemento de error se coloca en la <diffgr:errors> bloque. Contiene el texto de la RowError para un elemento concreto en el <diffgr:errors> bloque.

Error

El conjunto de datos incluye anotaciones adicionales al leer o escribir su contenido como un DiffGram. En la tabla siguiente se describen estas anotaciones adicionales, que se definen en el espacio de nombres urn: schemasmicrosoft-com: xml-msdata .

Anotaci n

Descripcin

RowOrder

Conserva el orden de las filas de los datos originales e identifica el ndice de una fila en un determinado DataTable . Identifica una columna que tiene un ColumnMapping propiedad establecida en MappingType.Hidden . El atributo se escribe en el formatomsdata: oculto [ColumnName] = " valor ". Por ejemplo: <Customers diffgr:id="Customers1" msdata:hiddenContactTitle="Owner"> . Tenga en cuenta que las columnas ocultas slo se escribe como un atributo DiffGram si contienen datos. De lo contrario, se ignoran.

Oculto

Muestra DiffGram
Un ejemplo del formato DiffGram se muestra a continuacin. En este ejemplo se muestra el resultado de la actualizacin de una fila de una tabla antes de que los cambios se han cometido. La fila cuyo CustomerID es "ALFKI" se ha modificado, pero no actualizados. Como resultado, existe una actual fila con un diffgr: Identificacin de "Customers1" en el < DataInstance > bloque, y un original con una fila diffgr: Identificacin de "Customers1" en la <diffgr:before> bloque. La fila cuyo CustomerID es "ANATR" incluye una RowError , por lo que se anota con diffgr: hasErrors = "true" y hay un elemento relacionado en la<diffgr:errors> bloque.

<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemasmicrosoft-com:xml-diffgram-v1"> <CustomerDataSet> <Customers Diffgr:id="Customers1" msdata:rowOrder="0" diffgr:hasChanges="modified"> <CustomerID> ALFKI </ CustomerID> <CompanyName> Empresa nueva </ CompanyName> </ Customers> <Customers Diffgr:id="Customers2" msdata:rowOrder="1" diffgram:hasErrors="true"> <CustomerID> ANATR </ CustomerID> <CompanyName> Ana Trujillo y Emparedados Helados </ CompanyName> </ Customers>

<Customers Diffgr:id="Customers3" msdata:rowOrder="2"> <CustomerID> ANTON </ CustomerID> <CompanyName> Antonio Moreno Taquera </ CompanyName> </ Customers> <Customers Diffgr:id="Customers4" msdata:rowOrder="3"> <CustomerID> AROUT </ CustomerID> <CompanyName> Around the Horn </ CompanyName> </ Customers> </ CustomerDataSet> <diffgr:before> <Customers Diffgr:id="Customers1" msdata:rowOrder="0"> <CustomerID> ALFKI </ CustomerID> <CompanyName> Alfreds Futterkiste </ CompanyName> </ Customers> </ Diffgr: antes de> <diffgr:errors> <Customers Diffgr:id="Customers2" violacin diffgr:Error="An concurrencia optimista se ha producido durante este row."/> </ Diffgr: Errores> </ Diffgr: diffgram>

Cargar DataSet desde XML


. NET Framework 2.0
Otras versiones 10 de los 15 ha calificado este til - Valorar este tema El contenido de un ADO.NET DataSet se pueden crear a partir de una secuencia XML o un documento. Adems, con el Marco. NET tiene una gran flexibilidad sobre qu informacin se carga desde XML, y cmo el esquema o estructura relacional del DataSet se crea. Para rellenar un DataSet con datos de XML, utilice el ReadXml mtodo del DataSet objeto. El ReadXml mtodo lee desde un archivo, una secuencia o unXmlReader , y toma como argumentos el origen del XML ms una opcional XmlReadMode argumento. (Para obtener ms informacin sobre el XmlReader , veaLeer datos XML con XmlTextReader .) El ReadXml mtodo lee el contenido de la secuencia o el documento XML y carga el DataSet con datos. Asimismo, se crear el esquema relacional del DataSet dependiendo de la XmlReadMode especificada y si es o no un esquema relacional ya existe. La siguiente tabla describe las opciones de la XmlReadMode argumento.

Opcin Auto

Descripcin Este es el valor predeterminado. Examina el XML y elige la opcin ms adecuada en el siguiente orden: Si el XML es un DiffGram, DiffGram se utiliza. Si el DataSet contiene un esquema o el XML contiene un esquema en lnea, ReadSchema se utiliza.

Si el conjunto de datos no contiene un esquema y el cdigo XML no contiene un esquema en lnea, InferSchema se utiliza. Si conoce el formato del XML es ledo, el mejor rendimiento se recomienda establecer un explcito XmlReadMode , en lugar de aceptar elAuto por defecto.

ReadSchema

Lee cualquier esquema en lnea y carga los datos y el esquema. Si el DataSet ya contiene un esquema, se agregan nuevas tablas del esquema en lnea con el esquema existente en el DataSet . Si las tablas del esquema en lnea ya existen en el conjunto de datos , se produce una excepcin. Usted no ser capaz de modificar el esquema de una tabla existente utilizando XmlReadMode.ReadSchema . Si el conjunto de datos no contiene un esquema, y no hay ningn esquema en lnea, no se leen los datos. Esquema en lnea se puede definir mediante lenguaje XML de definicin de esquemas (XSD). Para obtener ms informacin sobre la escritura de esquema en lnea como esquema XML, vea Generar la estructura relacional de DataSet desde XML Schema (XSD) . Omite cualquier esquema en lnea y carga los datos en el actual conjunto de datos de esquema. Cualquier dato que no coincide con el esquema existente se descarta. Si no existe en el esquema de DataSet , no se cargan los datos. Si los datos son un DiffGram, IgnoreSchema tiene la misma funcionalidad que DiffGram . Omite cualquier esquema en lnea y deduce el esquema por la estructura de los datos XML, a continuacin, carga los datos. Si el DataSet ya contiene un esquema, el esquema actual se ampla mediante la adicin de columnas a las tablas existentes. Tablas adicionales no se aadirn si no hay tablas existentes. Se produce una excepcin si la tabla ya existe inferido con un espacio de nombres diferente, o si cualquier conflicto infiere columnas con las columnas existentes. Para obtener ms informacin acerca de cmo ReadXmlSchema deduce un esquema a partir de un documento XML, vea Deducir la estructura relacional de DataSet desde XML . Lee un DiffGram y agrega los datos al esquema actual. DiffGram fusiona las nuevas filas con filas existentes en los que el identificador nico partido de valores. Vase "La fusin de datos de XML" al final de este tema. Para obtener ms informacin acerca de DiffGrams, consulteDiffGrams . Contina la lectura de varios fragmentos de XML hasta el final de la secuencia es alcanzado. Los fragmentos que coinciden con los DataSetesquema se aaden a las tablas correspondientes. Los fragmentos que no coinciden con los DataSet esquema se descartan.

IgnoreSchema

InferSchema

DiffGram

Fragmento

Nota Si pasa un XmlReader a ReadXml que se coloca una parte del camino en un documento XML, ReadXml leer al nodo elemento que viene y tratar de que el elemento raz, leyendo hasta el final del nodo de elemento nico. Esto no se aplica si se especifica XmlReadMode.Fragment .

Entidades DTD

Si el XML contiene entidades definidas en una definicin de tipo de documento (DTD) esquema, una excepcin se produce si se intenta cargar un DataSet pasando un nombre de archivo, una secuencia o sin validacin XmlReader a ReadXml . En su lugar, debe crear un XmlValidatingReader , con EntityHandling establecido en EntityHandling.ExpandEntities , y pasar su XmlValidatingReader a ReadXml . El XmlValidatingReader ampliar las entidades antes de ser ledo por el conjunto de datos . Los ejemplos de cdigo siguientes muestran cmo cargar un DataSet a partir de una secuencia XML. El primer ejemplo muestra un nombre de archivo que se pasa a la ReadXml mtodo. El segundo ejemplo muestra una cadena que contiene XML que se carga mediante un StringReader . C# VB

Dim dataSet Como DataSet = New DataSet DataSet.ReadXML ( "Input.xml" , XmlReadMode.ReadSchema)


C# VB

Dim dataSet Como DataSet = New DataSet Dim dataTable Como DataTable = New DataTable ( "Tabla1" ) dataTable.Columns.Add ( "col1" , Tipo. GetType ( "System.String" )) dataSet.Tables.Add (DataTable) Dim xmlData As String = "<XmlDS><table1><col1>Value1</col1></table1><table1><col1>Value2</col1></table1></XmlDS>" Dim xmlSR Como System.IO.StringReader = New System.IO.StringReader (xmlData) DataSet.ReadXML (xmlSR, XmlReadMode.IgnoreSchema)

Nota Si se llama a ReadXml para cargar un archivo muy grande, puede encontrarse con un rendimiento lento. Para asegurar el mejor rendimiento para ReadXml , en un archivo de gran tamao, llame a la BeginLoadData mtodo para cada tabla en el DataSet y llame a ReadXml . Por ltimo, llame EndLoadData para cada tabla en el DataSet , como se muestra en el siguiente ejemplo.
C# VB

Dim dataTable Como DataTable Para cada dataTable En dataSet.Tables dataTable.BeginLoadData () Prximo DataSet.ReadXML ( "file.xml" ) Para cada dataTable en dataSet.Tables dataTable.EndLoadData () Prximo

Nota Si el esquema XSD para el DataSet incluye un targetNamespace , los datos no pueden ser ledos, y que puede encontrar excepciones, al llamar a ReadXml para cargar el DataSet con XML que contenga elementos con ningn espacio de nombres de calificacin. Para leer elementos no calificados en este caso,

ajusteelementFormDefault igual a "cualificado" en el esquema XSD. Por ejemplo:


<Xsd: schema id = "customDataSet" elementFormDefault = "qualified" targetNamespace = "http://www.tempuri.org/customDataSet.xsd" xmlns = "http://www.tempuri.org/customDataSet.xsd" xmlns: xsd = "http://www.w3.org/2001/XMLSchema" xmlns: msdata = "urn: schemas-microsoft-com: xml-msdata"> </ Xsd: schema>

Fusin de datos de XML


Si el DataSet ya contiene datos, los nuevos datos del XML se aaden a los datos ya existentes en el conjunto de datos . ReadXml no combina desde el XML en elDataSet cualquier informacin de la fila que se combina con las claves principales. Para sobrescribir informacin de la fila existente con la nueva informacin de XML, utilice ReadXml para crear un nuevo conjunto de datos y, a continuacin, combinar el nuevo conjunto de datos existente en el DataSet . Tenga en cuenta que al cargar un DiffGram utilizando ReadXML con un XmlReadMode de DiffGram se fusionarn las filas que tienen el mismo identificador nico.

Escribir un DataSet como datos XML


. NET Framework 2.0
Otras versiones 5 de 16 ha calificado este til - Valorar este tema En ADO.NET se puede escribir una representacin XML de un DataSet , con o sin su esquema. Si se incluye la informacin de esquema en lnea con el XML, se escribe con el lenguaje de definicin de esquema XML (XSD). El esquema contiene las definiciones de tabla del DataSet , as como la relacin y definiciones de restricciones. Cuando un DataSet se escribe como datos XML, las filas en el conjunto de datos se escriben en sus versiones actuales. Sin embargo, el conjunto de datos tambin puede ser escrito como un DiffGram de modo que tanto la corriente y los valores originales de las filas sern incluidos. La representacin XML del DataSet se puede escribir en un archivo, un arroyo, un XmlWriter o una cadena. Estas opciones proporcionan una gran flexibilidad de cmo transportar la representacin XML del DataSet . Para obtener la representacin XML del conjunto de datos como una cadena, utilice la GetXml mtodo como se muestra en el siguiente ejemplo. C# VB

Dim xmlDS Como cadena custDS.GetXml = ()

GetXml devuelve la representacin XML del DataSet sin informacin de esquema. Para escribir la informacin de esquema del DataSet (como XML Schema) a una cadena, utilice GetXmlSchema . Para escribir un DataSet en un archivo, una secuencia o XmlWriter , utilice el WriteXml mtodo. El primer parmetro que se pasa a WriteXml es el destino de la salida XML. Por ejemplo, pasar una cadena que contiene un nombre de archivo, un System.IO.TextWriter objeto, y as sucesivamente. Puede pasar un segundo parmetro opcional de un XmlWriteMode para especificar cmo la salida XML se va a escribir. La tabla siguiente muestra las opciones para XmlWriteMode .

XmlWriteMode opcin IgnoreSchema

Descripcin

Escribe el contenido actual del DataSet como datos XML, sin un esquema XML. Este es el valor predeterminado. Escribe el contenido actual del DataSet como datos XML con la estructura relacional como en lnea de esquema XML. Escribe el entero conjunto de datos como un DiffGram, incluidos los valores originales y actuales. Para obtener ms informacin, consulte DiffGrams .

WriteSchema

DiffGram

Al escribir una representacin XML de un DataSet que contiene DataRelation objetos, lo ms probable es que el XML resultante tenga las filas secundarias de cada relacin anidada dentro de sus elementos primarios relacionados. Para ello, establezca la Nested propiedad de la DataRelation a verdadero cuando se agrega elDataRelation al DataSet . Para obtener ms informacin, consulte DataRelations anidadas . A continuacin se presentan dos ejemplos de cmo se escribe la representacin XML de un DataSet en un archivo. El primer ejemplo se pasa el nombre de archivo del documento XML resultante como una cadena a WriteXml . El segundo ejemplo se pasa una System.IO.StreamWriter objeto. C# VB

custDS.WriteXml ( "Customers.xml" , XmlWriteMode.WriteSchema)


C# VB

Dim xmlSW Como System.IO.StreamWriter = New System.IO.StreamWriter ( "Customers.xml" ) custDS.WriteXml (xmlSW, XmlWriteMode.WriteSchema) xmlSW.Close ()

Columnas Correlacin de elementos XML, atributos y texto


Puede especificar una columna de una tabla se representa en XML utilizando el ColumnMapping propiedad de la DataColumn del objeto. La siguiente tabla muestra los diferentes MappingType valores para la ColumnMapping caracterstica de una columna de la tabla, y el XML resultante.

MappingType valor Elemento

Descripcin

Este es el valor predeterminado. La columna se escribe como un elemento XML donde ColumnName es el nombre del elemento y el contenido de la columna se escriben como

el texto del elemento. Por ejemplo:


Contenido columna <NombreDeColumna> </ ColumnName>

Atributo

La columna se escribe como un atributo XML del elemento XML para la fila actual donde ColumnName es el nombre del atributo y el contenido de la columna se escribe como el valor del atributo. Por ejemplo:
<RowElement ColumnName="Column Contents" />

SimpleContent

El contenido de la columna se escriben como texto en el elemento XML para la fila actual. Por ejemplo:
<RowElement> Contenido de la columna </ RowElement>

Tenga en cuenta que simpleContent no se pueden establecer para una columna de una tabla que tiene elementos o relaciones columnas anidadas. Oculto La columna no est escrito en la salida XML.

DataSet Cargar la informacin de esquema de XML


. NET Framework 2.0
Otras versiones 1 de cada 3 ha calificado este til - Valorar este tema El esquema de un DataSet (sus tablas, columnas, relaciones y restricciones) se puede definir mediante programacin, creado por el relleno o FillSchema mtodos de un DataAdapter , o cargado desde un documento XML. Para cargar DataSet informacin de esquema de un documento XML, puede utilizar el ReadXmlSchemao la InferXmlSchema mtodo del DataSet . ReadXmlSchema le permite cargar o deducir DataSet informacin de esquema del documento que contiene esquemas XML (lenguaje de definicin XSD), o un XML documento en lnea con el esquema XML. InferXmlSchema permite inferir el esquema del documento XML sin tener en cuenta ciertos espacios de nombres XML que especifique.

Nota Tabla pedir en un conjunto de datos no se conservara al utilizar servicios Web o de serializacin XML para

transferir un conjunto de datos que se cre en memoria mediante el uso de las construcciones XSD (como las relaciones anidadas). Por lo tanto, el destinatario del conjunto de datos no debe depender de tabla de pedidos en este caso. Sin embargo, el ordenamiento tabla siempre se mantiene si el esquema del DataSet se transfieren fue leda desde los archivos XSD, en lugar de ser creado en memoria.

ReadXmlSchema
Para cargar el esquema de un DataSet a partir de un documento XML sin tener que cargar ningn dato, se puede utilizar el ReadXmlSchema mtodo del DataSet .ReadXmlSchema crea DataSet esquema definidos mediante esquemas XML (lenguaje de definicin XSD). El ReadXmlSchema mtodo toma un nico argumento de un nombre de archivo, de una, o un XmlReader que contiene el documento XML que se va a cargar. El documento XML puede contener slo esquema, o pueden contener elementos en lnea con esquema XML que contienen datos. Para obtener ms informacin sobre la escritura de esquema en lnea como esquema XML, vea Generar la estructura relacional de DataSet desde XML Schema (XSD) . Si el documento XML pasado a ReadXmlSchema no contiene informacin de esquema en lnea, ReadXmlSchema inferir el esquema a partir de los elementos del documento XML. Si el DataSet ya contiene un esquema, el esquema actual se ampliar mediante la adicin de nuevas tablas si no existen ya. Las nuevas columnas no se aadir a aadirse a las tablas existentes. Si una columna se aade que ya existe en el DataSet , pero tiene un tipo incompatible con la columna encontrada en el XML, se produce una excepcin. Para obtener ms informacin acerca de cmo ReadXmlSchema deduce un esquema a partir de un documento XML, veaDeducir la estructura relacional de DataSet desde XML . Aunque ReadXmlSchema cargas o infiere nicamente el esquema de un DataSet , el ReadXml mtodo de los DataSet cargas o infiere tanto el esquema y los datos contenidos en el documento XML. Para obtener ms informacin, vea Cargar DataSet desde XML . Los ejemplos de cdigo siguientes muestran cmo cargar un DataSet esquema de un documento XML o un arroyo. El primer ejemplo muestra un nombre de archivo de esquema XML que se pasa al ReadXmlSchema mtodo. El segundo ejemplo muestra una System.IO.StreamReader . C# VB

Dim dataSet Como DataSet = New DataSet dataSet.ReadXmlSchema ( "schema.xsd" )


C# VB

Dim xmlStream Como System.IO.StreamReader = New System.IO.StreamReader ( "schema.xsd" ); Dim dataSet Como DataSet = New DataSet dataSet.ReadXmlSchema (xmlStream) xmlStream.Close ()

InferXmlSchema
Tambin puede indicar el conjunto de datos para inferir su esquema a partir de un documento XML utilizando el InferXmlSchema mtodo del DataSet .InferXmlSchema Funciona igual que hacer las dos cosas ReadXml con un XmlReadMode de InferSchema (carga datos as como deduce el esquema), yReadXmlSchema si el documento ser ledo no contiene ningn esquema en lnea. Sin embargo, InferXmlSchema ofrece adems la posibilidad de que le permite especificar determinados espacios de nombres XML para ser ignorado cuando el esquema se infiere. InferXmlSchema toma dos argumentos obligatorios: la ubicacin del documento XML, especifique un nombre de archivo, una secuencia o un XmlReader ; y una matriz de cadenas de espacios de nombres XML para ser ignorado por la operacin. Por ejemplo, considere el siguiente cdigo XML:

<NewDataSet Xmlns:od="urn:schemas-microsoft-com:officedata"> <Categories> <CategoryID Od:adotype="3"> 1 </ CategoryID> <CategoryName Od:maxLength="15" od:adotype="130"> Bebidas </ CategoryName>

Bebidas no alcohlicas y <Descripcin od:adotype="203"> ts </ description> </ Categoras> <Productos> <ProductID Od:adotype="20"> 1 </ ProductID> <ReorderLevel Od:adotype="3"> 10 </ ReorderLevel> <Discontinued Od:adotype="11"> 0 </ discontinuados> </ Productos> </ NewDataSet>
Debido a los atributos especificados para los elementos en el documento XML anterior, tanto el ReadXmlSchema mtodo y la ReadXml mtodo con unXmlReadMode de InferSchema sera crear tablas para cada elemento en el documento: Categoras , CategoryID , CategoryName , descripcin , productos ,ProductID , ReorderLevel y Di scontinued . (Para obtener ms informacin, vea Deducir la estructura relacional de DataSet desde XML .) Sin embargo, una estructura ms adecuada sera la de crear slo las Categoras y Productos tablas, y luego crear IdCategora , NombreCategora y Descripcin columnas en laCategoras mesa y ProductID , ReorderLevel y descatalogados columnas de la Productos mesa. Para asegurar que el esquema deducido ignora los atributos especificados en los elementos XML, utilice el InferXmlSchema mtodo y especificar el espacio de nombres XML para officedata para ser ignorado, como se muestra en el siguiente ejemplo. C# VB

Dim dataSet Como DataSet = New DataSet dataSet.InferXmlSchema ( "input_od.xml" , New cadena () { "urn: schemas-microsoft-com: officedata" })

Escribiendo informacin de esquema de DataSet como XML Schema (XSD)


. NET Framework 2.0
Otras versiones 1 de cada 3 ha calificado este til - Valorar este tema Puede escribir el esquema de un DataSet como XML de definicin de esquemas lenguaje (XSD), por lo que se puede transportar, con o sin datos relacionados, en un documento XML. XML Schema se puede escribir en un archivo, un arroyo, un XmlWriter o una cadena, es til para generar una inflexible de tipos DataSet . Para obtener ms informacin acerca de inflexible de tipos DataSet objetos, consulte Trabajar con DataSet con tipo . Puede especificar una columna de una tabla se representa en el esquema XML utilizando el ColumnMapping propiedad de la DataColumn del objeto. Para obtener ms informacin, consulte "Asignacin de columnas a elementos XML, atributos y texto" en la escritura de un DataSet como datos XML . Para escribir el esquema de un DataSet como XML Schema, en un archivo, una secuencia o XmlWriter , utilice el WriteXmlSchema mtodo del DataSet .WriteXmlSchema toma un parmetro que especifica el destino de los esquemas XML resultantes. Los ejemplos de cdigo siguientes muestran cmo escribir el esquema XML de un DataSet a un fichero pasando una cadena que contiene un nombre de archivo y un StreamWriter objeto. C# VB

dataSet.WriteXmlSchema ( "Customers.xsd" )
C# VB

Dim escritor como System.IO.StreamWriter = New System.IO.StreamWriter ( "Customers.xsd" ) dataSet.WriteXmlSchema (escritor) writer.Close ()
Para obtener el esquema de un conjunto de datos y escribir como una cadena de esquema XML, utilizar el GetXmlSchema mtodo, como se muestra en el siguiente ejemplo. C# VB

Dim schemaString Como cadena dataSet.GetXmlSchema = ()

Sincronizar DataSet con un XmlDataDocument


. NET Framework 2.0
Otras versiones 0 de 5 puntuado este til - Valorar este tema La ADO.NET DataSet le proporciona una representacin relacional de datos. Para obtener acceso a los datos jerrquica, puede utilizar las clases XML disponibles en el Marco. NET. Histricamente, estos dos representaciones de datos se han utilizado por separado. Sin embargo, el Marco. NET permite en tiempo real, acceso sncrono a las representaciones relacionales y jerrquicas de datos a travs del conjunto de datos y el objeto XmlDataDocument objeto, respectivamente. Cuando un DataSet se sincroniza con un XmlDataDocument , ambos objetos estn trabajando con un nico conjunto de datos. Esto significa que si se hace un cambio en el conjunto de datos , el cambio se reflejar en los XmlDataDocument versa, y viceversa. La relacin entre el DataSet y XmlDataDocument crea una gran flexibilidad al permitir que una sola aplicacin, utilizando un nico conjunto de datos, para acceder a la suite completa de servicios relacionados con laDataSet (como los formularios Web Forms y controles de Windows Forms, y Visual Studio. NET diseadores), as como el conjunto de servicios XML como lenguaje de estilo extensible (XSL), XSL Transformations (XSLT) y el Lenguaje de rutas XML (XPath). Usted no tiene que elegir el conjunto de servicios para apuntar con la aplicacin, ambos estn disponibles. Hay varias maneras que usted puede sincronizar un DataSet con un XmlDataDocument . Usted puede: Llenar un DataSet con el esquema (es decir, una estructura relacional) y los datos y luego sincronizarlo con un nuevo XmlDataDocument . Esto proporciona una vista jerrquica de los actuales datos relacionales. Por ejemplo: VB

Dim dataSet Como DataSet = New DataSet "Aadir cdigo aqu para rellenar el DataSet con el esquema y los datos. Dim xmlDoc Como XmlDataDocument = New XmlDataDocument (dataSet)
C#

DataSet dataSet = nuevo DataSet (); / / Aadir cdigo aqu para rellenar el DataSet con el esquema y los datos. XmlDataDocument xmlDoc = nuevo XmlDataDocument (dataSet);
Llenar un DataSet con slo esquema (como un inflexible de tipos DataSet ), sincronizarlo con un XmlDataDocument , y luego cargar elXmlDataDocument partir de un documento XML. Esto proporciona una vista relacional de los actuales datos jerrquicos. Los nombres de tabla y nombres de columna en su DataSet esquema deben coincidir con los nombres de los elementos XML que desea sincronizar con ellos. Esta coincidencia entre maysculas y minsculas. Tenga en cuenta que el esquema del DataSet slo tiene que coincidir con los elementos XML que desee exponer su punto de vista relacional. De esta manera, usted puede tener un documento XML muy grande y una muy pequea relacional "ventana" en el documento. El XmlDataDocument conserva todo el documento XML a pesar de que el conjunto de datos slo expone una pequea parte de ella. (Para un ejemplo detallado de este tema, consulteEjemplo de Sincronizacin de un DataSet con un XmlDataDocument .) En el ejemplo de cdigo siguiente se muestran los pasos para crear un DataSet y rellenar su esquema, a continuacin, sincronizar con unXmlDataDocument . Tenga en cuenta que el conjunto de datos slo esquema debe coincidir con los elementos de la XmlDataDocument que desee exponer mediante el DataSet . VB

Dim dataSet Como DataSet = New DataSet "Aadir cdigo aqu para rellenar el DataSet con el esquema, pero no los datos. Dim xmlDoc Como XmlDataDocument = New XmlDataDocument (dataSet) xmlDoc.Load ( "XMLDocument.xml" )
C#

DataSet dataSet = nuevo DataSet (); / / Aadir cdigo aqu para rellenar el DataSet con el esquema, pero no los datos. XmlDataDocument xmlDoc = nuevo XmlDataDocument (dataSet); xmlDoc.Load ( "XMLDocument.xml" );
No se puede cargar un XmlDataDocument si est sincronizado con un conjunto de datos que contiene datos. Una excepcin ser lanzada. Crear un nuevo XmlDataDocument y cargarlo desde un documento XML, y luego acceder a la vista relacional de los datos utilizando el conjunto de datospropiedad de la XmlDataDocument . Es necesario configurar el esquema del DataSet antes de que pueda ver cualquiera de los datos en el XmlDataDocument utilizando el conjunto de datos . Una vez ms, los nombres de tabla y nombres de columna en su DataSet esquema deben coincidir con los nombres de los elementos XML que desea sincronizar con ellos. Esta coincidencia entre maysculas y minsculas.

En el ejemplo de cdigo siguiente se muestra cmo acceder a la vista relacional de los datos en un XmlDataDocument . VB

Dim xmlDoc Como XmlDataDocument = New XmlDataDocument Dim dataSet Como DataSet = xmlDoc.DataSet "Aadir cdigo para crear el esquema del DataSet para ver los datos. xmlDoc.Load ( "XMLDocument.xml" )

C#

XmlDataDocument xmlDoc = nuevo XmlDataDocument (); DataSet dataSet = xmlDoc.DataSet; / / Aadir cdigo para crear el esquema del DataSet para ver los datos. xmlDoc.Load ( "XMLDocument.xml" );
Otra ventaja de la sincronizacin de un XmlDataDocument con un DataSet es que la fidelidad de un documento XML se conserva. Si el conjunto de datos se rellena a partir de un documento XML utilizando ReadXml , cuando los datos se escriben de nuevo como un documento XML mediante WriteXml puede diferir considerablemente de la original del documento XML. Esto es porque el conjunto de datos no mantiene el formato, como el espacio en blanco, o la informacin jerrquica, tal como orden de los elementos, a partir del documento XML. El DataSet tampoco contiene elementos del documento XML que fueron ignoradas, ya que no se corresponde con el esquema del conjunto de datos . Sincronizacin de un XmlDataDocument con un DataSet permite que el formato y la estructura jerrquica de los elementos del documento XML original que se mantiene en el XmlDataDocument , mientras que el conjunto de datos contiene slo datos e informacin pertinentes para el esquema de DataSet . Al sincronizar un DataSet con un XmlDataDocument , los resultados pueden ser diferentes dependiendo de si o no sus DataRelation objetos estn anidados. Para obtener ms informacin, consulte DataRelations anidadas .

Ejemplo de Sincronizacin de un DataSet con un XmlDataDocument


. NET Framework 2.0
Otras versiones 1 de cada 3 ha calificado este til - Valorar este tema En esta seccin se muestra un paso en el procesamiento de una orden de compra, utilizando un establecimiento inflexible de tipos DataSet sincronizado con unXmlDataDocument . Los ejemplos que siguen a crear un DataSet con un

esquema mnimo que coincide con slo una parte del documento XML de origen. Los ejemplos utilizan un XmlDataDocument para preservar la fidelidad del documento XML de origen, permitiendo que el conjunto de datos que se utiliza para exponer un subconjunto del documento XML. El siguiente documento XML que contiene toda la informacin relativa a una orden de compra: informacin de clientes, artculos pedidos, envo de informacin, y as sucesivamente.

<? Xml version = "1.0" standalone = "yes"> <PurchaseOrder> <Customers> CHULETAS <CustomerID> </ CustomerID> <Orders> <OrderID> 10966 </ OrderID> <OrderDetails> <OrderID> 10966 </ OrderID> <ProductID> 37 </ ProductID> <UnitPrice> 26 </ UnitPrice> <Cantidad> 8 </ Cantidad> <Discount> 0 </ Descuento> </ OrderDetails> <OrderDetails> <OrderID> 10966 </ OrderID> <ProductID> 56 </ ProductID> <UnitPrice> 38 </ UnitPrice> <Cantidad> 12 </ Cantidad> <Discount> 0,15 </ Descuento> </ OrderDetails> <OrderDetails> <OrderID> 10966 </ OrderID> <ProductID> 62 </ ProductID> <UnitPrice> 49,3 </ UnitPrice> <Cantidad> 12 </ Cantidad> <Discount> 0,15 </ Descuento> </ OrderDetails> CHULETAS <CustomerID> </ CustomerID> <EmployeeID> 4 </ EmployeeID> <OrderDate> 1998-1903-20T00: 00:00.0000000 </ OrderDate> <RequiredDate> 1998-1904-17T00: 00:00.0000000 </ FechaRequerida> <ShippedDate> 1998-1904-08T00: 00:00.0000000 </ FechaEnvo> <ShipVia> 1 </ ShipVia> <Freight> 27,19 </ Transporte> <ShipName> Chop-suey chino </ Destinatario> <ShipAddress> Hauptstr. 31 </ ShipAddress> <ShipCity> Berna </ CiudadDestinatario> <ShipPostalCode> 3012 </ ShipPostalCode> <ShipCountry> Suiza </ PasDestinatario> </ Pedidos> <CompanyName> Chop-suey chino </ CompanyName> <ContactName> Yang Wang </ ContactName> <ContactTitle> Propietario </ ContactTitle> <Direccin> Hauptstr. 29 </ Address> <Ciudad> Berna </ ciudad> <PostalCode> 3012 </ CdigoPostal> <Pas> Suiza </ Pas> <Phone> 0452-076545 </ Phone> </ Customers> <Shippers> <ShipperID> 1 </ ShipperID> <CompanyName> Speedy Express </ CompanyName> <Phone> (503) 555-0100 </ Phone> </ Cargadores>

<Shippers> <ShipperID> 2 </ ShipperID> <CompanyName> Paquete Unidos </ CompanyName> <Phone> (503) 555-0101 </ Phone> </ Cargadores> <Shippers> <ShipperID> 3 </ ShipperID> <CompanyName> Federal Envo </ CompanyName> <Phone> (503) 555-0102 </ Phone> </ Cargadores> <Productos> <ProductID> 37 </ ProductID> <ProductName> Gravad lax </ ProductName> <QuantityPerUnit> 12 -. 500 Pkgs g </ QuantityPerUnit> <UnitsInStock> 11 </ UnitsInStock> <UnitsOnOrder> 50 </ UnitsOnOrder> <ReorderLevel> 25 </ ReorderLevel> </ Productos> <Productos> <ProductID> 56 </ ProductID> <ProductName> Gnocchi di nonna Alice </ ProductName> <QuantityPerUnit> 24 -. 250 Pkgs g </ QuantityPerUnit> <UnitsInStock> 21 </ UnitsInStock> <UnitsOnOrder> 10 </ UnitsOnOrder> <ReorderLevel> 30 </ ReorderLevel> </ Productos> <Productos> <ProductID> 62 </ ProductID> <ProductName> Tarte au sucre </ ProductName> <QuantityPerUnit> 48 pasteles </ QuantityPerUnit> <UnitsInStock> 17 </ UnitsInStock> <UnitsOnOrder> 0 </ UnitsOnOrder> <ReorderLevel> 0 </ ReorderLevel> </ Productos> </ PurchaseOrder>
Un paso en el procesamiento de la informacin de la orden de compra que figura en el documento XML anterior es para el fin de llenarse de inventario de la empresa. El empleado responsable de llenar la orden de almacn de la empresa no tiene que ver todo el contenido de la orden de compra, sino que slo necesita ver la ficha tcnica de la orden. Para exponer solamente la informacin del producto a partir del documento XML, crear un establecimiento inflexible de tipos DataSetcon un esquema, escrito como definicin de esquemas XML lenguaje (XSD), que se asigna a los productos y cantidades ordenado. Para obtener ms informacin acerca de inflexible de tipos DataSet objetos, consulte Trabajar con DataSet con tipo . El cdigo siguiente muestra el esquema de la cual el establecimiento inflexible de tipos DataSet se genera para esta muestra.

<? Xml version = "1.0" standalone = "yes"> <Xs: schema id = "OrderDetail" xmlns = "" xmlns: xs = "http://www.w3.org/2001/XMLSchema" xmlns: codegen = "urn: schemas-microsoft-com: xml-msprop" xmlns: msdata = "urn: schemas-microsoft-com: xml-msdata"> <xs:element name="OrderDetail" msdata:IsDataSet="true"> <xs:complexType> <xs:choice maxOccurs="unbounded"> <xs:element name="OrderDetails" codegen:typedName="LineItem" codegen:typedPlural="LineItems"> <xs:complexType> <xs:sequence> <xs:element name="OrderID" type="xs:int" minOccurs="0" codegen:typedName="OrderID"/>

<xs:element nombre="cantidad" type="xs:short" minOccurs="0" codegen:typedName="Quantity"/> <xs:element name="ProductID" type="xs:int" minOccurs="0" codegen:typedName="ProductID"/> </ Xs: sequence> </ Xs: complexType> </ Xs: element> <xs:element name="Products" codegen:typedName="Product" codegen:typedPlural="Products"> <xs:complexType> <xs:sequence> <xs:element name="ProductID" type="xs:int" minOccurs="0" codegen:typedName="ProductID"/> <xs:element name="ProductName" type="xs:string" minOccurs="0" codegen:typedName="ProductName"/> <xs:element name="QuantityPerUnit" type="xs:string" minOccurs="0" codegen:typedName="QuantityPerUnit"/> <xs:element name="UnitsInStock" type="xs:short" minOccurs="0" codegen:typedName="UnitsInStock"/> <xs:element name="UnitsOnOrder" type="xs:short" minOccurs="0" codegen:typedName="UnitsOnOrder"/> <xs:element name="ReorderLevel" type="xs:short" minOccurs="0" codegen:typedName="ReorderLevel"/> </ Xs: sequence> </ Xs: complexType> </ Xs: element> </ Xs: choice> </ Xs: complexType> <xs:unique name="Constraint1"> <xs:selector xpath=".//Products" /> <xs:field xpath="ProductID" /> </ Xs: unique> <xs:keyref name="Relation1" refer="Constraint1" codegen:typedChildren="GetLineItems" codegen:typedParent="Product"> <xs:selector xpath=".//OrderDetails" /> <xs:field xpath="ProductID" /> </ Xs: keyref> </ Xs: element> </ Xs: schema>
Tenga en cuenta que la informacin slo de los OrderDetails y Productos elementos del documento XML original se incluyen en el esquema del DataSet .Sincronizar el DataSet con un XmlDataDocument se asegura de que los elementos no incluidos en el conjunto de datos se mantendr con el documento XML. Con el establecimiento inflexible de tipos DataSet generado a partir del esquema XML (con un espacio de nombres de Northwind.FillOrder ), una parte del documento XML original puede estar expuesto al sincronizar el conjunto de datos con el XmlDataDocument carga desde el documento fuente XML. Tenga en cuenta que el conjunto de datos generada a partir del esquema contiene la estructura, pero sin datos. Los datos se rellena cuando se carga el XML en elXmlDataDocument . Si intenta cargar un XmlDataDocument que se ha sincronizado con un conjunto de datos que ya contiene datos, una excepcin ser lanzada. Despus de que el conjunto de datos (y el XmlDataDocument ) ha sido actualizado, el XmlDataDocument puede escribir el documento XML modificado con los elementos ignorados por el conjunto de datos sigue intacta, como se muestra a continuacin. En el escenario de la orden de compra, despus de que los artculos de la orden se han llenado, el documento XML modificado se puede pasar a la etapa siguiente en el proceso de pedido, tal vez para departamento de envo de la empresa. C# VB

Importaciones sistema Importaciones System.Data Imports System.Xml Imports Northwind.FillOrder

Pblico clase Sample Pblico Compartido Sub Main () Dim orderDS Como OrderDetail = New OrderDetail Dim xmlDocument Como XmlDataDocument = New XmlDataDocument (orderDS) xmlDocument.Load ( "Order.xml" ) Dim OrderItem Como OrderDetail.LineItem Dim producto Como OrderDetail.Product Para cada OrderItem En orderDS.LineItems producto = orderItem.Product "Eliminar la cantidad de stock actual. product.UnitsInStock = CType (product.UnitsInStock - orderItem.Quantity, Short ) 'Si el stock restante es menor que el nivel de pedido, orden de ms. Si ((product.UnitsInStock product.UnitsOnOrder +) <product.ReorderLevel) Entonces product.UnitsOnOrder = CType (product.UnitsOnOrder + product.ReorderLevel, Short ) Fin Si prximo xmlDocument.Save ( "Order_out.xml" ) End Sub End Class

Realizar una consulta XPath en un DataSet


. NET Framework 2.0
Otras versiones 1 de 1 puntuado este til - Valorar este tema La relacin entre un sincronizado DataSet y XmlDataDocument le permite hacer uso de los servicios XML, como el Lenguaje de rutas XML (XPath) consulta, que acceden a la XmlDataDocument y puede realizar algunas funciones ms conveniente que el acceso al conjunto de datos directamente. Por ejemplo, en lugar de utilizar el Select mtodo de un DataTable para navegar relaciones con otras tablas en un DataSet , puede realizar una consulta XPath en un XmlDataDocumentque se sincroniza con el conjunto de datos , para obtener una lista de los elementos XML en forma de XmlNodeList . Los nodos de la XmlNodeList , emitidos comoXmlElement nodos, a continuacin, se puede pasar a la GetRowFromElement mtodo de los XmlDataDocument , para volver a juego DataRow referencias a las filas de la tabla en la sincronizada DataSet .

Por ejemplo, el cdigo de ejemplo siguiente realiza un "nieto" consulta XPath. El conjunto de datos se llena con tres tablas: Clientes , Pedidos y DetallesPedido . En la muestra, una relacin padre-hijo se crea por primera vez entre los clientes y los pedidos tablas, y entre los pedidos y DetallesPedido tablas. Una consulta XPath se realiza a continuacin para devolver una XmlNodeList de Clientes nodos donde un nieto OrderDetails nodo tiene una ProductID nodo con el valor de 43. En esencia, la muestra est utilizando la consulta XPath para determinar qu clientes han pedido el producto que tiene el ProductID de 43 aos. C# VB

"Se supone que es una conexin SqlConnection vlida. Connection.Open () Dim dataSet Como DataSet = New DataSet ( "CustomerOrders" ) Dim customerAdapter Como SqlDataAdapter = New SqlDataAdapter (_ "SELECT * FROM Clientes" , conexin) customerAdapter.Fill (dataSet, "Clientes" ) Dim orderAdapter As SqlDataAdapter = New SqlDataAdapter (_ "SELECT * FROM Orders" , conexin) orderAdapter.Fill (dataSet, "Orders" ) Dim detailAdapter As SqlDataAdapter = New SqlDataAdapter (_ "SELECT * FROM [Detalles de pedidos]" , conexin) detailAdapter.Fill (dataSet, "OrderDetails" ) Connection.close () dataSet.Relations.Add ( "CustOrders" , _ dataSet.Tables ( "Clientes" ). Las columnas ( "IdCliente" ), _ dataSet.Tables ( "Orders" ). Las columnas ( "IdCliente" )). Nested = true dataSet.Relations.Add ( "OrderDetail" , _ dataSet.Tables ( "Orders" ). Las columnas ( "OrderID" ), _ dataSet.Tables ( "OrderDetails" ). Las columnas ( "OrderID" ), falsas ). Nested = verdadero Dim xmlDoc Como XmlDataDocument = New XmlDataDocument (dataSet) Dim nodeList Como XmlNodeList = xmlDoc.DocumentElement.SelectNodes (_ "descendientes Clientes :: [* / DetallesPedido / ProductID = 43]" ) Dim DataRow Como DataRow Dim XMLNode Como XmlNode Para cada XMLNode En nodeList DataRow = xmlDoc.GetRowFromElement ( CType (XmlNode, XmlElement)) Si no DataRow Es Nada entonces Console.WriteLine (xmlRow (0). ToString ()) Siguiente

Aplicar una transformacin XSLT a un DataSet

. NET Framework 2.0


Otras versiones

2 de 7 puntuado este til - Valorar este tema El WriteXml mtodo del DataSet le permite escribir el contenido de un DataSet como datos XML. Una tarea comn es transformar entonces XML a otro formato mediante transformaciones XSL (XSLT). Sin embargo, la sincronizacin de un DataSet con un XmlDataDocument permite aplicar una hoja de estilo XSLT al contenido de un conjunto de datos sin tener que escribir primero el contenido del DataSet como datos XML mediante WriteXml . En el ejemplo siguiente, se rellena un DataSet con tablas y relaciones, sincroniza el DataSet con un XmlDataDocument y escribe una parte del conjunto de datoscomo un archivo HTML utilizando una hoja de estilo XSLT. A continuacin se presentan los contenidos de la hoja de estilo XSLT.

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="CustomerOrders"> <HTML> <STYLE> BODY {font-family: verdana; font-size: 9pt} TD {font-size: 8 puntos} </ STYLE> <BODY> <TABLE Border="1"> <xsl:apply-templates select="Customers"/> </ TABLE> </ BODY> </ HTML> </ Xsl: template> <xsl:template match="Customers"> <TR> <TD> <xsl:value-of select="ContactName"/>, <xsl:value-of select="Phone"/> <BR/> </ TD> </ TR> <xsl:apply-templates select="Orders"/> </ Xsl: template> <xsl:template match="Orders"> <TABLE Border="1"> <TR> <TD Valign="top"> <B> orden: </ B> </ td> <td valign="top"> <xsl:value-of select="OrderID"/> </ TD> < / TR> <TR> <TD Valign="top"> <B> Fecha: </ B> </ td> <td valign="top"> <xsl:value-of select="OrderDate"/> </ TD> < / TR> <TR> <TD Valign="top"> <B> Enviar a: </ B> </ TD> <TD Valign="top"> <xsl:value-of select="ShipName"/> <BR/> select="ShipAddress"/> <xsl:value-of <BR/> <xsl:value-of select="ShipCity"/>, <xsl:value-of select="ShipRegion"/> <xsl:value-of select="ShipPostalCode"/> <BR/> <xsl:value-of select="ShipCountry"/> </ TD> </ TR> </ TABLE> </ Xsl: template> </ Xsl: stylesheet>
El siguiente cdigo rellena el DataSet y aplica la hoja de estilo XSLT.

Nota

Si usted est solicitando una hoja de estilo XSLT a un conjunto de datos que contiene las relaciones, se logra un mejor rendimiento si se establece la Nestedpropiedad de la DataRelation a verdadero para cada relacin anidada. Esto le permite utilizar hojas de estilo XSLT que implementa natural de procesamiento de arriba abajo para desplazarse por la jerarqua y transformar los datos, en contraposicin al uso intensivo de rendimiento ejes ubicacin XPath (por ejemplo, los precedentes-relacionados y acompaamiento de los hermanos en la prueba de nodo de hoja de estilos expresiones) para navegar. Para obtener ms informacin sobre las relaciones anidadas, vea DataRelations anidadas .
C# VB

"Supone una conexin SqlConnection vlida. Dim dataSet Como DataSet = New DataSet ( "CustomerOrders" ) Dim customerAdapter As SqlDataAdapter = New SqlDataAdapter (_ "SELECT * FROM Clientes" , conexin) customerAdapter.Fill (dataSet, "Clientes" ) Dim orderAdapter As SqlDataAdapter = New SqlDataAdapter (_ "SELECT * FROM Orders" , conexin) orderAdapter.Fill (dataSet, "Orders" ) Connection.close () dataSet.Relations.Add ( "CustOrders" , _ dataSet.Tables ( "Clientes" ). Las columnas ( "IdCliente" ), _ dataSet.Tables ( "Orders" ). Las columnas ( "IdCliente" )). Nested = true Dim xmlDoc Como XmlDataDocument = New XmlDataDocument (dataSet) Dim xslTran Como XslTransform = New XslTransform xslTran.Load ( "transform.xsl" ) Dim escritor como XmlTextWriter = New XmlTextWriter (_ "xslt_output.html" , System.Text.Encoding.UTF8) xslTran.Transform (xmlDoc, Nada , escritor) writer.Close ()

DataRelations anidadas
. NET Framework 2.0
Otras versiones 6 de 7 puntuado este til - Valorar este tema En una representacin relacional de los datos, las tablas individuales contienen filas que estn relacionadas entre s utilizando una columna o conjunto de columnas.En ADO.NET DataSet , la relacin entre las tablas se implementa mediante un DataRelation . Cuando se crea una DataRelation , las relaciones entre padres e hijos de las columnas son manejadas solamente por medio de la relacin. Las tablas y las columnas son entidades separadas. En la

representacin jerrquica de los datos que proporciona XML, las relaciones entre padres e hijos estn representados por elementos primarios que contienen elementos secundarios anidados. Para facilitar el anidamiento de objetos secundarios cuando un DataSet se sincroniza con un XmlDataDocument o escrito como datos XML mediante WriteXml , elDataRelation expone una Nested propiedad. Ajuste de la Nested propiedad de un DataRelation a cierto hace que las filas secundarias de la relacin que se anidan dentro de la columna primaria cuando se escribe como datos XML o sincronizado con un XmlDataDocument . El Nested propiedad de la DataRelation es false de forma predeterminada. Por ejemplo, considere el siguiente conjunto de datos . C# VB

"Supone una conexin SqlConnection vlida. Dim customerAdapter Como SqlDataAdapter = New SqlDataAdapter (_ "SELECT IdCliente, NombreCompaa FROM Clientes" , conexin) Dim orderAdapter As SqlDataAdapter = New SqlDataAdapter (_ "SELECT OrderID, CustomerID FechaPedido FROM Pedidos" , conexin) Connection.Open () Dim dataSet Como DataSet = New DataSet ( "CustomerOrders" ) customerAdapter.Fill (dataSet, "Clientes" ) orderAdapter.Fill (dataSet, "Orders" ) Connection.close () Dim CustomerOrders Como DataRelation = dataSet.Relations.Add (_ "CustOrders" , dataSet.Tables ( "Clientes" ). Las columnas ( "IdCliente" ), _ dataSet.Tables ( "Orders" ). Las columnas ( "IdCliente" ))
Debido a que el Nested propiedad de la DataRelation objeto no est establecida en verdadero para este conjunto de datos , los objetos secundarios no se anidan dentro de los elementos primarios cuando este conjunto de datos se representa como datos XML. La transformacin de la representacin XML de un DataSet que contiene relacionada DataSet con s no anidados relaciones de datos puede causar un rendimiento lento. Le recomendamos que el nido de las relaciones de datos.Para ello, establezca la Nested propiedad verdadera . A continuacin, escriba el cdigo en la hoja de estilo XSLT que utiliza de arriba hacia abajo expresiones jerrquicas consulta de XPath para localizar y transformar los datos. En el ejemplo de cdigo siguiente se muestra el resultado de llamar a WriteXml en el DataSet .

<CustomerOrders> <Customers> <CustomerID> ALFKI </ CustomerID> <CompanyName> Alfreds Futterkiste </ CompanyName> </ Customers> <Customers> <CustomerID> ANATR </ CustomerID> <CompanyName> Ana Trujillo y Emparedados helados </ CompanyName> </ Customers> <Orders> <OrderID> 10643 </ OrderID> <CustomerID> ALFKI </ CustomerID> <OrderDate> 1997-1908-25T00: 00:00 </ OrderDate> </ Pedidos> <Orders> <OrderID> 10692 </ OrderID> <CustomerID> ALFKI </ CustomerID> <OrderDate> 1997-1910-03T00: 00:00 </ OrderDate> </ Pedidos> <Orders> <OrderID> 10308 </ OrderID> <CustomerID> ANATR </ CustomerID>

<OrderDate> 1996-1909-18T00: 00:00 </ OrderDate> </ Pedidos> </ CustomerOrders>


Tenga en cuenta que el clientes elemento y las Ordenes elementos se muestran como elementos del mismo. Si quera que los pedidos elementos para mostrar como los nios de sus respectivos elementos primarios, el anidado propiedad de la DataRelation tendra que estar en verdadero y que le aada lo siguiente: C# VB

customerOrders.Nested = Verdadero
El cdigo siguiente muestra la salida resultante sera similar, con las Ordenes elementos anidados dentro de sus respectivos elementos primarios.

<CustomerOrders> <Customers> <CustomerID> ALFKI </ CustomerID> <Orders> <OrderID> 10643 </ OrderID> <CustomerID> ALFKI </ CustomerID> <OrderDate> 1997-1908-25T00: 00:00 </ OrderDate> </ Pedidos> <Orders> <OrderID> 10692 </ OrderID> <CustomerID> ALFKI </ CustomerID> <OrderDate> 1997-1910-03T00: 00:00 </ OrderDate> </ Pedidos> <CompanyName> Alfreds Futterkiste </ CompanyName> </ Customers> <Customers> <CustomerID> ANATR </ CustomerID> <Orders> <OrderID> 10308 </ OrderID> <CustomerID> ANATR </ CustomerID> <OrderDate> 1996-1909-18T00: 00:00 </ OrderDate> </ Pedidos> <CompanyName> Ana Trujillo y Emparedados helados </ CompanyName> </ Customers> </ CustomerOrders>

DataSet Generar la estructura relacional de esquemas XML (XSD)


. NET Framework 2.0
Otras versiones 2 de 7 puntuado este til - Valorar este tema Esta seccin proporciona una visin general de cmo el esquema relacional de un conjunto de datos se construye a partir de un lenguaje de definicin de esquemas XML (XSD) esquema. En general, para cada complexType elemento

secundario de un elemento de esquema, se genera una tabla en el DataSet . La estructura de la tabla est determinado por la definicin del tipo complejo. Las tablas se crean en el conjunto de datos para elementos de nivel superior en el esquema. Sin embargo, una tabla slo se crea para un nivel superior complexType cuando el elemento complexType elemento est anidado dentro de otro complexTypeelemento, en cuyo caso el anidado complexType se asigna a un elemento DataTable dentro del conjunto de datos . Para obtener ms informacin acerca de la XSD, consulte el World Wide Web Consortium (W3C) Parte XML Schema 0: Primer Recomendacin, el Esquema XML Parte 1: Recomendacin de estructuras, y el XML Schema Part 2: Recomendacin tipos de datos, que se encuentra en http://www . w3.org / . El siguiente ejemplo muestra un esquema XML donde los clientes es el elemento secundario de la MyDataSet elemento, que es un conjunto de datos del elemento.

<Xs: schema id = "SomeID" xmlns = "" xmlns: xs = "http://www.w3.org/2001/XMLSchema" xmlns: msdata = "urn: schemas-microsoft-com: xml-msdata"> <xs:element name="MyDataSet" msdata:IsDataSet="true"> <xs:complexType> <xs:choice maxOccurs="unbounded"> <xs:element name="customers"> <xs:complexType> <xs:sequence> Xs <: nombre de elemento = "CustomerID" type = "xs: integer" minOccurs = "0" /> Xs <: nombre de elemento = "CompanyName" type = "xs: string" minOccurs = "0" /> <xs:element name="Phone" type="xs:string" /> </ Xs: sequence> </ Xs: complexType> </ Xs: element> </ Xs: choice> </ Xs: complexType> </ Xs: element> </ Xs: schema>
En el ejemplo anterior, el elemento de clientes es un elemento de tipo complejo. Por lo tanto, la definicin de tipo complejo se analiza, y el proceso de mapeo crea la tabla siguiente.

Clientes (CustomerID, CompanyName, Telfono)


El tipo de datos de cada columna de la tabla se deriva del tipo de esquema XML del correspondiente elemento o atributo especificado.

Nota Si el elemento de clientes es de un sencillo esquema XML tipo de datos tales como nmero entero , no hay ninguna tabla generada. Las tablas se crean nicamente para los elementos de nivel superior que son tipos complejos.
En el siguiente esquema XML, el esquema elemento tiene dos hijos de elementos, InStateCustomers y OutOfStateCustomers .

<Xs: schema id = "SomeID" xmlns = "" xmlns: xs = "http://www.w3.org/2001/XMLSchema" xmlns: msdata = "urn: schemas-microsoft-com: xml-msdata"> <xs:element name="InStateCustomers" type="customerType" /> <xs:element name="OutOfStateCustomers" type="customerType" /> <xs:complexType name="customerType"> </ Xs: complexType>

<xs:element name="MyDataSet" msdata:IsDataSet="true"> <xs:complexType> <xs:choice maxOccurs="unbounded"> <xs:element ref="customers" /> </ Xs: choice> </ Xs: complexType> </ Xs: element> </ Xs: schema>
Tanto el InStateCustomers y los OutOfStateCustomers elementos secundarios son elementos de tipo complejo ( CustomerType ). Por lo tanto, el proceso de asignacin genera los siguientes dos tablas idnticas en el DataSet .

InStateCustomers (CustomerID, CompanyName, Telfono) OutOfStateCustomers (CustomerID, CompanyName, Telfono)

Mapeo de esquemas XML (XSD) a las restricciones de DataSet


. NET Framework 2.0
Otras versiones Este tema an no ha sido calificado - Valorar este tema El lenguaje de definicin de esquemas XML (XSD) permite a las limitaciones que se especifican en los elementos y atributos que define. Al asignar un esquema XML a un esquema relacional de DataSet , las restricciones de esquema XML se asignan a las correspondientes restricciones relacionales de las tablas y columnas en el conjunto de datos . En esta seccin se analiza la correlacin de las restricciones de esquema XML siguientes: La restriccin de unicidad especifica utilizando el nico elemento. La restriccin de clave especificado mediante la clave del elemento. La restriccin keyref especifica mediante el keyref elemento. Mediante el uso de una restriccin sobre un elemento o atributo, se especifican ciertas restricciones sobre los valores del elemento en cualquier instancia del documento. Por ejemplo, una restriccin de clave en un CustomerID elemento secundario de un cliente elemento en el esquema indica que los valores de laCustomerID elemento secundario debe ser nico en cualquier instancia del documento, y que los valores nulos no se permiten. Las barreras tambin pueden ser especificados entre elementos y atributos en un documento, con el fin de establecer una relacin en el documento. Las principales limitaciones y keyref se utilizan en el esquema para especificar las limitaciones dentro del documento, lo que resulta en una relacin entre elementos del documento y atributos. El proceso de asignacin convierte estas restricciones de esquema en cuenta las limitaciones correspondientes de las tablas creadas en el conjunto de datos .

Asignacin nica de esquemas XML (XSD) a las restricciones de DataSet


. NET Framework 2.0
Otras versiones 0 de 1 puntuado este til - Valorar este tema En un lenguaje de definicin de esquemas XML (XSD), el nico elemento especifica la restriccin de unicidad en un elemento o atributo. En el proceso de traduccin de un esquema XML en un esquema relacional, la restriccin nica especificada en un elemento o atributo en el esquema XML se asigna a una restriccin de unicidad en el DataTable en el correspondiente conjunto de datos que se genera. En la tabla siguiente se describen los msdata atributos que se pueden especificar en el nico elemento.

Nombre del atributo msdata: ConstraintName msdata: PrimaryKey

Descripcin

Si se especifica este atributo, su valor se utiliza como el nombre de restriccin. De lo contrario, el nombre de atributo proporciona el valor del nombre de restriccin. Si PrimaryKey = "true" est presente en el nico elemento, una restriccin nica se crea con el IsPrimaryKey propiedad establecida en verdadero .

El siguiente ejemplo muestra un esquema XML que utiliza el nico elemento para especificar una restriccin de unicidad.

<Xs: schema id = "SampleDataSet" xmlns: xs = "http://www.w3.org/2001/XMLSchema" xmlns: msdata = "urn: schemas-microsoft-com: xml-msdata"> name="Customers"> <xs:element <xs:complexType> <xs:sequence> <xs:element name="CustomerID" type="xs:integer" minOccurs="0" /> <xs:element name="CompanyName" type="xs:string" minOccurs="0" /> <xs:element name="Phone" type="xs:string" /> </ Xs: sequence> </ Xs: complexType> </ Xs: element> <xs:element name="SampleDataSet" msdata:IsDataSet="true"> <xs:complexType> <xs:choice maxOccurs="unbounded"> <xs:element ref="Customers" /> </ Xs: choice> </ Xs: complexType>

<Xs: unique msdata: ConstraintName = "UCustID" name = "UniqueCustIDConstr"> <xs:selector xpath=".//Customers" /> <xs:field xpath="CustomerID" /> </ Xs: unique> </ Xs: element> </ Xs: schema>
El nico elemento en el esquema especifica que para todos los clientes que los elementos de una instancia de documento, el valor del CustomerID elemento secundario debe ser nico. En la construccin del conjunto de datos , el proceso de asignacin lee este esquema y genera la tabla siguiente:

Clientes (CustomerID, CompanyName, Telfono)


El proceso de asignacin tambin crea una restriccin nica en la CustomerID columna, como se muestra en el siguiente conjunto de datos . (Para simplificar, slo se muestran las propiedades relevantes.)

DataSetName: MyDataSet TableName: Clientes ColumnName: CustomerID AllowDBNull: True nico: True ConstraintName: UcustID Tipo: UniqueConstraint Tabla: Clientes Columnas: CustomerID IsPrimaryKey: False
En el conjunto de datos que se genera, la IsPrimaryKey propiedad se establece en False para la restriccin nica. La nica propiedad en la columna indica que losCustomerID valores de la columna debe ser nico (pero pueden ser una referencia nula, segn lo especificado por el AllowDBNull propiedad de la columna). Si se modifica el esquema y establecer la opcin msdata: PrimaryKey valor del atributo a Verdadero , la restriccin nica se crea en la tabla. El AllowDBNullpropiedad de columna se establece en False , y el IsPrimaryKey propiedad de la restriccin establecida en Verdadero , con lo que el CustomerID columna una columna de clave primaria. Puede especificar una restriccin de unicidad en una combinacin de elementos o atributos en el esquema XML. El siguiente ejemplo muestra cmo especificar que una combinacin de CustomerID y CompanyName valores deben ser nicos para todos los clientes en cualquier caso, al aadir otro xs: Campo de elemento en el esquema.

<Xs: unique msdata: ConstraintName = "SomeName" name = "UniqueCustIDConstr"> <xs:selector xpath=".//Customers" /> <xs:field xpath="CustomerID" /> <xs:field xpath="CompanyName" /> </ Xs: unique>
Esta es la restriccin de que se crea en la resultante DataSet .

ConstraintName: SomeName Tabla: Clientes Columnas: CustomerID CompanyName IsPrimaryKey: False

Asignacin de clave de esquema XML (XSD) a las restricciones de DataSet


. NET Framework 2.0
Otras versiones Este tema an no ha sido calificado - Valorar este tema En un esquema, puede especificar una restriccin de clave en un elemento o atributo utilizando la clave del elemento. El elemento o atributo en el que se especifica una restriccin de clave debe tener valores nicos en cualquier instancia del esquema, y no puede tener valores nulos. La restriccin de clave es similar a la restriccin nica, excepto que la columna en la que se define una restriccin de clave no pueden tener valores nulos. En la tabla siguiente se describen los msdata atributos que se pueden especificar en la clave del elemento.

Nombre del atributo msdata: ConstraintName msdata: PrimaryKey

Descripcin

Si se especifica este atributo, su valor se utiliza como el nombre de restriccin. De lo contrario, el nombre de atributo proporciona el valor del nombre de restriccin. Si PrimaryKey = "true" est presente, el IsPrimaryKey propiedad restriccin se establece en verdadero , por lo que es una clave principal. El AllowDBNull propiedad de columna se establece en false , ya que las claves principales no pueden tener valores nulos.

Al convertir esquema en el que se especifica una restriccin de clave, el proceso de asignacin crea una restriccin nica en la tabla con el AllowDBNull propiedad de columna establecido en false para cada columna de la restriccin. El IsPrimaryKey propiedad de la restriccin nica tambin se establece en false, a menos que haya especificado msdata: PrimaryKey = "true" en la clave del elemento. Esto es idntico a una restriccin de unicidad en el esquema donde PrimaryKey = "true" . En el ejemplo siguiente esquema, la clave del elemento especifica la restriccin de clave en el CustomerID elemento.

<Xs: schema id = "cod" xmlns: xs = "http://www.w3.org/2001/XMLSchema" xmlns: msdata = "urn: schemas-microsoft-com: xml-msdata"> name="Customers"> <xs:element <xs:complexType> <xs:sequence> <xs:element name="CustomerID" type="xs:string" minOccurs="0" /> <xs:element name="CompanyName" type="xs:string" minOccurs="0" /> <xs:element name="Phone" type="xs:string" /> </ Xs: sequence> </ Xs: complexType> </ Xs: element>

<xs:element name="MyDataSet" msdata:IsDataSet="true"> <xs:complexType> <xs:choice maxOccurs="unbounded"> <xs:element ref="Customers" /> </ Xs: choice> </ Xs: complexType> <Xs: key msdata: PrimaryKey = "true" msdata: ConstraintName = "KeyCustID" name = "KeyConstCustomerID"> <xs:selector xpath=".//Customers" /> <xs:field xpath="CustomerID" /> </ Xs: key> </ Xs: element> </ Xs: schema>
La clave de elemento especifica que los valores de la CustomerID elemento secundario del Clientes elemento debe tener valores nicos y no pueden tener valores nulos. Al convertir los esquemas XML (lenguaje de definicin XSD), el proceso de asignacin crea la tabla siguiente:

Clientes (CustomerID, CompanyName, Telfono)


La asignacin de esquema XML tambin crea un UniqueConstraint en el CustomerID columna, como se muestra en el siguiente conjunto de datos . (Para simplificar, slo se muestran las propiedades relevantes.)

DataSetName: MyDataSet TableName: los clientes ColumnName: CustomerID AllowDBNull: False nico: True ConstraintName: KeyCustID Tabla: clientes Columnas: CustomerID IsPrimaryKey: True
En el conjunto de datos que se genera, la IsPrimaryKey propiedad de la UniqueConstraint se establece en verdadero , porque el esquema especifica msdata: PrimaryKey = "true" en la clave del elemento. El valor de la ConstraintName propiedad de la UniqueConstraint en el conjunto de datos es el valor de la msdata: ConstraintName atributo especificado en laclave del elemento en el esquema.

Mapeo keyref de esquemas XML (XSD) a las restricciones de DataSet


. NET Framework 2.0
Otras versiones

1 de 1 puntuado este til - Valorar este tema El keyref elemento le permite establecer vnculos entre los elementos dentro de un documento. Esto es similar a una relacin de clave externa en una base de datos relacional. Si el esquema especifica el keyref elemento, el elemento se convierte durante el proceso de asignacin de esquema correspondiente a una restriccin de clave externa en las columnas de las tablas del DataSet . Por defecto, el keyref elemento tambin genera una relacin, con el ParentTable , ChildTable ,ParentColumn y ChildColumn propiedades especificadas en la relacin. En la tabla siguiente se describen los msdata atributos que se pueden especificar en el keyref elemento.

Nombre del atributo msdata: ConstraintOnly

Descripcin

Si ConstraintOnly = "true" se especifica en la keyref elemento en el esquema, una restriccin se crea, pero no se crea relacin. Si este atributo no se especifica (o se establece en False ), tanto la restriccin y la relacin se crean en el DataSet . Si el ConstraintName atributo se especifica, su valor se utiliza como el nombre de la restriccin. De lo contrario, el nombre de atributo delkeyref elemento en el esquema proporciona el nombre de la restriccin en el conjunto de datos . Si el UpdateRule atributo se especifica en el keyref elemento del esquema, su valor se asigna a la UpdateRule propiedad restriccin en elconjunto de datos . De lo contrario el UpdateRule propiedad se establece en cascada . Si el DeleteRule atributo se especifica en el keyref elemento del esquema, su valor se asigna a la DeleteRule propiedad restriccin en elconjunto de datos . De lo contrario el DeleteRule propiedad se establece en cascada . Si el AcceptRejectRule atributo se especifica en el keyref elemento del esquema, su valor se asigna a la AcceptRejectRule propiedad restriccin en el conjunto de datos . De lo contrario el AcceptRejectRule propiedad est establecida en Ninguno .

msdata: ConstraintName

msdata: UpdateRule

msdata: DeleteRule

msdata: AcceptRejectRule

El siguiente ejemplo contiene un esquema que especifica las claves y keyref relaciones entre el OrderNumber elemento secundario de la Orden de los elementos y la OrderNo elemento secundario del OrderDetail elemento. En el ejemplo, la OrderNumber elemento secundario de la OrderDetail elemento se refiere a la OrderNo elemento secundario clave de la Orden elemento.

<Xs: schema id = "MyDataSet" xmlns = "" xmlns: xs = "http://www.w3.org/2001/XMLSchema" xmlns: msdata = "urn: schemas-microsoft-com: xml-msdata"> <xs:element name="MyDataSet" msdata:IsDataSet="true"> <xs:complexType> <xs:choice maxOccurs="unbounded"> <xs:element name="OrderDetail"> <xs:complexType> <xs:sequence> <xs:element name="OrderNo" type="xs:integer" /> <xs:element name="ItemNo" type="xs:string" /> </ Xs: sequence> </ Xs: complexType>

</ Xs: element> <xs:element name="Order"> <xs:complexType> <xs:sequence> <xs:element name="OrderNumber" type="xs:integer" /> <xs:element name="EmpNumber" type="xs:integer" /> </ Xs: sequence> </ Xs: complexType> </ Xs: element> </ Xs: choice> </ Xs: complexType> <xs:key name="OrderNumberKey"> <xs:selector xpath=".//Order" /> <xs:field xpath="OrderNumber" /> </ Xs: key> <xs:keyref name="OrderNoRef" refer="OrderNumberKey"> <xs:selector xpath=".//OrderDetail" /> <xs:field xpath="OrderNo" /> </ Xs: keyref> </ Xs: element> </ Xs: schema>
El lenguaje de definicin de esquemas XML (XSD) esquema de asignacin proceso produce el siguiente conjunto de datos con dos tablas:

OrderDetail (OrderNo, ItemNo) y Orden (OrderNumber, EmpNumber)


Adems, el conjunto de datos define las restricciones siguientes: Una restriccin de unicidad en la Orden mesa.

Tabla: Orden Columnas: OrderNumber ConstraintName: OrderNumberKey Tipo: UniqueConstraint IsPrimaryKey: False
Una relacin entre la Orden y OrderDetail tablas. El Nested propiedad se establece en False, porque los dos elementos no estn anidados en el esquema.

ParentTable: Orden ParentColumns: OrderNumber ChildTable: OrderDetail ChildColumns: OrderNo ParentKeyConstraint: OrderNumberKey ChildKeyConstraint: OrderNoRef RelationName: OrderNoRef Nested: False
Una restriccin de clave externa en la OrderDetail mesa.

ConstraintName: OrderNoRef Tipo: ForeignKeyConstraint Tabla: OrderDetail Columnas: OrderNo RelatedTable: Orden RelatedColumns: OrderNumber

Generar las relaciones de DataSet desde la definicin de esquema XML (XSD)


. NET Framework 2.0
Otras versiones 0 de 4 puntuado este til - Valorar este tema En un conjunto de datos , se forma una asociacin entre dos o ms columnas, creando una relacin padre-hijo. Hay tres formas de representar un conjunto de datos con relacin a un esquema de lenguaje de definicin XML (XSD): Especifique los tipos complejos anidados. Utilice el msdata: Relacin anotacin. Especifique un xs: keyref sin msdata: ConstraintOnly anotacin.

Tipos complejos anidados


Definiciones de tipos complejos anidados en un esquema indican las relaciones entre padres e hijos de los elementos. El siguiente fragmento de esquema XML de muestra que OrderDetail es un elemento secundario de la Orden elemento.

<xs:element name="Order"> <xs:complexType> <xs:sequence> <xs:element name="OrderDetail" /> <xs:complexType> </ Xs: complexType> </ Xs: sequence> </ Xs: complexType> </ Xs: element>
El proceso de asignacin de esquema XML crea tablas en el DataSet que se corresponden con los tipos anidados complejos en el esquema. Tambin crea columnas adicionales que se utilizan como padre - hijo columnas para las tablas generadas. Tenga en cuenta que estos padres - columnas secundarias especificar relaciones, que no es lo mismo que especificar restricciones de clave principal clave / exterior.

msdata: Relacin anotacin


El msdata: Relacin anotacin le permite especificar explcitamente relaciones padre-hijo entre los elementos de un esquema que no estn anidados. El ejemplo siguiente muestra la estructura de la Relacin elemento.

<Msdata: Nombre de la relacin = "CustOrderRelationship" msdata: parent = "" msdata: Nio = ""

msdata: parentkey = "" msdata: childkey = "" />


Los atributos de la msdata: Relacin anotacin identificar los elementos que intervienen en la relacin entre padres e hijos, as como los parentkey y childkeyelementos y atributos que intervienen en la relacin. El proceso de asignacin utiliza esta informacin para generar las tablas en el DataSet y crear la relacin clave principal / clave externa entre las tablas. Por ejemplo, el fragmento de esquema siguiente se especifica Order y OrderDetail elementos del mismo nivel (no anidado). El esquema especifica un msdata: Relacin anotacin, que especifica la relacin padre-hijo entre estos dos elementos. En este caso, una relacin explcita debe ser especificado usando la msdata: Relacin anotacin.

<xs:element name="MyDataSet" msdata:IsDataSet="true"> <xs:complexType> <xs:choice maxOccurs="unbounded"> <xs:element name="OrderDetail"> <xs:complexType> </ Xs: complexType> </ Xs: element> <xs:element name="Order"> <xs:complexType> </ Xs: complexType> </ Xs: element> </ Xs: choice> </ Xs: complexType> </ Xs: element> <xs:annotation> <xs:appinfo> <Msdata: Nombre de la relacin = "OrdOrdDetailRelation" msdata: parent = "Orden" msdata: Nio = "OrderDetail" msdata: parentkey = "OrderNumber" msdata: childkey = "OrderNo" /> </ Xs: appinfo> </ Xs: annotation>
El proceso de asignacin utiliza la Relacin elemento para crear una relacin padre-hijo entre el OrderNumber columna de la Orden de la tabla y el OrderNocolumna en la OrderDetail tabla en el DataSet . El proceso de asignacin slo especifica la relacin, no significa automticamente especificar cualquier restriccin sobre los valores en estas columnas, al igual que las restricciones de clave principal clave / exterior en bases de datos relacionales.

Asignacin de relaciones implcitas entre elementos de esquema anidados


. NET Framework 2.0

Otras versiones

2 de 2 puntuado este til - Valorar este tema Una definicin de esquemas XML de lenguaje (XSD) puede tener tipos complejos anidados unos dentro de otros. En este caso, el proceso de asignacin se aplica la asignacin predeterminada y crea la siguiente en el DataSet : Una tabla para cada uno de los tipos complejos (padre e hijo). Si no existe restriccin de unicidad en la matriz, una columna de clave principal adicional por definicin tabla

denominada TableName _id dondeTableName es el nombre de la tabla principal. Una restriccin de clave principal en la tabla principal identificar la columna adicional como la clave principal (estableciendo la IsPrimaryKey propiedad aVerdadero ). La restriccin se denomina restriccin # donde # es 1, 2, 3, y as sucesivamente. Por ejemplo, el nombre predeterminado para la primera restriccin es Constraint1. Una restriccin de clave externa en la tabla secundaria que identifica la columna adicional como clave externa que hace referencia a la clave principal de la tabla principal. La restriccin se denomina ParentTable_ChildTable donde ParentTable es el nombre de la tabla padre y ChildTable es el nombre de la tabla secundaria. Un dato relacin entre los padres y las secundarias.

El siguiente ejemplo muestra un esquema donde OrderDetail es un elemento secundario de orden .

<Xs: schema id = "MyDataSet" xmlns = "" xmlns: xs = "http://www.w3.org/2001/XMLSchema" xmlns: msdata = "urn: schemas-microsoft-com: xml-msdata"> <xs:element name="MyDataSet" msdata:IsDataSet="true"> <xs:complexType> <xs:choice maxOccurs="unbounded"> <xs:element name="Order"> <xs:complexType> <xs:sequence> <xs:element name="OrderNumber" type="xs:string" /> <xs:element name="EmpNumber" type="xs:string" /> <xs:element name="OrderDetail"> <xs:complexType> <xs:sequence> <xs:element name="OrderNo" type="xs:string" /> <xs:element name="ItemNo" type="xs:string" /> </ Xs: sequence> </ Xs: complexType> </ Xs: element> </ Xs: sequence> </ Xs: complexType> </ Xs: element> </ Xs: choice> </ Xs: complexType> </ Xs: element> </ Xs: schema>
El proceso de asignacin de esquema XML crea lo siguiente en el DataSet : Un orden y un OrderDetail mesa.

Orden (OrderNumber, EmpNumber, order_id) OrderDetail (OrderNo, ItemNo, order_id)


Una restriccin de unicidad en la Orden mesa. Tenga en cuenta que el IsPrimaryKey propiedad se establece en Verdadero .

ConstraintName: Constraint1 Tipo: UniqueConstraint Tabla: Orden

Columnas: order_id IsPrimaryKey: True


Una restriccin de clave externa en la OrderDetail mesa.

ConstraintName: Order_OrderDetail Tipo: ForeignKeyConstraint Tabla: OrderDetail Columnas: order_id RelatedTable: Orden RelatedColumns: order_id
Una relacin entre la Orden y OrderDetail tablas. El Nested propiedad de esta relacin se establece en Verdadero , porque los pedidos y OrderDetailelementos estn anidados en el esquema.

ParentTable: Orden ParentColumns: order_id ChildTable: OrderDetail ChildColumns: order_id ParentKeyConstraint: Constraint1 ChildKeyConstraint: Order_OrderDetail RelationName: Order_OrderDetail Nested: True

Relaciones grfico especificadas para elementos anidados


. NET Framework 2.0
Otras versiones Este tema an no ha sido calificado - Valorar este tema Un esquema puede incluir un msdata: Relacin anotacin para especificar explcitamente la correlacin entre dos elementos en el esquema. Los dos elementos especificados en msdata: Relacin se pueden anidar en el esquema,

pero no tiene que serlo. El proceso de asignacin utiliza msdata: Relacin del esquema para generar la relacin clave principal / clave externa entre las dos columnas. El siguiente ejemplo muestra un esquema XML en el que el OrderDetail elemento es un elemento secundario del Orden . El msdata: Relacin identifica esta relacin padre-hijo y especifica que el OrderNumber columna de la resultante Orden tabla est relacionada con la OrderNo columna de la resultante OrderDetailmesa.

<Xs: schema id = "MyDataSet" xmlns = "" xmlns: xs = "http://www.w3.org/2001/XMLSchema" xmlns: msdata = "urn: schemas-microsoft-com: xml-msdata"> <xs:element name="MyDataSet" msdata:IsDataSet="true"> <xs:complexType> <xs:choice maxOccurs="unbounded"> <xs:element name="Order"> <xs:complexType> <xs:sequence> <xs:element name="OrderNumber" type="xs:string" /> <xs:element name="EmpNumber" type="xs:string" /> <xs:element name="OrderDetail"> <xs:annotation> <xs:appinfo> <Msdata: Nombre de la relacin = "OrdODRelation" msdata: parent = "Orden" msdata: Nio = "OrderDetail" msdata: parentkey = "OrderNumber" msdata: childkey = "OrderNo" /> </ Xs: appinfo> </ Xs: annotation> <xs:complexType> <xs:sequence> <xs:element name="OrderNo" type="xs:string" /> <xs:element name="ItemNo" type="xs:string" /> </ Xs: sequence> </ Xs: complexType> </ Xs: element> </ Xs: sequence> </ Xs: complexType> </ Xs: element> </ Xs: choice> </ Xs: complexType> </ Xs: element> </ Xs: schema>
El proceso de asignacin de esquema XML crea lo siguiente en el DataSet : Un orden y un OrderDetail mesa.

Orden (OrderNumber, EmpNumber) OrderDetail (OrderNo, ItemNo)


Una relacin entre la Orden y OrderDetail tablas. El Nested propiedad de esta relacin se establece en Verdadero , porque los pedidos y OrderDetailelementos estn anidados en el esquema.

ParentTable: Orden ParentColumns: OrderNumber ChildTable: OrderDetail ChildColumns: OrderNo RelationName: OrdODRelation Nested: True

El proceso de asignacin no crea ninguna restriccin.

Especificar relaciones entre elementos sin anidamiento


. NET Framework 2.0
Otras versiones Este tema an no ha sido calificado - Valorar este tema Cuando los elementos no estn anidados, no se crean relaciones implcitas. Puede, sin embargo, especificar explcitamente las relaciones entre los elementos que no estn anidadas utilizando el msdata: Relacin anotacin. El siguiente ejemplo muestra un esquema XML en el que el msdata: Relacin anotacin se especifica entre el orden y OrderDetail elementos, que no estn anidados. El msdata: Relacin anotacin se especifica como elemento secundario del esquema de elemento.

<Xs: schema id = "MyDataSet" xmlns = "" xmlns: xs = "http://www.w3.org/2001/XMLSchema" xmlns: msdata = "urn: schemas-microsoft-com: xml-msdata"> <xs:element name="MyDataSet" msdata:IsDataSet="true"> <xs:complexType> <xs:choice maxOccurs="unbounded"> <xs:element name="OrderDetail"> <xs:complexType> <xs:sequence> <xs:element name="OrderNo" type="xs:string" /> <xs:element name="ItemNo" type="xs:string" /> </ Xs: sequence> </ Xs: complexType> </ Xs: element> <xs:element name="Order"> <xs:complexType> <xs:sequence> <xs:element name="OrderNumber" type="xs:string" /> <xs:element name="EmpNumber" type="xs:string" /> </ Xs: sequence> </ Xs: complexType> </ Xs: element> </ Xs: choice> </ Xs: complexType> </ Xs: element> <xs:annotation> <xs:appinfo> <Msdata: Nombre de la relacin = "OrdOrderDetailRelation" msdata: parent = "Orden" msdata: Nio = "OrderDetail" msdata: parentkey = "OrderNumber" msdata: childkey = "OrderNo" /> </ Xs: appinfo> </ Xs: annotation> </ Xs: schema>

El lenguaje de definicin de esquemas XML (XSD) Proceso de esquema de asignacin crea un DataSet con orden y OrderDetail mesas y una relacin especfica entre estas dos tablas, como se muestra a continuacin.

RelationName: OrdOrderDetailRelation ParentTable: Orden ParentColumns: OrderNumber ChildTable: OrderDetail ChildColumns: OrderNo Nested: False

Comprender la interrelacin entre restricciones y relaciones


. NET Framework 2.0
Otras versiones 0 de 1 puntuado este til - Valorar este tema En un lenguaje de definicin de esquemas XML (XSD), puede especificar restricciones (restricciones nicas, claves y keyref) y las relaciones (con la msdata: Relacinanotacin). En este tema se explica cmo las restricciones y relaciones especificadas en un esquema XML se interpretan para generar el conjunto de datos . En general, en un esquema XML, se especifica el msdata: Relacin anotacin si desea generar slo las relaciones en el conjunto de datos . Para obtener ms informacin, vea Generar las relaciones de DataSet desde la definicin de esquema XML (XSD) . Puede especificar restricciones (unique, key y keyref) si desea generar restricciones en el DataSet . Tenga en cuenta que la llave y limitaciones keyref tambin se utilizan para generar relaciones, como se explica ms adelante en este tema.

Generar una relacin de las principales limitaciones y keyref


En lugar de especificar el msdata: Relacin anotacin, puede especificar restricciones de claves y keyref, que se utilizan durante el proceso de mapeo de esquemas XML para generar no slo las restricciones, sino tambin la relacin en el conjunto de datos . Sin embargo, si se especifica msdata: ConstraintOnly = "true"en el keyref elemento, el conjunto de datos incluye slo las restricciones y no incluir la relacin. El siguiente ejemplo muestra un esquema XML que incluye la Orden y OrderDetail elementos, que no estn anidados. El esquema tambin especifica las restricciones de claves y keyref.

<Xs: schema id = "MyDataSet" xmlns = "" xmlns: xs = "http://www.w3.org/2001/XMLSchema" xmlns: msdata = "urn: schemas-microsoft-com: xml-msdata">

<xs:element name="MyDataSet" msdata:IsDataSet="true"> <xs:complexType> <xs:choice maxOccurs="unbounded"> <xs:element name="OrderDetail"> <xs:complexType> <xs:sequence> <xs:element name="OrderNo" type="xs:integer" /> <xs:element name="ItemNo" type="xs:string" /> </ Xs: sequence> </ Xs: complexType> </ Xs: element> <xs:element name="Order"> <xs:complexType> <xs:sequence> <xs:element name="OrderNumber" type="xs:integer" /> <xs:element name="EmpNumber" type="xs:integer" /> </ Xs: sequence> </ Xs: complexType> </ Xs: element> </ Xs: choice> </ Xs: complexType> <xs:key name="OrderNumberKey"> <xs:selector xpath=".//Order" /> <xs:field xpath="OrderNumber" /> </ Xs: key> <xs:keyref name="OrderNoRef" refer="OrderNumberKey"> <xs:selector xpath=".//OrderDetail" /> <xs:field xpath="OrderNo" /> </ Xs: keyref> </ Xs: element> </ Xs: schema>
El conjunto de datos que se genera durante el proceso de asignacin de esquema XML incluye los pedidos y OrderDetail tablas. Adems, el conjunto de datosincluye las relaciones y restricciones. El siguiente ejemplo muestra estas relaciones y restricciones. Tenga en cuenta que el esquema no especifica la msdata: Relacin anotacin, en su lugar, las principales limitaciones y keyref se utilizan para generar la relacin.

.... ConstraintName: OrderNumberKey Tipo ....: UniqueConstraint .... Tabla: Orden Columnas: .... OrderNumber .... IsPrimaryKey: False .... ConstraintName: OrderNoRef Tipo ....: ForeignKeyConstraint .... Tabla: OrderDetail Columnas: .... OrderNo .... RelatedTable: Orden .... RelatedColumns: OrderNumber .. RelationName: OrderNoRef .. ParentTable: Orden .. ParentColumns: OrderNumber .. ChildTable: OrderDetail .. ChildColumns: OrderNo .. ParentKeyConstraint: OrderNumberKey .. ChildKeyConstraint: OrderNoRef Nested ..: False

En el ejemplo anterior esquema, el orden y OrderDetail elementos no estn anidados. En el ejemplo siguiente esquema, estos elementos estn anidados. Sin embargo, no msdata: Relacin anotacin se especifica, por lo tanto, una relacin implcita se supone. Para obtener ms informacin, vea Asignar relaciones implcitas entre elementos de esquema anidados . El esquema tambin especifica las restricciones de claves y keyref.

<Xs: schema id = "MyDataSet" xmlns = "" xmlns: xs = "http://www.w3.org/2001/XMLSchema" xmlns: msdata = "urn: schemas-microsoft-com: xml-msdata"> <xs:element name="MyDataSet" msdata:IsDataSet="true"> <xs:complexType> <xs:choice maxOccurs="unbounded"> <xs:element name="Order"> <xs:complexType> <xs:sequence> <xs:element name="OrderNumber" type="xs:integer" /> <xs:element name="EmpNumber" type="xs:integer" /> <xs:element name="OrderDetail"> <xs:complexType> <xs:sequence> <xs:element name="OrderNo" type="xs:integer" /> <xs:element name="ItemNo" type="xs:string" /> </ Xs: sequence> </ Xs: complexType> </ Xs: element> </ Xs: sequence> </ Xs: complexType> </ Xs: element> </ Xs: choice> </ Xs: complexType> <xs:key name="OrderNumberKey"> <xs:selector xpath=".//Order" /> <xs:field xpath="OrderNumber" /> </ Xs: key> <xs:keyref name="OrderNoRef" refer="OrderNumberKey"> <xs:selector xpath=".//OrderDetail" /> <xs:field xpath="OrderNo" /> </ Xs: keyref> </ Xs: element> </ Xs: schema>
El conjunto de datos resultante del proceso de mapeo de esquemas XML incluye dos tablas:

Orden (OrderNumber, EmpNumber, order_id) OrderDetail (OrderNumber, ItemNumber, order_id)


El conjunto de datos incluye tambin las dos relaciones (una basada en el msdata: relacin anotacin y la otra basada en la tecla y restricciones keyref) y limitaciones diferentes. El ejemplo siguiente muestra las relaciones y restricciones.

.. RelationName: Order_OrderDetail .. ParentTable: Orden .. ParentColumns: order_id .. ChildTable: OrderDetail .. ChildColumns: order_id .. ParentKeyConstraint: Constraint1 ChildKeyConstraint ..: Order_OrderDetail Nested ..: True

.. RelationName: OrderNoRef .. ParentTable: Orden .. ParentColumns: OrderNumber .. ChildTable: OrderDetail .. ChildColumns: OrderNo .. ParentKeyConstraint: OrderNumberKey .. ChildKeyConstraint: OrderNoRef Nested ..: False .. ConstraintName: OrderNumberKey Tipo ..: UniqueConstraint Tabla ..: Orden Columnas: .. OrderNumber .. IsPrimaryKey: False .. ConstraintName: Constraint1 Tipo ..: UniqueConstraint Tabla ..: Orden Columnas: .. order_id .. IsPrimaryKey: True .. ConstraintName: Order_OrderDetail Tipo ..: ForeignKeyConstraint .. Tabla: OrderDetail Columnas: .. order_id .. RelatedTable: Orden .. RelatedColumns: order_id .. ConstraintName: OrderNoRef Tipo ..: ForeignKeyConstraint .. Tabla: OrderDetail Columnas: .. OrderNo .. RelatedTable: Orden .. RelatedColumns: OrderNumber
Si una restriccin keyref referencia a una tabla anidada contiene el msdata: IsNested = "verdadero" anotacin, el conjunto de datos crear una sola relacin anidada que se basa en la restriccin keyref y la restriccin relacionada nico / clave.

Deducir la estructura relacional de DataSet desde XML


. NET Framework 2.0

Otras versiones

Este tema an no ha sido calificado - Valorar este tema La estructura relacional, o esquema, de un DataSet est compuesto de tablas, columnas, restricciones y relaciones. Cuando se carga un conjunto de datos de XML, el esquema puede ser predefinido, o puede ser creado, ya sea explcitamente o por inferencia, a partir del cdigo XML que se est cargando. Para obtener ms informacin acerca de cmo cargar el esquema y el contenido de un DataSet desde XML, vea Cargar DataSet desde XML y DataSet Cargando informacin de esquema de XML . Si el esquema de un DataSet se crea a partir de XML, el mtodo preferido es especificar explcitamente el esquema utilizando el lenguaje de definicin de esquema XML (XSD) (como se describe en Generacin de estructura relacional de DataSet desde XML Schema (XSD) ) o el XML reducido de datos (XDR). Si no hay ningn esquema XML o esquema XDR est disponible en el XML, el esquema del DataSet se puede deducir de la estructura de los elementos y atributos XML. En esta seccin se describen las reglas para DataSet inferencia esquema que muestra los elementos y atributos XML y su estructura, y la resultante infiere DataSetesquema. No todos los atributos presentes en un documento XML deben ser incluidos en el proceso de inferencia. Espacio de nombres calificados atributos pueden incluir metadatos que es importante que el documento XML, pero no para el conjunto de datos de esquema. Usando InferXmlSchema , puede especificar espacios de nombres para ser ignorada durante el proceso de inferencia. Para obtener ms informacin, vea DataSet Cargando informacin de esquema de XML .

Resumen del proceso de inferencia de esquemas de DataSet


. NET Framework 2.0
Otras versiones Este tema an no ha sido calificado - Valorar este tema El proceso de inferencia determina en primer lugar, a partir del documento XML, los elementos que se deducen como tablas. De los restantes XML, el proceso de inferencia determina las columnas de estas tablas. Para las tablas anidadas, el proceso de inferencia genera anidada DataRelation y ForeignKeyConstraint objetos. A continuacin se presenta un breve resumen de las reglas de inferencia: Los elementos que tienen atributos se deducen como tablas. Los elementos que tienen elementos secundarios se deducen como tablas. Elementos que se repiten se deducen como una sola tabla. Si el documento o raz, el elemento no tiene atributos, y no hay elementos secundarios que se deducen como columnas, se infiere como un conjunto de datos . De lo contrario, el elemento de documento se deduce como una tabla.

Los atributos se deducen como columnas. Los elementos que no tienen atributos o elementos secundarios, y que no se repiten, se deducen como columnas. Para los elementos que se deducen como tablas anidadas dentro de otros elementos que tambin se deducen como tablas, una anidada DataRelation se crea entre las dos tablas. Una nueva columna, la clave principal llamado TableName_Id se aade a ambas tablas y utilizado por el DataRelation . AForeignKeyConstraint se crea entre las dos tablas utilizando el TableName_Id columna. Para los elementos que se deducen como tablas y que contienen texto, pero no tienen elementos secundarios, una nueva columna llamadaTableName_Text se crea para el texto de cada uno de los elementos. Si un elemento se deduce como una tabla y tiene texto, pero tambin tiene elementos secundarios, el texto se ignora.

Deducir tablas
. NET Framework 2.0
Otras versiones Este tema an no ha sido calificado - Valorar este tema Cuando inferir un esquema de un DataSet a partir de un documento XML, ADO.NET primero determina qu elementos XML representan tablas. El siguiente XML estructuras resultan en una tabla para el conjunto de datos de esquema: Los elementos con atributos Los elementos con elementos secundarios Elementos que se repiten

Los elementos con atributos


Los elementos que tienen atributos especificados en las tablas como resultado inferidos. Por ejemplo, considere el siguiente cdigo XML:

<DocumentElement> <Element1 Attr1="value1"/> <Element1 Attr1="value2"> Texto1 </ Element1> </ DocumentElement>
El proceso de inferencia produce una tabla denominada "Element1". DataSet: DocumentElement Tabla: Element1

attr1 valor1 valor2

Element1_Text

Texto1

Los elementos con elementos secundarios


Los elementos que tienen menor resultado elementos en tablas inferidas. Por ejemplo, considere el siguiente cdigo XML:

<DocumentElement> <Element1> <ChildElement1> Texto1 </ ChildElement1> </ Element1> </ DocumentElement>
El proceso de inferencia produce una tabla denominada "Element1". DataSet: DocumentElement Tabla: Element1

ChildElement1 Texto1
El documento, o raz, resultado elemento en una tabla de inferir si tiene atributos o elementos secundarios que se deducen como columnas. Si el elemento de documento no tiene atributos ni elementos secundarios que se deducen como columnas, el elemento se deduce como un conjunto de datos . Por ejemplo, considere el siguiente cdigo XML:

<DocumentElement> <Element1> Texto1 </ Element1> <Element2> Texto2 </ Element2> </ DocumentElement>
El proceso de inferencia produce una tabla denominada "DocumentElement". DataSet: NewDataSet Tabla: DocumentElement

Element1 Texto1
Como alternativa, considere el siguiente cdigo XML:

Element2 Texto2

<DocumentElement> <Element1 Attr1="value1" attr2="value2"/> </ DocumentElement>


El proceso de inferencia produce un DataSet denominado "DocumentElement" que contiene una tabla denominada "Element1". DataSet: DocumentElement Tabla: Element1

attr1 valor1

attr2 valor2

Elementos que se repiten


Elementos que se repiten resultado en una sola tabla inferida. Por ejemplo, considere el siguiente cdigo XML:

<DocumentElement> <Element1> Texto1 </ Element1> <Element1> Texto2 </ Element1> </ DocumentElement>
El proceso de inferencia produce una tabla denominada "Element1". DataSet: DocumentElement Tabla: Element1

Element1_Text Texto1 Texto2

Deducir columnas
. NET Framework 2.0
Otras versiones Este tema an no ha sido calificado - Valorar este tema Despus de ADO.NET se ha determinado a partir de un documento XML que elementos para inferir como tablas de un DataSet , se infiere entonces las columnas de las tablas. ADO.NET 2.0 presenta un motor de inferencia nuevo esquema que infiere un tipo de datos inflexible de tipos para cada simpleType elemento. En las versiones anteriores, el tipo de datos de un infiere simpleType elemento fue siempre xsd: string .

Migracin y compatibilidad con versiones anteriores


El ReadXml mtodo toma un argumento de tipo InferSchema . Este argumento le permite especificar el comportamiento de inferencia compatible con versiones anteriores. Los valores disponibles para la InferSchema enumeracin se muestran en la siguiente tabla. InferSchema Proporciona compatibilidad hacia atrs por siempre inferir un tipo simple como cadena . InferTypedSchema Infiere un tipo de datos fuertemente tipado. Emite una excepcin si se utiliza con un DataTable . IgnoreSchema Omite cualquier esquema en lnea y lee los datos existentes en el conjunto de datos de esquema.

Atributos
Como se define en Deducir tablas , un elemento con atributos se deducir como una tabla. Los atributos de ese elemento a continuacin, se deducir como columnas de la tabla. El ColumnMapping propiedad de las columnas se establecer en MappingType.Attribute , para asegurarse de que los nombres de columna se escribe como atributos

si el esquema se vuelve a escribir en XML. Los valores de los atributos se almacenan en una fila de la tabla. Por ejemplo, considere el siguiente cdigo XML:

<DocumentElement> <Element1 Attr1="value1" attr2="value2"/> </ DocumentElement>


El proceso de inferencia producir una tabla denominada Element1 con dos columnas, attR1 y attr2 . El ColumnMapping propiedad de ambas columnas se establecer en MappingType.Attribute . DataSet: DocumentElement Tabla: Element1

attr1 valor1

attr2 valor2

Elementos sin atributos o elementos secundarios


Si un elemento no tiene elementos secundarios o atributos, se deduce como una columna. El ColumnMapping propiedad de la columna se establecer en MappingType.Element . El texto para los elementos secundarios se almacena en una fila en la tabla. Por ejemplo, considere el siguiente cdigo XML:

<DocumentElement> <Element1> <ChildElement1> Texto1 </ ChildElement1> <ChildElement2> Texto2 </ ChildElement2> </ Element1> </ DocumentElement>
El proceso de inferencia producir una tabla denominada Element1 con dos columnas, ChildElement1 y ChildElement2 . El ColumnMapping propiedad de ambas columnas se establecer en MappingType.Element . DataSet: DocumentElement Tabla: Element1

ChildElement1 Texto1

ChildElement2 Texto2

Inferir relaciones
. NET Framework 2.0
Otras versiones Este tema an no ha sido calificado - Valorar este tema Si un elemento que se deduce como una tabla tiene un elemento secundario que se infiere tambin como una tabla, un DataRelation se crear entre las dos tablas.Una nueva columna con el nombre de ParentTableName_Id se agregar a la tabla creada por el elemento primario y la tabla creada para el elemento secundario. ElColumnMapping caracterstica de esta columna de identidad se establece en MappingType.Hidden . La columna ser una clave de incremento automtico principal de la tabla principal, y se utilizan para la DataRelation entre las dos tablas. El tipo de datos de la columna de identidad aadido ser System.Int32 , a diferencia del tipo de datos de todas las dems columnas inferidos, que es System.String . A ForeignKeyConstraint con DeleteRule = Cascade tambin se puede crear con la nueva columna en los padres y las secundarias. Por ejemplo, considere el siguiente cdigo XML:

<DocumentElement> <Element1> <ChildElement1 Attr1="value1" attr2="value2"/> <ChildElement2> Texto2 </ ChildElement2> </ Element1> </ DocumentElement>
El proceso de inferencia producir dos tablas: Element1 y ChildElement1 . El Element1 tabla tendr dos columnas: Element1_Id y ChildElement2 . El ColumnMapping caracterstica de la Element1_Id columna se establecer aMappingType.Hidden . El ColumnMapping caracterstica de la ChildElement2 columna se establecer a MappingType.Element . El Element1_Id columna se establece como la clave principal de la Element1 mesa. El ChildElement1 mesa contar con tres columnas: attr1 , attr2 y Element1_Id . El ColumnMapping propiedad para los attr1 y attr2 columnas se establecer enMappingType.Attribute . El ColumnMapping caracterstica de la Element1_Id columna se establecer a MappingType.Hidden . Un DataRelation y ForeignKeyConstraint se crear utilizando los Element1_Id columnas de ambas tablas. DataSet: DocumentElement Tabla: Element1

Element1_Id 0
Tabla: ChildElement1

ChildElement2 Texto2

attr1 valor1

attr2 valor2

Element1_Id 0

DataRelation: Element1_ChildElement1 ParentTable: Element1 ParentColumn: Element1_Id ChildTable: ChildElement1

ChildColumn: Element1_Id Nested: Verdadero ForeignKeyConstraint: Element1_ChildElement1 Columna: Element1_Id ParentTable: Element1 ChildTable: ChildElement1 DeleteRule: Cascade AcceptRejectRule: Ninguno

Inferir Text Element


. NET Framework 2.0
Otras versiones Este tema an no ha sido calificado - Valorar este tema Si un elemento contiene texto y no tiene elementos secundarios que se deducen como tablas (tales como elementos con atributos o elementos repetidos), una nueva columna con el nombre TableName_Text se aadir a la tabla que se deduce para el elemento. El texto contenido en el elemento se puede aadir a una fila de la tabla y almacena en la columna de nuevo. El ColumnMapping propiedad de la nueva columna se establecer en MappingType.SimpleContent . Por ejemplo, considere el siguiente cdigo XML.

<DocumentElement> <Element1 Attr1="value1"> Texto1 </ Element1> </ DocumentElement>


El proceso de inferencia producir una tabla denominada Element1 con dos columnas: attr1 y Element1_Text . El ColumnMapping propiedad de la attr1columna se establecer en MappingType.Attribute . El ColumnMapping caracterstica de la Element1_Text columna se establecer aMappingType.SimpleContent . DataSet: DocumentElement Tabla: Element1

attr1 valor1

Element1_Text Texto1

Si un elemento contiene texto, pero tambin tiene elementos secundarios que contienen texto, una columna no se agregan a la tabla para almacenar el texto contenido en el elemento. El texto contenido en el elemento se tendr en cuenta, mientras que el texto de los elementos secundarios se incluye en una fila en la tabla. Por ejemplo, considere el siguiente cdigo XML.

<Element1> Texto1 <ChildElement1> Texto2 </ ChildElement1> Text3 </ Element1>

El proceso de inferencia producir una tabla denominada Element1 con una columna denominada ChildElement1 . El texto de la ChildElement1 elemento se incluir en una fila de la tabla. El otro texto ser ignorado. El ColumnMapping caracterstica de la ChildElement1 columna se establecer a MappingType.Element . DataSet: DocumentElement Tabla: Element1

ChildElement1 Texto2

Limitaciones de la inferencia
. NET Framework 2.0
Otras versiones Este tema an no ha sido calificado - Valorar este tema El proceso de inferir un conjunto de datos de esquema XML puede dar lugar a diferentes esquemas dependiendo de los elementos XML en cada documento. Por ejemplo, considere los siguientes documentos XML. Documento1:

<DocumentElement> <Element1> Texto1 </ Element1> <Element1> Texto2 </ Element1> </ DocumentElement>
Documento2:

<DocumentElement> <Element1> Texto1 </ Element1> </ DocumentElement>


Para "Documento1", el proceso de inferencia produce un DataSet denominado "DocumentElement" y una tabla denominada "Element1", porque "Element1" es un elemento repetido. DataSet: DocumentElement Tabla: Element1

Element1_Text Texto1 Texto2


Sin embargo, para "Documento2", el proceso de inferencia produce un DataSet denominado "NewDataSet" y una tabla denominada "DocumentElement"."Element1" se infiere como una columna, ya que no tiene atributos ni elementos secundarios. DataSet: NewDataSet

Tabla: DocumentElement

Element1 Texto1
Estos dos documentos XML pueden haber tenido la intencin de producir el mismo esquema, pero el proceso de inferencia produce resultados muy diferentes sobre la base de los elementos contenidos en cada documento. Para evitar las discrepancias que pueden surgir cuando se generan a partir de un documento de esquema XML, se recomienda que se especifique explcitamente un esquema de definicin de esquemas XML usando lenguaje (XSD) o reducido de datos XML (XDR) cuando se carga un DataSet desde XML. Para obtener ms informacin acerca de la especificacin explcita de un conjunto de datos con el esquema de esquema XML, vea Generar la estructura relacional de DataSet desde XML Schema (XSD) .

Conectar con datos y recuperarlos en ADO.NET


. NET Framework 2.0
Otras versiones 4 de cada 13 ha calificado este til - Valorar este tema Una funcin principal de cualquier aplicacin de base de datos se conecta a una fuente de datos y recuperar los datos que contiene. Los datos de. NET Framework proveedores de ADO.NET servir como un puente entre una aplicacin y un origen de datos, lo que le permite ejecutar comandos, as como para recuperar los datos mediante un DataReader o un DataAdapter .

Conexin a orgenes de datos


. NET Framework 2.0
Otras versiones 3 de cada 13 ha calificado este til - Valorar este tema En ADO.NET utiliza una conexin de objeto para conectarse a una fuente de datos especfica mediante el suministro de informacin de autenticacin necesaria en una cadena de conexin. La conexin de objeto que se utiliza depende del tipo de fuente de datos. .. Cada proveedor de datos incluido con el NET Framework tiene una conexin de objeto:. NET Framework para OLE DB incluye un OleDbConnection . objeto, el NET Framework para SQL Server incluye una SqlConnection objeto, los datos de NET Framework. Provider para ODBC incluye un OdbcConnection objeto, y el Proveedor de Marco. NET para Oracle incluye una OracleConnection objeto.

Establecimiento de una conexin


. NET Framework 2.0

Otras versiones

12 de los 30 ha calificado este til - Valorar este tema Para conectarse a Microsoft SQL Server 7.0 o posterior, utilice el SqlConnection objeto de. NET Framework para SQL Server. Para conectarse a un origen de datos OLE DB, o Microsoft SQL Server 6. x o anterior, utilice el OleDbConnection objeto de. NET Framework para OLE DB. Para conectarse a un origen de datos ODBC, utilice el OdbcConnection objeto de. NET Framework para ODBC. Para conectarse a una fuente de datos Oracle, utilice el OracleConnection objeto de. NET Framework para Oracle. Para el almacenamiento seguro y la recuperacin de las cadenas de conexin, vea Proteger cadenas de conexin .

Conexiones de Cierre
Le recomendamos que siempre cerrar la conexin cuando haya terminado de usarlo, de modo que la conexin puede ser devuelto a la piscina. El uso de bloque en Visual Basic o C # elimina automticamente la conexin cuando el cdigo sale del bloque, incluso en el caso de una excepcin no controlada. Ver using (Instruccin, Referencia de C #) y Using (Visual Basic) para obtener ms informacin. Tambin puede utilizar las Close o Dispose mtodos del objeto de conexin para el proveedor que est utilizando. Las conexiones que no se cierra de forma explcita no se podra aadir o devuelta a la piscina. Por ejemplo, una conexin que se ha ido fuera de su alcance, pero que no se ha cerrado explcitamente slo ser devuelto a la agrupacin de conexiones si el tamao mximo del grupo se ha alcanzado y la conexin sigue siendo vlida. Para obtener ms informacin, consulteConexin de Entendimiento agrupamiento .

Nota

No llame a Close o Dispose en una conexin , un DataReader o cualquier otro objeto administrado en Finalizar mtodo de su clase. En un finalizador, slo liberar los recursos no administrados que su clase posea directamente. Si la clase no es propietaria de los recursos no administrados, no incluyen un Finalizarmtodo en la definicin de clase. Para obtener ms informacin, vea Recoleccin de Basura .

Conectarse a SQL Server


El. NET Framework para SQL Server admite un formato de cadena de conexin que es similar a la de OLE DB (ADO) formato de cadena de conexin. Para los nombres vlidos de formato de cadenas y valores, consulte la ConnectionString propiedad del SqlConnection objeto. Tambin puede utilizar elSqlConnectionStringBuilder clase para crear cadenas de conexin sintcticamente vlidas en tiempo de ejecucin. Para obtener ms informacin, vea Crear cadenas de conexin . En el ejemplo de cdigo siguiente se muestra cmo crear y abrir una conexin a un SQL Server 7.0 o base de datos ms tarde. C# VB

"Supone connectionString es una cadena de conexin vlida. Utilizando conexin Como Nuevo SqlConnection (connectionString) Connection.Open () "No trabajo aqu. End Uso

Seguridad integrada y ASP.NET

SQL Server integrado de seguridad (tambin conocido como conexiones de confianza) ayuda a proporcionar proteccin al conectarse a SQL Server, ya que no expone un ID de usuario y la contrasea en la cadena de conexin y es el

mtodo recomendado para autenticar una conexin. La seguridad integrada utiliza la identidad de seguridad actual, o ficha, del proceso de ejecucin. Para aplicaciones de escritorio, esta suele ser la identidad del usuario que ha iniciado sesin actualmente. La identidad de seguridad para las aplicaciones ASP.NET se puede ajustar a una de las varias opciones diferentes. Para entender mejor la identidad de seguridad que una aplicacin ASP.NET utiliza cuando se conecta a SQL Server, vea Suplantacin de ASP.NET , Autenticacin y suplantacin de ASP.NET y Cmo: Obtener acceso a SQL Server mediante la seguridad integrada de Windows .

Conexin a un origen de datos OLE DB


El. NET Framework para OLE DB proporciona conectividad a orgenes de datos expuestos mediante OLE DB y Microsoft SQL Server 6. x o anterior (a travs de SQLOLEDB, el proveedor OLE DB para SQL Server), utilizando el OleDbConnection objeto. . Para el NET Framework para OLE DB, el formato de cadena de conexin es idntico al formato de cadena de conexin utilizada en ADO, con las siguientes excepciones: El proveedor de palabra clave se requiere. La URL , proveedor remoto y remota del servidor palabras clave no son compatibles. Para obtener ms informacin acerca de OLE DB cadenas de conexin, vea la ConnectionString tema. Tambin puede utilizar el OleDbConnectionStringBuildercrear cadenas de conexin en tiempo de ejecucin.

Nota

El OleDbConnection objeto no admite la creacin o recuperacin de propiedades dinmicas especficas de un proveedor OLE DB. Slo las propiedades que se pueden pasar a la cadena de conexin del proveedor OLE DB son compatibles.
En el ejemplo de cdigo siguiente se muestra cmo crear y abrir una conexin a un origen de datos OLE DB. C# VB

"Supone connectionString es una cadena de conexin vlida. Utilizando conexin Como Nuevo OleDbConnection (connectionString) Connection.Open () "No trabajo aqu. End Uso

No utilizar archivos de vnculo de datos universal


Es posible proporcionar informacin de conexin para un OleDbConnection en un vnculo de datos universal (UDL), sin embargo se debe evitar hacerlo. Los archivos UDL no se cifran, y exponer la informacin de cadena de conexin en texto claro. Dado que un archivo UDL es un archivo externo de recursos basada en su aplicacin, no se puede asegurar mediante el Marco. NET.

Conexin a un origen de datos ODBC


El. NET Framework para ODBC proporciona conectividad a orgenes de datos expuestos mediante ODBC utilizando el OdbcConnection objeto. Para el. NET Framework para ODBC, el formato de cadena de conexin est diseado para que coincida con el formato de cadena de conexin ODBC en la mayor medida posible. Tambin se puede suministrar un nombre de origen de datos ODBC (DSN). Para ms detalles sobre la OdbcConnection , vea la clase OdbcConnection .

Nota

El. NET Framework para ODBC no est incluido en el 1.0. NET Framework. Si necesita el. NET Framework para ODBC y est utilizando la 1.0. NET Framework, puede descargar el archivo. NET Framework para ODBC en este sitio web de Microsoft . El espacio de nombres para el archivo. NET Framework para ODBC esMicrosoft.Data.Odbc .
En el ejemplo de cdigo siguiente se muestra cmo crear y abrir una conexin a un origen de datos ODBC. C# VB

"Supone connectionString es una cadena de conexin vlida. Utilizando conexin Como Nuevo OdbcConnection (connectionString) Connection.Open () "No trabajo aqu. End Uso

Conexin a un origen de datos Oracle


El. NET Framework para Oracle proporciona conectividad a fuentes de datos Oracle utilizando el OracleConnection objeto. Para el. NET Framework para Oracle, el formato de cadena de conexin est diseado para que coincida con el proveedor OLE DB para Oracle (MSDAORA) Formato de cadena de conexin en la mayor medida posible. Para ms detalles sobre la OracleConnection , consulte la clase OracleConnection . En el ejemplo de cdigo siguiente se muestra cmo crear y abrir una conexin a un origen de datos de Oracle. C# VB

"Supone connectionString es una cadena de conexin vlida. Utilizando conexin Como Nuevo OracleConnection (connectionString) Connection.Open () "No trabajo aqu. End Uso

Trabajar con eventos de conexin


. NET Framework 2.0
Otras versiones

6 de 6 puntuado este til - Valorar este tema

Todos los proveedores. NET Framework de datos tienen conexin de objetos con dos eventos que puede utilizar para recuperar mensajes de informacin de una fuente de datos o para determinar si el estado de una conexin ha cambiado. La siguiente tabla describe los acontecimientos de la conexin de objeto.

Evento

Descripcin

InfoMessage

Se produce cuando un mensaje informativo que se devuelve desde un origen de datos. Mensajes informativos son mensajes de una fuente de datos que no resultan en una excepcin siendo arrojada. Se produce cuando el estado de la conexin de los cambios.

StateChange

Trabajar con el Evento InfoMessage


Puede recuperar las advertencias y mensajes informativos de un servidor SQL fuente de datos utilizando la InfoMessage caso de SqlConnection objeto. Los errores devueltos por el origen de datos con un nivel de gravedad de 11 a 16 para provocar una excepcin ser lanzada. Sin embargo, la InfoMessage evento puede ser usado para obtener mensajes de la fuente de datos que no estn asociados con un error. En el caso de Microsoft SQL Server, cualquier error con una gravedad de 10 o menos se considera que es un mensaje informativo, y puede ser capturado mediante el uso de la InfoMessage evento. Para obtener ms informacin, consulte la seccin "Niveles de gravedad Mensaje de error" en los Libros en pantalla de SQL Server. El InfoMessage de eventos recibe un SqlInfoMessageEventArgs objeto que contiene, en su Errores propiedad, una coleccin de los mensajes de la fuente de datos.Puede consultar los errores objetos de esta coleccin para el nmero de error y el texto del mensaje, as como el origen del error. El. NET Framework para SQL Server tambin incluye detalles acerca de la base de datos, un procedimiento almacenado y el nmero de lnea que el mensaje vino.

Ejemplo
En el ejemplo de cdigo siguiente se muestra cmo agregar un controlador de eventos para el InfoMessage evento. C# VB

"Se supone que la conexin representa un objeto SqlConnection. AddHandler connection.InfoMessage, _ New SqlInfoMessageEventHandler ( AddressOf OnInfoMessage) Private Shared Sub OnInfoMessage (remitente como objeto , _ args Como SqlInfoMessageEventArgs) Dim errar Como SqlError Para Cada errar En args.Errors Console.WriteLine ("El {0} ha recibido una gravedad {1} _ estado {2} error de nmero {3} \ n "& _ "en la lnea {4} del procedimiento {5} en el servidor {6}: \ n {7}" , _ Err.Source, se equivocan. Class , err.State, Err.Number, err.LineNumber, _ err.Procedure, err.Server, err.Message) Next End Sub

Control de errores como deinformacin


El InfoMessage evento normalmente se disparar slo para los mensajes informativos y de advertencia que se envan desde el servidor. Sin embargo, cuando se produce un error real, la ejecucin de la ExecuteNonQuery o ExecuteReader mtodo que inici la operacin del servidor se detiene y se produce una excepcin.

Si desea continuar procesando el resto de las instrucciones en un orden independientemente de los errores producidos por el servidor, establezca laFireInfoMessageEventOnUserErrors propiedad del SqlConnection a verdadero . Hacer esto hace que la conexin a disparar el InfoMessage de sucesos de errores en lugar de lanzar una excepcin e interrumpir el proceso. La aplicacin cliente puede controlar este evento y responder a las condiciones de error.

Nota

Un error con un nivel de gravedad de 17 o superior que hace que el servidor deje de procesar el comando debe ser manejado como una excepcin. En este caso, se produce una excepcin, independientemente de cmo el error se trata en el InfoMessage evento.

Trabajar con el Evento StateChange


El StateChange evento se produce cuando el estado de una conexin de cambios. El StateChange eventos recibe StateChangeEventArgs que le permiten determinar el cambio de estado de la conexin mediante el OriginalState y CurrentState propiedades. El OriginalState propiedad es un ConnectionStateenumeracin que indica el estado de la conexin antes de que cambiara. CurrentState es un ConnectionState enumeracin que indica el estado de la conexindespus de cambiarlo. En el ejemplo de cdigo siguiente se utiliza la StateChange evento para escribir un mensaje en la consola cuando el estado de la conexin de los cambios. C# VB

"Supone conexin representa un objeto SqlConnection. AddHandler connection.StateChange, _ New StateChangeEventHandler ( AddressOf OnStateChange) Protegido Shared Sub OnStateChange (_ remitente como objeto , args Como StateChangeEventArgs) Console.WriteLine (_ "El estado de conexin actual ha cambiado de {0} a {1}." , _ args.OriginalState, args.CurrentState) End Sub

Entendimiento Agrupacin de conexiones


. NET Framework 2.0
Otras versiones

1 de cada 8 puntuado este til - Valorar este tema

Puesta en comn de las conexiones puede mejorar significativamente el rendimiento y la escalabilidad de la aplicacin. La agrupacin de conexiones es manejado de manera diferente para los proveedores de datos. NET Framework. Para obtener informacin sobre la agrupacin de conexiones de SQL Server, consulte Uso de la agrupacin de conexiones con SQL Server .

Agrupacin de conexiones para el. NET Framework para OLE DB


El. NET Framework para OLE DB automticamente para agrupar conexiones que utilizan la agrupacin de sesiones OLE DB. Argumentos de cadena de conexin se puede utilizar para activar o desactivar los servicios de OLE DB, incluida la puesta en comn. Por ejemplo, la siguiente cadena de conexin OLE DB deshabilita la agrupacin de sesiones y la inscripcin automtica de transacciones.

Provider = SQLOLEDB; OLE DB Services = -4; Data Source = localhost; Integrated Security = SSPI;
Le recomendamos que cierre siempre o disponer de una conexin cuando haya terminado de usarlo, con el fin de devolver la conexin a la piscina. Las conexiones que no estn explcitamente cerradas puede que no se devuelve a la agrupacin. Por ejemplo, una conexin que se ha ido fuera de su alcance, pero que no se ha cerrado explcitamente slo ser devuelto a la agrupacin de conexiones si el tamao mximo del grupo se ha alcanzado y la conexin sigue siendo vlida. Para obtener ms informacin acerca de OLE DB sesin de puesta en comn o la puesta en comn de recursos, as como la forma de deshabilitar la agrupacin por razones imperiosas de OLE DB por defecto del proveedor de servicios, consulte el manual del programador de OLE DB en la biblioteca MSDN.

Agrupacin de conexiones para el. NET Framework para ODBC


Agrupacin de conexiones para el. NET Framework para ODBC est gestionado por el Administrador de controladores ODBC que se utiliza para la conexin, y no es afectado por el. NET Framework para ODBC. Para habilitar o deshabilitar la agrupacin de conexiones, abra Administrador de orgenes de datos ODBC en la carpeta Herramientas administrativas del Panel de control. La agrupacin de conexiones ficha le permite especificar los parmetros de agrupacin de conexiones para cada controlador ODBC instalado. Tenga en cuenta que la agrupacin de conexiones cambios para un controlador ODBC especfico afecta a todas las aplicaciones que utilizan ese controlador ODBC. Para obtener ms informacin sobre las conexiones ODBC, consulte la Referencia del programador de OLE DB en la biblioteca MSDN.

Agrupacin de conexiones para el. NET Framework para Oracle


El. NET Framework para Oracle proporciona la agrupacin de conexiones de forma automtica para la aplicacin cliente ADO.NET. Tambin se puede suministrar varios modificadores de cadena de conexin para controlar el comportamiento de la agrupacin de conexin (vase "Puesta en comn con conexin de control Palabras clave de cadena de conexin" ms adelante en este tema).

Piscina Creacin y asignacin


Cuando se abre una conexin, un grupo de conexin se crea basndose en un algoritmo de coincidencia exacta que asocia la piscina con la cadena de conexin en la conexin. Cada grupo de conexin se asocia con una cadena de conexin diferente. Cuando una nueva conexin se abre, si la cadena de conexin no es una coincidencia exacta con una piscina existente, una nueva agrupacin se crea. Una vez creada, agrupaciones de conexiones no se destruyen hasta que termine el proceso activo. El mantenimiento de piscinas inactivos o vacos utiliza recursos de sistema muy pocos.

Conexin Addition
Un grupo de conexin se crea para cada cadena de conexin nica. Cuando un grupo es creado, varios objetos de conexin se crea y se agrega a la piscina para que el requisito de tamao mnimo piscina est satisfecho. Las conexiones se agregan al grupo segn sea necesario, hasta el tamao mximo del grupo. Cuando un OracleConnection objeto se solicita, se obtiene de la piscina, si una conexin es utilizable disponible. Para ser til, la conexin debe ser actualmente sin uso, tienen un contexto de transaccin coincidente o no estar asociada a un contexto de transaccin, y tienen un enlace vlido al servidor. Si el tamao mximo del grupo se ha alcanzado y no hay conexin utilizable est disponible, la solicitud se pone en cola. El concentrador de conexin satisface estas demandas mediante la reasignacin de las conexiones a medida que se libera de nuevo a la piscina. Las conexiones se libera de nuevo en la piscina cuando estn cerrados o eliminados.

Conexin de eliminacin
El concentrador de conexin elimina una conexin de la agrupacin despus de que ha estado inactivo durante un perodo prolongado de tiempo, o si el concentrador detecte que la conexin con el servidor ha sido cortada. Tenga en cuenta que esto slo se puede detectar despus de intentar comunicarse con el servidor. Si se encuentra una conexin que ya no est conectado al servidor, que es marcado como no vlido. El concentrador de conexin examina peridicamente grupos de conexiones en busca de objetos que se han lanzado a la piscina y se marcan como no vlidos. Estas conexiones son luego eliminado definitivamente. Si existe una conexin a un servidor que ha desaparecido, esta conexin se puede sacar de la piscina, si el concentrador de conexin no se ha detectado la conexin rota y marcada como no vlida. Cuando esto ocurre, se genera una excepcin. Sin embargo, an debe cerrar la conexin con el fin de liberarlo de nuevo en la piscina. No llame a Close o Dispose en una conexin , un DataReader o cualquier otro objeto administrado en Finalizar mtodo de su clase. En un finalizador, slo liberar los recursos no administrados que su clase posea directamente. Si la clase no es propietaria de los recursos no administrados, no incluyen un Finalizar mtodo en la definicin de clase. Para obtener ms informacin, vea Recoleccin de Basura .

Transaction Support
Se establecen relaciones de la piscina y se asignan en funcin del contexto de la transaccin. El contexto de la rosca solicitante y la conexin asignada deben coincidir. Por lo tanto, cada grupo de conexin es en realidad subdivide en conexiones sin contexto de transaccin asociado con ellos, y en N subdivisiones que contienen cada uno conexiones con un contexto de transaccin particular. Cuando se cierra una conexin, se libera de nuevo en la piscina y en la subdivisin adecuada en funcin de su contexto de transaccin. Por lo tanto, se puede cerrar la conexin sin generar un error, a pesar de que una transaccin distribuida se encuentra pendiente. Esto le permite confirmar o anular la transaccin distribuida en un momento posterior.

Puesta en comn con conexin de control Palabras clave de cadena de conexin


El ConnectionString caracterstica de la OracleConnection objeto soporta la cadena de conexin pares clave / valor que se pueden utilizar para ajustar el comportamiento de la lgica de agrupacin de conexiones. En la tabla siguiente se describen los ConnectionString valores que puede utilizar para ajustar el comportamiento de agrupacin de conexiones.

Nombre

Defect o

Descripcin

De por vida

Cuando una conexin se devuelve al grupo, su tiempo de creacin se compara con la hora actual, y la conexin se destruye si ese lapso de tiempo (en segundos) supera el valor especificado por Vida conexin . Esto es til en configuraciones agrupadas para forzar el equilibrio de carga entre un servidor que ejecuta y un servidor slo pone en lnea. Un valor de cero (0) har que las conexiones agrupadas para tener el mximo de tiempo de espera. Cuando cierto , el concentrador inscribe automticamente la conexin en el

Alistarse

'True'

contexto de transaccin actual del subproceso de creacin si existe un contexto de transaccin. Max Pool Size Min Pool Size Pooling 100 El nmero mximo de conexiones permitidas en la piscina.

El nmero mnimo de conexiones mantenidas en la piscina.

'True'

Cuando cierto , la conexin se extrae de la piscina apropiado, o si es necesario, creado y aadido a la piscina apropiado.

Uso de contadores de rendimiento ADO.NET


. NET Framework 2.0
Otras versiones

5 de 696 puntuado este til - Valorar este tema ADO.NET 2.0 introduce soporte ampliado para los contadores de rendimiento que incluye soporte tanto para System.Data.SqlClient y System.Data.OracleClient . LosSystem.Data.SqlClient contadores de rendimiento disponibles en las versiones anteriores de ADO.NET han quedado obsoletos y sustituidos por los nuevos contadores de rendimiento descritos en este tema. Puede utilizar los contadores de rendimiento ADO.NET para controlar el estado de su solicitud y los recursos de conexin que utiliza. Los contadores de rendimiento se puede controlar mediante el Monitor de rendimiento de Windows o se puede acceder mediante programacin con la PerformanceCounter clase en el System.Diagnostics espacio de nombres.

Los contadores de rendimiento disponibles


Actualmente hay 14 contadores de rendimiento disponibles para System.Data.SqlClient y System.Data.OracleClient como se describe en la tabla siguiente. Tenga en cuenta que los nombres de los contadores individuales no estn localizados en las versiones regionales de Microsoft. NET Framework.

Contador de rendimiento

Descripcin

HardConnectsPerSecond

El nmero de conexiones por segundo que se estn haciendo

a un servidor de base de datos. HardDisconnectsPerSecond El nmero de desconexiones por segundo que se estn realizando en un servidor de base de datos. El nmero de grupos nicos de conjunto de conexiones que estn activas. Este contador es controlado por el nmero de cadenas de conexin nicas que se encuentran en el dominio de aplicacin. El nmero total de conjuntos de conexiones. El nmero de conexiones activas que estn actualmente en uso.
Nota

NumberOfActiveConnectionPoolGroups

NumberOfActiveConnectionPools NumberOfActiveConnections

Este contador de rendimiento no est activada de forma predeterminada. Para que este contador de rendimiento, consulte Activacin Desactivado de forma predeterminada, los contadores . NumberOfFreeConnections El nmero de conexiones disponibles para su uso en los conjuntos de conexiones.
Nota

Este contador de rendimiento no est activada de forma predeterminada. Para que este contador de rendimiento, consulte Activacin Desactivado de forma predeterminada, los contadores . NumberOfInactiveConnectionPoolGroups El nico nmero de grupos de conexin de la piscina que estn marcados para la poda. Este contador es controlado por el nmero de cadenas de conexin nicas que se encuentran en el dominio de aplicacin. El nmero de grupos de conexiones inactivas que no han tenido ninguna actividad reciente y estn a la espera de ser eliminados. El nmero de conexiones activas que no estn agrupados. El nmero de conexiones activas que estn siendo administrados por la infraestructura de la agrupacin de conexiones.

NumberOfInactiveConnectionPools

NumberOfNonPooledConnections NumberOfPooledConnections

NumberOfReclaimedConnections

El nmero de conexiones que se han ganado a travs de la recoleccin de basura en Cerrar o botar no fue llamado por la aplicacin. No explcitamente cerrar o eliminar conexiones perjudica el rendimiento. El nmero de conexiones actualmente en espera de la finalizacin de una accin y que, por tanto, no est disponible para su uso por la aplicacin. El nmero de conexiones activas que son sacados de la agrupacin de conexiones.
Nota

NumberOfStasisConnections

SoftConnectsPerSecond

Este contador de rendimiento no est activada de forma predeterminada. Para que este contador de rendimiento, consulte Activacin Desactivado de forma predeterminada, los contadores . SoftDisconnectsPerSecond El nmero de conexiones activas que estn siendo devueltos a la agrupacin de conexiones.
Nota

Este contador de rendimiento no est activada de forma predeterminada. Para que este contador de rendimiento, consulte Activacin Desactivado de forma predeterminada, los contadores .

Grupos grupo de conexiones y agrupaciones de conexiones


Cuando se utiliza la autenticacin de Windows (seguridad integrada), debe supervisar tanto las NumberOfActiveConnectionPoolGroups yNumberOfActiveConnectionPools contadores de rendimiento. La razn es que los grupos de conjunto de conexiones para asignar cadenas de conexin nicas.Cuando se utiliza seguridad integrada, agrupaciones de conexiones se asignan a las cadenas de conexin y, adems, crear grupos separados para las distintas identidades de Windows. Por ejemplo, si Fred y Julia, cada uno en el mismo dominio de aplicacin, tanto el uso de la cadena de conexin "Data Source = MySqlServer; Integrated Security = true" , un grupo conjunto de conexiones se ha creado para la cadena de conexin, y dos piscinas adicionales se crean, una para Fred y otro para Julie. Si Juan y Martha utilizar una cadena de conexin con SQL Server login idntico, "Data Source = MySqlServer, User ID = lowPrivUser; Strong Password = Password?" , entonces slo una sola agrupacin se crea para el lowPrivUser identidad.

Activacin Desactivado de forma predeterminada Contadores


Los contadores de rendimiento NumberOfFreeConnections , NumberOfActiveConnections , SoftDisconnectsPerSecond y SoftCo nnectsPerSecond estn desactivados por defecto. Agregue la informacin siguiente al archivo de configuracin de la aplicacin que les permitan:

<system.diagnostics> <switches> <Add name = "ConnectionPoolPerformanceCounterDetail" value = "4" /> </ Switches>

</ System.diagnostics>

Recuperar valores de contadores de rendimiento


La aplicacin de consola siguiente muestra cmo recuperar los valores de los contadores de rendimiento de la aplicacin. Las conexiones deben ser abiertos y activos de informacin que se devuelve para todos los contadores de rendimiento de ADO.NET.

Nota

En este ejemplo se utiliza el ejemplo AdventureWorks incluida en la base de datos SQL Server 2005. Las cadenas de conexin previstos en el cdigo de ejemplo asumen que la base de datos est instalado y disponible en el equipo local con el nombre de instancia SQLEXPRESS y que ha creado inicios de sesin de SQL Server que coinciden con los proporcionados en las cadenas de conexin. Es posible que necesite habilitar los inicios de sesin de SQL Server si el servidor est configurado con la configuracin de seguridad predeterminada que permite la autenticacin slo Windows. Modificar las cadenas de conexin segn sea necesario para adaptarse a su medio ambiente.

Ejemplo
C# VB

Opcin Explcita En Opcin estricta en Importaciones System.Data.SqlClient Imports System.Diagnostics Imports System.Runtime.InteropServices Class Program Privadas PerfCounters (9) Como PerformanceCounter privado conexin Como SqlConnection = New SqlConnection Public Shared Sub Main () Dim prog Como = Programa Nuevo Programa 'Abrir una conexin y crear los contadores de rendimiento. prog.connection.ConnectionString = _ GetIntegratedSecurityConnectionString () prog.SetUpPerformanceCounters () Console.WriteLine ( "Contadores de rendimiento disponibles:" ) 'Crear las conexiones y mostrar los resultados. prog.CreateConnections () Console.WriteLine ( "Presione Enter para terminar." ) Console.ReadLine () End Sub Private Sub CreateConnections () 'lista de los contadores de rendimiento. WritePerformanceCounters () 'Crear 4 conexiones y visualizar informacin del contador. Dim conexin1 Como SqlConnection = New SqlConnection (_ GetIntegratedSecurityConnectionString)

connection1.Open () Console.WriteLine ( "Abierta la primera conexin:" ) WritePerformanceCounters () Dim Conexin2 Como SqlConnection = New SqlConnection (_ ) GetSqlConnectionStringDifferent connection2.Open () Console.WriteLine ( "Abierto de la conexin 2:" ) WritePerformanceCounters () Console.WriteLine ( "Abierto de la conexin 3 :" ) Dim connection3 Como SqlConnection = New SqlConnection (_ GetSqlConnectionString) connection3.Open () WritePerformanceCounters () Dim connection4 Como SqlConnection = New SqlConnection (_ GetSqlConnectionString) connection4.Open () Console.WriteLine ( "Abierto de la conexin de 4 :" ) WritePerformanceCounters () connection1.Close () Console.WriteLine ( "cerrado la conexin primero:" ) WritePerformanceCounters () connection2.Close () Console.WriteLine ( "cerrado la conexin 2:" ) WritePerformanceCounters () connection3.Close () Console.WriteLine ( "cerrado la conexin tercero:" ) WritePerformanceCounters () connection4.Close () Console.WriteLine ( "cuarto cerrado la conexin:" ) WritePerformanceCounters () End Sub Private Enum ADO_Net_Performance_Counters NumberOfActiveConnectionPools NumberOfReclaimedConnections HardConnectsPerSecond HardDisconnectsPerSecond NumberOfActiveConnectionPoolGroups NumberOfInactiveConnectionPoolGroups NumberOfInactiveConnectionPools NumberOfNonPooledConnections NumberOfPooledConnections NumberOfStasisConnections 'Los siguientes contadores de rendimiento son ms caros de la pista. " Habilitar ConnectionPoolPerformanceCounterDetail en su archivo de configuracin. " SoftConnectsPerSecond 'SoftDisconnectsPerSecond NumberOfActiveConnections ' NumberOfFreeConnections ' End Enum Private Sub SetUpPerformanceCounters () Connection.close ()

Me PerfCounters. (9) = New PerformanceCounter () Dim instanceName Como cadena GetInstanceName = () Dim apc Como Tipo = GetType (ADO_Net_Performance_Counters) Dim i como Integer = 0 Dim s como cadena = "" Para cada s en [ Enum ]. GetNames (APC) Me . PerfCounters (i) = New PerformanceCounter () Me . PerfCounters (i). CategoryName = ". NET para SqlServer" Me PerfCounters. (i). counterName s = Me . PerfCounters (i). InstanceName = instanceName i = (i + 1) Next End Sub Private Declare Funcin GetCurrentProcessId Lib "kernel32.dll" () Como Integer Privado Funcin GetInstanceName () Como Cuerda 'Esto funciona para aplicaciones WinForms. Dim instanceName Como cadena = _ System.Reflection. Asamblea . GetEntryAssembly.GetName.Name 'Debe reemplazar caracteres especiales como (,), #, /, \ \ Dim instanceName2 Como cadena = _ AppDomain.CurrentDomain.FriendlyName.ToString.Replace ( "(" , "[" ) _ . Replace ( ")" , "]" ). Cambiar ( "#" , "_" ). Cambiar ( "/" , "_" ). Cambiar ( "\ \" , "_" ) "Para las aplicaciones ASP.NET tu instanceName ser su CurrentDomain de 'FriendlyName. Cambie la lnea anterior que establece el instanceName con esto: "instanceName = AppDomain.CurrentDomain.FriendlyName.ToString.Replace (" ("," [") _ . '. Reemplazar (")", "]") Sustituir ("# "," _ "). Sustituir (" / "," _ "). Sustituir (" \ \ "," _ ") Dim pid Como cadena = GetCurrentProcessId.ToString instanceName = (instanceName + ( "[" y (pid y "]" ))) Console.WriteLine ( "Nombre de instancia: {0}" , instanceName) Console.WriteLine ( "---------------------------" ) Return instanceName End Funcin Private Sub WritePerformanceCounters () Console.WriteLine ( "---------------------------" ) Para cada p Como PerformanceCounter en m . PerfCounters Console.WriteLine ( "{0} = {1}" , p.CounterName, p.NextValue) Siguiente Console.WriteLine ( "---------------------- ----- " ) End Sub Privado Compartido Funcin GetIntegratedSecurityConnectionString () Como Cuerda 'Para evitar almacenar la cadena de conexin en el cdigo, "usted puede retrive de un archivo de configuracin. Retorno ( "Data Source = \ SQLEXPRESS;. Integrated Security = True;" y "Initial Catalog = AdventureWorks " ) End Funcin Privado Compartido Funcin GetSqlConnectionString () Como Cuerda 'Para evitar almacenar la cadena de conexin en el cdigo, "usted puede retrive de un archivo de configuracin. Retorno ( "Data Source = \ SQLEXPRESS;. User Id = LowPriv; = Contrasea de datos 05!; " y "Initial Catalog = AdventureWorks" ) End Funcin

Privado Compartido Funcin GetSqlConnectionStringDifferent () Como Cuerda 'Para evitar almacenar la cadena de conexin en el cdigo, "usted puede retrive de un archivo de configuracin. Retorno ( "Initial Catalog = AdventureWorks;. Data Source = \ SQLEXPRESS," & _ "Id Usuario = LowPriv; Contrasea = Datos 05; " ) End Funcin End Class

Trabajo con cadenas de conexin


. NET Framework 2.0
Otras versiones 2 de cada 10 ha calificado este til - Valorar este tema El 2,0. NET Framework proporciona nuevas capacidades para trabajar con cadenas de conexin, incluida la introduccin de nuevas palabras clave a las clases constructor de cadena de conexin, lo que facilita la creacin de cadenas de conexin vlidas en tiempo de ejecucin. Una cadena de conexin contiene informacin de inicializacin que se pasa como un parmetro de un proveedor de datos a un origen de datos. La sintaxis depende del proveedor de datos y la cadena de conexin se analiza durante el intento de abrir una conexin. Los errores de sintaxis generar una excepcin de tiempo de ejecucin, pero otros errores se producen slo despus de que la fuente de datos recibe informacin de conexin. Una vez validada, la fuente de datos se aplica las opciones especificadas en la cadena de conexin y abre la conexin. El formato de una cadena de conexin es una lista delimitada por punto y coma de pares de parmetros clave / valor:

keyword1 = valor; Palabra clave2 = valor;


Las palabras clave no distinguen entre maysculas y minsculas, y espacios entre los pares de clave / valor se ignoran. Sin embargo, los valores pueden ser sensible a maysculas, dependiendo de la fuente de datos. Los valores que contienen un punto y coma, comillas simples o comillas dobles deben ir entre comillas dobles. La sintaxis de cadena de conexin depende del proveedor, y ha evolucionado con los aos a partir de principios de API como ODBC. El. NET Framework para SQL Server incorpora muchos elementos de sintaxis antigua y es generalmente ms flexible con la sintaxis de cadena de conexin comn. Hay con frecuencia sinnimos igualmente vlidos para los elementos de sintaxis de cadena de conexin, pero algunos errores de sintaxis y ortografa pueden causar problemas. Por ejemplo, "Integrated Security = true "es vlido, mientras que" IntegratedSecurity = true "genera un error. Adems, las cadenas de conexin construido en tiempo de ejecucin a partir de la entrada del usuario no validada puede conducir a ataques de inyeccin de cuerda, poniendo en peligro la seguridad en el origen de datos. Para hacer frente a estos problemas, ADO.NET 2.0 presenta nuevos generadores de cadenas de conexin para cada proveedor de Marco. NET de datos. Las palabras clave se exponen como propiedades, lo que permite la sintaxis de cadena de conexin que deber ser validada antes de su presentacin a la fuente de datos.Tambin hay clases nuevas que simplifican el almacenamiento y la recuperacin de las cadenas de conexin en archivos de configuracin y cifrado utilizando una configuracin protegida. Para obtener ms informacin, consulte Creacin Cadenas de conexin y Proteger cadenas de conexin .

Construyendo cadenas de conexin


. NET Framework 2.0
Otras versiones

11 de los 14 ha calificado este til - Valorar este tema En las versiones anteriores de ADO.NET, en tiempo de compilacin comprobacin de cadenas de conexin con los valores concatenados de cadena no se produjo, por lo que en tiempo de ejecucin, una palabra clave incorrecta generara una ArgumentException . Cada uno de los proveedores. NET Framework de datos soporta una sintaxis diferente para las palabras clave de cadena de conexin, por lo que la construccin de cadenas de conexin vlidas difcil si se hace manualmente. Para solucionar este problema, ADO.NET 2.0 presenta nuevos generadores de cadenas de conexin para cada proveedor de Marco. NET de datos. Cada proveedor de datos proporciona una cadena de conexin con establecimiento inflexible constructor de clase que hereda de DbConnectionStringBuilder . En la tabla siguiente se muestran los datos. NET Framework y sus clases asociadas a la cadena de conexin del constructor.

Proveedor

ConnectionStringBuilder clase

System.Data.SqlClient System.Data.OleDb System.Data.Odbc System.Data.OracleClient

SqlConnectionStringBuilder OleDbConnectionStringBuilder OdbcConnectionStringBuilder OracleConnectionStringBuilder

Evitar los ataques de inyeccin de cadena de conexin


Una cadena de conexin ataque de inyeccin puede ocurrir cuando la concatenacin de cadenas dinmico se utiliza para crear cadenas de conexin de base de datos del usuario. Si la cadena no se valida y texto malicioso o caracteres que no se escap, los atacantes pueden tener acceso a datos confidenciales u otros recursos en el servidor. Por ejemplo, un atacante podra montar un ataque mediante el suministro de un punto y coma y anexando un valor adicional. La cadena de conexin se analiza utilizando un "ltimo gana" algoritmo, por lo que la entrada hostil sera sustituido por un valor legtimo. Las clases de cadena de conexin del constructor estn diseados para eliminar las conjeturas y proteger contra errores de sintaxis y las vulnerabilidades de seguridad. Se proporcionan mtodos y propiedades correspondientes a los conocidos pares clave / valor permitido por cada proveedor de datos. Cada clase mantiene una coleccin fija de sinnimos y puede convertir un sinnimo del correspondiente bien conocido nombre de clave. Los controles se realizan para vlidos pares clave / valor y un par invlido se produce una excepcin. Adems, los valores inyectados se manejan de una manera segura.

El siguiente ejemplo muestra cmo el SqlConnectionStringBuilder controla un valor extra para insertar el catlogo inicial de ajuste. C# VB

Dim constructor Como Nuevo System.Data.SqlClient.SqlConnectionStringBuilder constructor ( "Data Source" ) = "(local)" constructor ( "Integrated Security" ) = verdadero constructor ( "Initial Catalog" ) = "AdventureWorks; NewValue = Bad" Console.WriteLine (builder.ConnectionString)
El resultado muestra que el SqlConnectionStringBuilder manejado correctamente esta escapando del valor aadido entre comillas dobles en lugar de agregarla a la cadena de conexin como un nuevo par clave / valor.

Data Source = (local); Integrated Security = True; initial catalog = "AdventureWorks; NewValue = Bad"

La construccin de cadenas de conexin en los archivos de configuracin


Si ciertos elementos de una cadena de conexin son conocidos de antemano, pueden ser almacenados en un archivo de configuracin y se recuperan en tiempo de ejecucin para la construccin de una cadena de conexin completa. Por ejemplo, el nombre de la base de datos puede ser conocido de antemano, pero no el nombre del servidor. O usted puede ser que desee un usuario que proporcione un nombre y una contrasea en tiempo de ejecucin sin que se pueda inyectar otros valores en la cadena de conexin. Uno de los constructores sobrecargados para un generador de cadenas de conexin toma una cadena como argumento, lo que le permite proporcionar una cadena de conexin parcial que puede ser completado a partir de la entrada del usuario. La cadena de conexin parcial se puede almacenar en un archivo de configuracin y se recuperan en tiempo de ejecucin.

Nota

El System.Configuration espacio de nombres permite el acceso mediante programacin a los archivos de configuracin utilizando el WebConfigurationManagerpara aplicaciones Web y la WebConfigurationManager para aplicaciones Windows. Para obtener ms informacin sobre cmo trabajar con cadenas de conexin y archivos de configuracin, consulte Almacenamiento y recuperacin de las cadenas de conexin .

Ejemplo
En este ejemplo se muestra cmo se recupera una cadena de conexin parcial de un archivo de configuracin y completarla mediante el establecimiento de laDataSource , UserID y Password propiedades del SqlConnectionStringBuilder . El archivo de configuracin se define como sigue.

<connectionStrings> <clear/> <Nombre add = "partialConnectString" connectionString = "Initial Catalog = Neptuno"; providerName = "System.Data.SqlClient" /> </ ConnectionStrings>

Nota

Usted debe establecer una referencia a la System.Configuration.dll en su proyecto para que el cdigo se

ejecute.
C# VB

Private Sub buildConnectionString ( ByVal dataSource Como cadena , _ ByVal userName como cuerdas , ByVal userPassword Como cadena ) 'Recuperar la cadena de conexin parcial denominada DatabaseConnection 'desde el archivo app.config o web.config de la aplicacin. Dim configuracin Como ConnectionStringSettings = _ ConfigurationManager.ConnectionStrings ( "partialConnectString" ) Si No configuraciones Es Nada Entonces 'Recuperar la cadena de conexin parcial. Dim myConnectionString Como cadena = settings.ConnectionString Console.WriteLine ( "Original: {0}" , myConnectionString) 'Crear un nuevo SqlConnectionStringBuilder basado en la 'cadena de conexin parcial recupera del archivo de configuracin. Dim constructor Como nuevo SqlConnectionStringBuilder (myConnectionString) "Proporcionar a los valores adicionales. builder.DataSource dataSource = builder.UserID = Nombre de usuario builder.Password = userPassword Console.WriteLine ( "Modificado: {0}" , builder.ConnectionString) Fin Si Fin Sub

Almacenamiento y recuperacin de las cadenas de conexin


. NET Framework 2.0
Otras versiones

15 de los 37 ha calificado este til - Valorar este tema

Incorporacin de las cadenas de conexin en el cdigo de la aplicacin puede dar lugar a problemas de seguridad y problemas de mantenimiento. Cadenas de conexin sin cifrar compiladas a cdigo fuente de una aplicacin se puede ver con el desensamblador de MSIL (Ildasm.exe) herramienta. Por otra parte, si la cadena de conexin cambie alguna vez, la aplicacin debe volver a compilar. Por estas razones, se recomienda almacenar cadenas de conexin en un archivo de configuracin de la aplicacin.

Trabajar con archivos de configuracin de la aplicacin


Archivos de configuracin de la aplicacin contienen valores que son especficos para una aplicacin particular. Por ejemplo, una aplicacin ASP.NET puede tener uno o ms web.config archivos, y una aplicacin de Windows puede tener un opcional app.config archivo. Los archivos de configuracin comparten elementos comunes, a pesar de que el nombre y la ubicacin de un archivo de configuracin varan en funcin del host de la aplicacin.

La seccin connectionStrings
Las cadenas de conexin pueden ser almacenados como pares clave / valor en la connectionStrings seccin de la configuracin del elemento de un archivo de configuracin de la aplicacin. Los elementos secundarios incluyen agregar , claro , y eliminar . El fragmento de archivo de configuracin se muestra el esquema y la sintaxis para almacenar una cadena de conexin. El nombre del atributo es un nombre que usted proporciona para identificar de forma nica una cadena de conexin para que pueda ser recuperada en tiempo de ejecucin. El providerName es el nombre de la invariante. NET Framework, que est registrado en el archivo machine.config.

<? Xml version = '1 .0 'encoding = "UTF-8"> <configuration> <connectionStrings> <clear /> <Nombre add = "Nombre" providerName = "System.Data.ProviderName" connectionString = "cadena de conexin vlida;" /> </ ConnectionStrings> </ Configuration>

Nota

Usted puede guardar parte de una cadena de conexin en un archivo de configuracin y el uso de la DbConnectionStringBuilder clase para terminarlo en tiempo de ejecucin. Esto es til en situaciones en las que usted no conoce los elementos de la cadena de conexin antes de tiempo, o si no desea guardar informacin confidencial en un archivo de configuracin. Para obtener ms informacin, vea Crear cadenas de conexin .

Uso de los archivos de configuracin externos


Los archivos externos de configuracin son archivos independientes que contienen un fragmento de un archivo de configuracin que consta de una sola seccin. El archivo de configuracin externo despus se hace referencia en el archivo de configuracin principal. Almacenamiento de la connectionStrings seccin en un archivo separado fsicamente es til en situaciones en las cadenas de conexin se pueden editar despus de la aplicacin se implementa. Por ejemplo, el comportamiento estndar de ASP.NET es reiniciar un dominio de aplicacin cuando los archivos de configuracin son modificados, lo que resulta en la informacin de estado que se pierdan. Sin embargo, la modificacin de un archivo de configuracin externo no provoca un reinicio de la aplicacin. Los archivos externos de configuracin no se limitan a ASP.NET, sino que tambin puede ser utilizado por las aplicaciones de Windows. Adems, la seguridad de acceso a archivos y permisos se pueden utilizar para restringir el acceso a los archivos de configuracin externos. Trabajar con archivos de configuracin externos en tiempo de ejecucin es transparente y no requiere codificacin especial.

Para almacenar cadenas de conexin en un archivo de configuracin externo, cree un archivo independiente que contiene slo la connectionStrings seccin. No incluya ningn elemento adicional, secciones, o atributos. En este ejemplo se muestra la sintaxis de un archivo de configuracin externo.

<connectionStrings> <Nombre add = "Nombre" providerName = "System.Data.ProviderName" connectionString = "cadena de conexin vlida;" /> </ ConnectionStrings>
En el archivo de configuracin de la aplicacin principal, se utiliza el configSource atributo para especificar el nombre completo y la ubicacin del archivo externo.Este ejemplo se refiere a un archivo de configuracin externo denominado connections.config .

<? Xml version = '1 .0 'encoding = "UTF-8"> <configuration> <connectionStrings configSource="connections.config"/> </ Configuration>

Recuperacin de las cadenas de conexin en tiempo de ejecucin


Nuevas clases en el. NET Framework 2.0 System.Configuration espacio de nombres simplificar la recuperacin de las cadenas de conexin de los archivos de configuracin en tiempo de ejecucin. Programacin, se puede recuperar una cadena de conexin por el nombre o por nombre del proveedor.

Nota

El machine.config archivo tambin contiene una connectionStrings seccin, que contiene las cadenas de conexin que utiliza Visual Studio. Al recuperar cadenas de conexin por el nombre del proveedor del app.config archivo en una aplicacin de Windows, las cadenas de conexin en machine.config se cargan primero, y luego las entradas de app.config . Adicin claro inmediatamente despus de la connectionStrings elemento elimina todas las referencias heredados de la estructura de datos en la memoria, de modo que slo las cadenas de conexin definidas en el local de app.config archivo se consideran.

Trabajar con las clases Configuration


ConfigurationManager se utiliza en el Framework 2.0. NET cuando se trabaja con archivos de configuracin en el equipo local, en sustitucin de las obsoletasConfigurationSettings . WebConfigurationManager se utiliza para trabajar con archivos de configuracin de ASP.NET. Est diseado para trabajar con archivos de configuracin en el servidor Web, y permite el acceso mediante programacin a las secciones del archivo de configuracin, tales como system.web .

Nota

Acceso a los archivos de configuracin en tiempo de ejecucin requiere la concesin de permisos a la persona que llama, los permisos requeridos dependen del tipo de aplicacin, el archivo de configuracin y ubicacin. Para obtener ms informacin, vea Utilizar las clases Configuration y WebConfigurationManagerpara las aplicaciones ASP.NET, y ConfigurationManager para las aplicaciones de Windows.
Usted puede utilizar el ConnectionStringSettingsCollection para recuperar cadenas de conexin de los archivos de configuracin de la aplicacin. Contiene una coleccin de ConnectionStringSettings objetos, cada uno de los cuales representa una sola entrada en la connectionStrings seccin. Sus propiedades se asignan a los atributos de cadena de conexin, lo que le permite recuperar una cadena de conexin especifica el nombre o el nombre del proveedor.

Propiedad

Descripcin

Nombre ProviderName ConnectionString

El nombre de la cadena de conexin. Se asigna al nombre de atributo. El proveedor completo nombre. Se asigna al providerName atributo. La cadena de conexin. Se asigna al connectionString atributo.

Ejemplo: Listado de todas las cadenas de conexin


Este ejemplo recorre en iteracin la ConnectionStringSettings coleccin y muestra el nombre , ProviderName y ConnectionString propiedades en la ventana de la consola.

Nota

System.Configuration.dll no se incluye en todos los tipos de proyectos, y puede ser necesario para establecer una referencia a ella con el fin de utilizar las clases de configuracin. El nombre y la ubicacin de un archivo de configuracin de aplicacin especial vara segn el tipo de aplicacin y el proceso de alojamiento.
C# VB

Las importaciones System.Configuration Clase programa Shared Sub Main () GetConnectionStrings () Console.ReadLine () End Sub Private Shared Sub GetConnectionStrings () Dim configuracin Como ConnectionStringSettingsCollection = _ ConfigurationManager.ConnectionStrings Si No configuraciones Es Nada Entonces para cada cs Como ConnectionStringSettings En la configuracin Console.WriteLine (cs.Name) Console.WriteLine (cs.ProviderName) Console.WriteLine (cs.ConnectionString) Siguiente Fin Si Fin Sub End Class

Ejemplo: recuperar una cadena de conexin por Nombre


En este ejemplo se muestra cmo recuperar una cadena de conexin de un archivo de configuracin especificando su nombre. El cdigo crea unConnectionStringSettings objeto, haciendo coincidir el parmetro de entrada suministrada a la ConnectionStrings nombre. Si no hay ningn nombre coincidente, la funcin devuelve nulo ( Nada en Visual Basic). C# VB

"Recupera una cadena de conexin por su nombre.

" Devuelve Nothing si el nombre no se encuentra. Privado Compartido Funcin GetConnectionStringByName (_ ByVal nombre como cadena ) como cadena "Asumir el fracaso Dim returnValue Como cadena = Nada 'Busque el nombre de la seccin connectionStrings. Dim configuracin Como ConnectionStringSettings = _ ConfigurationManager.ConnectionStrings (nombre) "Si lo encuentra, devuelve la cadena de conexin. Si No configuraciones Es Nada Entonces returnValue = settings.ConnectionString Fin Si Volver returnValue End Funcin

Ejemplo: recuperar una cadena de conexin por Nombre del proveedor


En este ejemplo se muestra cmo recuperar una cadena de conexin especificando el nombre del proveedor e invariante en el formato System.Data.ProviderName .El cdigo recorre en iteracin la ConnectionStringSettingsCollection y devuelve la cadena de conexin para la primera ProviderName encontrado. Si el nombre del proveedor no se encuentra, la funcin devuelve nulo ( Nada en Visual Basic). C# VB

'Recuperar una cadena de conexin especificando el providerName. ' Supone una cadena de conexin al proveedor en el archivo de configuracin. Private Shared Funcin GetConnectionStringByProvider (_ ByVal providerName Como cadena ) como cadena Volver Nada en caso de fallo. Dim returnValue Como cadena = Nada 'Obtener la coleccin de cadenas de conexin. Dim configuracin Como ConnectionStringSettingsCollection = _ ConfigurationManager.ConnectionStrings "Caminar a travs de la coleccin y devolver la primera 'cadena de conexin que coincida con el = ProviderName Entonces returnValue = cs.ConnectionString Salir Por Fin Si Siguiente Fin Si Volver returnValue End Funcin

Configuracin especfica del proveedor cadenas de conexin


. NET Framework 2.0
Otras versiones

2 de 5 puntuado este til - Valorar este tema Cada. Proveedor de datos tiene una conexin de objeto que hereda de DbConnection as como un proveedor especfico de ConnectionString propiedad. La sintaxis de cadena de conexin especfico para cada proveedor se documenta en su ConnectionString propiedad. En la tabla siguiente se muestran los cuatro proveedores de datos que se incluyen en el Marco. NET.

. NET Framework proveedor

Descripcin

System.Data.SqlClient

Proporciona acceso a datos de Microsoft SQL Server versin 7.0 o posterior. Para obtener ms informacin sobre la sintaxis de cadena de conexin, vea ConnectionString . Proporciona acceso a datos para orgenes de datos expuestos mediante OLE DB. Para obtener ms informacin sobre la sintaxis de cadena de conexin, vea ConnectionString . Proporciona acceso a datos para orgenes de datos expuestos mediante ODBC. Para obtener ms informacin sobre la sintaxis de cadena de conexin, vea ConnectionString . Proporciona acceso a los datos de la versin Oracle 8.1.7 o posterior. Para obtener ms informacin sobre la sintaxis de cadena de conexin, vea ConnectionString .

System.Data.OleDb

System.Data.Odbc

System.Data.OracleClient

ADO.NET 2.0 presenta los nuevos generadores de cadenas de conexin para cada proveedor de Marco. NET de datos, lo que elimina las conjeturas al crear cadenas de conexin sintcticamente vlidos. Para obtener ms informacin, vea Crear cadenas de conexin .

Especificacin de la autenticacin de Windows

Le recomendamos que utilice la autenticacin de Windows (a veces referido como seguridad integrada ) para conectarse a orgenes de datos que lo apoyan. La sintaxis empleada en la cadena de conexin vara segn el proveedor. En la tabla siguiente se muestra la sintaxis de la autenticacin de Windows se usa con los proveedores de datos. NET Framework.

Proveedor

Sintaxis
Integrated Security = true; - O Integrated Security = SSPI; Integrated Security = SSPI; Trusted_Connection = yes; Integrated Security = yes;

SqlClient

OleDb Odbc OracleClient


Nota

Integrated Security = true inicia una excepcin cuando se utiliza con el proveedor de datos de proveedores.

Trabajo con cadenas de conexin SqlClient


El ConnectionString propiedad de un objeto SqlConnection le permite obtener o establecer una cadena de conexin para un SQL Server 7.0 o base de datos ms tarde. Si necesita conectarse a una versin anterior de SQL Server, debe utilizar el proveedor. NET para OleDb. La mayora de las palabras clave de cadena de conexin tambin se asignan a las propiedades en el SqlConnectionStringBuilder . Cada una de las siguientes formas de sintaxis se utiliza la autenticacin de Windows para conectarse a la AdventureWorks base de datos en un servidor local.

"Persist Security Info = False; Integrated Security = true; Initial Catalog = AdventureWorks; servidor = MSSQL1 " "Persist Security Info = False; Integrated Security = SSPI; database = AdventureWorks; server = (local) " "Persist Security Info = False; Trusted_Connection = True; database = AdventureWorks; server = (local) "

Con los inicios de sesin de SQL Server

Autenticacin de Windows es el preferido para conectarse a SQL Server. Sin embargo, si la autenticacin de SQL Server es necesario, utilice la siguiente sintaxis para especificar un nombre de usuario y contrasea. En este ejemplo, los asteriscos se utilizan para representar un nombre de usuario vlido y la contrasea.

"Persist Security Info = False; ID de usuario = *****, ***** = contrasea; Initial Catalog = AdventureWorks; servidor = MySqlServer"

Nota de seguridad

La configuracin predeterminada para el Persist Security Info palabra clave es falso . Si lo establece a verdadero o si permite que la informacin confidencial de seguridad, incluido el ID de usuario y una contrasea, que se obtiene de la conexin despus de la conexin se ha abierto. Mantenga Persist Security Infoestablece en false para garantizar que una fuente no confiable no tiene acceso a informacin delicada

cadena de conexin.
Para conectarse a una instancia con nombre de SQL Server 2000 o posterior, utilice el nombre del servidor \ nombre de instancia de sintaxis.

Data Source = MySqlServer \ MSSQL1 ";


Tambin puede configurar el origen de datos propiedad de la SqlConnectionStringBuilder para el nombre de la instancia en la construccin de una cadena de conexin. El origen de datos propiedad de un objeto SqlConnection objeto es de slo lectura.

Configuracin de la Red de Bibliotecas


La biblioteca de red se puede utilizar para establecer una conexin con una instancia de SQL Server. En este ejemplo, la biblioteca de red es Win32 Winsock TCP / IP (dbmssocn), y 1433 es el puerto que est utilizando.

Network Library = dbmssocn; Data Source = 000.000.000.000,1433;


SQL Server le permite utilizar las siguientes bibliotecas de red al establecer una conexin.

Nombre

Biblioteca

dbnmpntw dbmssocn dbmsspxn dbmsvinn dbmsrpcn

Win32 Named Pipes Win32 Winsock TCP / IP Win32 SPX / IPX Win32 Banyan Vines Win32 multiprotocolo (Windows RPC)

Especificacin de una versin de SQL Server utilizando las palabras clave Type System Version
Las Type System Version palabras clave se utiliza para especificar una versin anterior de SQL Server para aplicaciones que se ejecutan en una instancia de SQL Server 2005. Esto evita posibles problemas con tipos incompatibles que pueden causar la aplicacin de romper. Por ejemplo, utilice el siguiente fragmento de cadena de conexin cuando se conecta a una instancia de SQL Server 2005 si desea que la aplicacin para funcionar slo con el tipo de sistema de SQL Server 2000.

"Version = Tipo de sistema de SQL Server 2000";


La versin del sistema de tipos tambin se puede especificar mediante la TypeSystemVersion propiedad de un SqlConnectionStringBuilder . Los valores posibles se describen en la tabla siguiente.

Valor

Descripcin

ltimo

El valor por defecto. Utiliza la ltima versin que este par cliente-servidor puede manejar. La versin utilizada automticamente se mover hacia adelante como los componentes de cliente y servidor se actualizan. Utiliza el SQL Server 2005 sistema de tipos. No se realizan conversiones para la versin actual de ADO.NET.

SQL Server 2005 SQL Server

Utiliza el sistema SQL Server 2000 escribe. Las siguientes comparaciones se llevar a cabo cuando se conecta a una instancia de SQL Server 2005:

2000

XML para NTEXT UDT a VARBINARY VARCHAR (MAX), nvarchar (max) y varbinary (MAX) al texto, NEXT, y la imagen, respectivamente.

La asociacin a instancias de usuario de SQL Server Express


Las instancias de usuario son una nueva caracterstica disponible en SQL Server 2005 Express Edition slo. Permiten que un usuario que se ejecuta en una cuenta con privilegios mnimos local de Windows para conectar y ejecutar una base de datos SQL Server sin necesidad de privilegios administrativos. A instancia de usuario se ejecuta con las credenciales del usuario de Windows, no como un servicio. Las instancias de usuario tambin son apoyados por el SqlConnectionStringBuilder UserInstance y AttachDBFilename propiedades. Para obtener ms informacin sobre cmo trabajar con instancias de usuario, vea Trabajar con instancias de usuario . El AttachDbFileName palabra clave de cadena de conexin se utiliza para adjuntar el archivo de base de datos principal (. mdf), que debe incluir el nombre de ruta completo. AttachDbFileName tambin corresponde a las "Propiedades extendidas" y "iniciales de nombre de archivo" llaves en un SqlConnection cadena de conexin. Este ejemplo utiliza una ruta absoluta a la ubicacin del archivo de datos principal.

"AttachDbFileName = c: \ data \ Northwind.mdf; Integrated Security = true; Initial Catalog = Neptuno";

Utilizando la cadena de sustitucin DataDirectory

AttachDbFileName se ha ampliado en ADO.NET 2.0 con la introduccin de la | DataDirectory | . (entre barras verticales) cadena de sustitucin DataDirectory se utiliza en conjuncin con AttachDbFileName para indicar una ruta relativa a un fichero de datos, lo que permite a los desarrolladores crear cadenas de conexin que se basan en una ruta relativa al origen de datos en lugar de tener que especificar una ruta completa. La ubicacin fsica que DataDirectory puntos a depende del tipo de aplicacin. En este ejemplo, el archivo de Northwind.mdf que se adjunta se encuentra en \ carpeta de la aplicacin App_Data.

Data Source = \ \ SQLExpress;. Integrated Security = true; User Instance = true; AttachDBFilename = | DataDirectory | \ App_Data \ Northwind.mdf; Initial Catalog = Northwind;
Cuando DataDirectory se utiliza, la ruta del archivo resultante no puede ser superior en la estructura de directorios del directorio apuntado por la cadena de sustitucin. Por ejemplo, si el pleno ampliado DataDirectory es C: \ AppDirectory \ App_Data, entonces la cadena de conexin de ejemplo que se muestra arriba funciona, ya que est por debajo de c: \ AppDirectory. Sin embargo, el intento de especificar DataDirectory como | DataDirectory | \ .. \ data resultar en un error porque data \ no es un subdirectorio del AppDirectory \. Si la cadena de conexin tiene una cadena de sustitucin formato incorrecto, una ArgumentException ser lanzada.

Nota

System.Data.SqlClient resuelve las cadenas de sustitucin en rutas completas contra el sistema de archivos del equipo local. Por lo tanto, el servidor remoto HTTP, y los nombres de ruta UNC no son compatibles. Se produce una excepcin cuando se abre la conexin si el servidor no se encuentra en el equipo local.

Usando TrustServerCertificate
El TrustServerCertificate palabra clave es una novedad de ADO.NET 2.0 y es vlido nicamente cuando se conecta a una instancia de SQL Server 2005 con un certificado vlido. Cuando TrustServerCertificate se establece en verdadero , la capa de transporte a utilizar SSL para cifrar el canal y evitar recorrer la cadena de certificados para validar la confianza.

"TrustServerCertificate = true;"

Nota

Si TrustServerCertificate se establece en verdadero y el cifrado est activado, el nivel de cifrado especificado en el servidor se puede utilizar incluso si Encryptest establecido en false en la cadena de conexin. La conexin fallar lo contrario.

Activacin del cifrado


Para habilitar el cifrado cuando un certificado no ha sido provisionada en el servidor, la Forzar cifrado de protocolo y los servidores de certificados fiduciarios opciones se deben establecer en el Administrador de configuracin de SQL Server. En este caso, el cifrado se utiliza un certificado de servidor autofirmado sin validacin si no hay ningn certificado verificable se ha aprovisionado en el servidor. Configuracin de la aplicacin no se puede reducir el nivel de seguridad configurado en SQL Server, pero opcionalmente puede fortalecerlo. Una aplicacin puede solicitar cifrado estableciendo la TrustServerCertificate y cifrar palabras clave para verdadero , lo que garantiza que el cifrado se lleva a cabo incluso cuando el certificado del servidor no se ha aprovisionado y Forzar cifrado de protocolo no se ha configurado para el cliente. Sin embargo, si TrustServerCertificate no est habilitada en la configuracin del cliente, un certificado de servidor sigue siendo necesaria. La siguiente tabla describe todos los casos.

Forzar cifrado de protocolo de configuraci n de cliente

Servidor de certificados de confianza client setting

Cifrar / Usar cifrado para cadena de conexin de datos / atributo

Servidor de certificados de confianza de cadena de conexin / atributo

Resultar

No No

N/A N/A

No (por defecto) S

Ignorado No (por defecto)

No cifrado. El cifrado se produce slo si hay un certificado de servidor verificable, de lo contrario el intento de conexin falla. El cifrado se produce slo si hay un certificado de servidor verificable, de lo contrario el intento de conexin falla. El cifrado se produce slo si hay un certificado de servidor verificable, de lo contrario el intento de conexin falla. El cifrado se produce slo si hay un certificado de servidor verificable,

No

N/A

No

Ignorado

Ignorado

No (por defecto)

Ignorado

de lo contrario el intento de conexin falla. S S S No (por defecto) El cifrado se produce slo si hay un certificado de servidor verificable, de lo contrario el intento de conexin falla. El cifrado se produce slo si hay un certificado de servidor verificable, de lo contrario el intento de conexin falla.

Para obtener ms informacin, consulte la seccin "Jerarqua de cifrado" y "Utilizar el cifrado sin validacin" en pantalla de SQL Server 2005 Libros.

Cadenas de conexin OLEDB


El ConnectionString propiedad de un OleDbConnection le permite obtener o establecer una cadena de conexin para un origen de datos OLE DB, como Microsoft Access o SQL Server 6.5 o versiones anteriores. Utilice un SqlConnection para SQL Server 7.0 o posterior. OleDb cadenas de conexin tambin son apoyados por elOleDbConnectionStringBuilder clase.

Conexin OleDb cadena Sintaxis


Debe especificar un nombre de proveedor para una OleDbConnection cadena de conexin. La siguiente cadena de conexin se conecta a una base de datos de Microsoft Access utilizando el proveedor de Jet. Tenga en cuenta que los UserID y Password palabras clave son opcionales si la base de datos no es segura (por defecto).

Provider = Microsoft.Jet.OLEDB.4.0; Data Source = d: \ Neptuno.mdb, ID de usuario = admin, contrasea =;


Si la base de datos Jet es segura, usted debe proporcionar la ubicacin del archivo de informacin de grupo de trabajo.

Provider = Microsoft.Jet.OLEDB.4.0; Data Source = d: \ Neptuno.mdb; Jet OLEDB: System Database = d: \ NorthwindSystem.mdw, ID de usuario = *****, ***** = contrasea;
Utilice el sqloledb palabra clave para SQL Server 6.5 o versiones anteriores.

Provider = SQLOLEDB; Data Source = MySqlServer; Initial Catalog = pubs, ID de usuario = *****, ***** = contrasea;

Nota de seguridad

Es posible proporcionar informacin de conexin para un OleDbConnection en un vnculo de datos universal (UDL), sin embargo se debe evitar hacerlo. Los archivos UDL no se cifran, y exponer la informacin de cadena de conexin en texto claro. Dado que un archivo UDL es un archivo externo de recursos basada en su aplicacin, no se puede asegurar mediante el Marco. NET.

Usando DataDirectory para conectarse a Access / Jet


DataDirectory no es exclusivo de SqlClient . Tambin se puede utilizar con el System.Data.OleDb y System.Data.Odbc . proveedores de red de datos. En el siguiente ejemplo OleDbConnection cadena muestra la sintaxis necesaria para conectarse a la Neptuno.mdb encuentra en la carpeta App_Data de la aplicacin. La base de datos del sistema (System.mdw) tambin se almacena en esa ubicacin.

"Provider = Microsoft.Jet.OLEDB.4.0; Data Source = | DataDirectory | \ Neptuno.mdb; Jet OLEDB: System Database = | DataDirectory | \ System.mdw ";

Nota de seguridad

Especificacin de la ubicacin de la base de datos de sistema en la cadena de conexin no es necesario si la base de datos Access / Jet no es segura. La seguridad es desactivado por defecto, con todos los usuarios que se conectan como usuario incorporado en administrador con una contrasea en blanco. Aun cuando a nivel de usuario de seguridad se aplican correctamente, una base de datos Jet sigue siendo vulnerable a los ataques. Por lo tanto, el almacenamiento de informacin confidencial en una base de datos Access / Jet no se recomienda debido a la debilidad inherente de su esquema de seguridad basada en archivos.

Conexin con Excel


El proveedor de Microsoft Jet se utiliza para conectarse a un libro de Excel. En la siguiente cadena de conexin, la Propiedades extendidas palabra clave establece propiedades que son especficas de Excel. "HDR = Yes;" indica que la primera fila contiene nombres de columna, los datos no, y "IMEX = 1;" le dice al conductor leer siempre "entremezclados" columnas de datos como texto.

Provider = Microsoft.Jet.OLEDB.4.0; Data Source = D: \ MyExcel.xls; Extended Properties = "" Excel 8.0; HDR = Yes; IMEX = 1 ""
Tenga en cuenta que el carcter de comillas dobles requerido para las propiedades extendidas tambin debe ir entre comillas dobles.

Data Shape Provider Cadena de conexin Sintaxis


Utilice tanto el proveedor y los proveedores de datos de palabras clave cuando se utiliza el proveedor Microsoft Data Shape. El siguiente ejemplo utiliza el proveedor Shape para conectarse a una instancia local de SQL Server.

"Provider = MSDataShape; Data Provider = SQLOLEDB; Data Source = (local); Initial Catalog = pubs, Integrated Security = SSPI";

Cadenas de conexin ODBC


Driver = {Microsoft controlador de texto (* txt, * csv..)}; DBQ = d: \ bin

El ConnectionString propiedad de una OdbcConnection permite obtener o establecer una cadena de conexin para un origen de datos OLE DB. Cadenas de conexin ODBC tambin son apoyados por el OdbcConnectionStringBuilder . La cadena de conexin se utiliza el controlador de texto de Microsoft.

Usando DataDirectory para conectarse a Visual FoxPro


"Driver = {Microsoft Visual FoxPro Driver}; SourceDB = | DataDirectory | \ MyData.DBC; SourceType = DBC ";

A continuacin OdbcConnection cadena de conexin de ejemplo se muestra cmo utilizar DataDirectory para conectarse a un archivo de Microsoft Visual FoxPro.

Cadenas de conexin de Oracle


El ConnectionString propiedad de una OracleConnection permite obtener o establecer una cadena de conexin para un origen de datos OLE DB. Cadenas de conexin de Oracle tambin son apoyados por el OracleConnectionStringBuilder .

Data Source = Oracle9i, ID de usuario = *****, ***** = contrasea;


Para obtener ms informacin sobre la sintaxis de cadena de conexin ODBC, vea ConnectionString .

Trabajo con comandos


. NET Framework 2.0
Otras versiones 3 de 7 puntuado este til - Valorar este tema

Despus de establecer una conexin con un origen de datos, puede ejecutar comandos y devolver resultados desde la fuente de datos utilizando un DbCommandobjeto. Puede crear un comando con uno de los constructores de comandos para el. NET Framework que est trabajando. Los constructores pueden tener argumentos opcionales, como una instruccin SQL para ejecutar en el origen de datos, un DbConnection objeto, o un DbTransaction objeto. Tambin puede configurar dichos objetos como propiedades del comando. Tambin puede crear un comando para una conexin particular con el CreateCommand mtodo de unDbConnection objeto. La sentencia SQL que ejecuta el comando se puede configurar mediante la CommandText propiedad. Cada. NET Framework incluye con el Marco. NET tiene un comando objeto. El. NET Framework para OLE DB incluye un OleDbCommand objeto, el. NET Framework para SQL Server incluye un SqlCommand objeto, el. NET Framework para ODBC incluye un OdbcCommand objeto, y el. NET Framework para Oracle incluye unOracleCommand objeto.

Ejecutar un comando
. NET Framework 2.0
Otras versiones

2 de cada 10 ha calificado este til - Valorar este tema Cada. NET Framework incluye con el Marco. NET tiene su objeto propio comando que hereda de DbCommand . El. NET Framework para OLE DB incluye unOleDbCommand objeto, el. NET Framework para SQL Server incluye un SqlCommand objeto, el. NET Framework para ODBC incluye un OdbcCommand objeto, y el. NET Framework para Oracle incluye un OracleCommand objeto. Cada uno de estos objetos expone los mtodos para la ejecucin de comandos basado en el tipo de comando y el valor deseado de retorno, como se describe en la tabla siguiente.

Comando

Valor devuelto

ExecuteReader ExecuteScalar ExecuteNonQuery ExecuteXMLReader

Devuelve un DataReader objeto. Devuelve un solo valor escalar. Ejecuta un comando que no devuelve ninguna fila. Devuelve un objeto XmlReader . Disponible para un SqlCommand nico objeto.

Cada objeto de comando fuertemente tipado tambin soporta un CommandType enumeracin que especifica cmo una cadena de comando se interpreta, como se describe en la tabla siguiente.

CommandTyp e

Descripcin

Texto StoredProcedure

Un comando SQL que define las sentencias que se ejecutan en el origen de datos. El nombre del procedimiento almacenado. Usted puede utilizar el Parmetros de propiedad de un comando para acceder a los parmetros de entrada y de salida y

valores devueltos, independientemente de la ejecucin se llama al mtodo. Cuando se utiliza ExecuteReader , valores de retorno y parmetros de salida no se podr acceder hasta el DataReader se cierre. TableDirect El nombre de una tabla.

Ejemplo
En el ejemplo de cdigo siguiente se muestra cmo se crea un SqlCommand objeto para ejecutar un procedimiento almacenado mediante el establecimiento de sus propiedades. A SqlParameter objeto se utiliza para especificar el parmetro de entrada para el procedimiento almacenado. El comando se ejecuta utilizando elExecuteReader mtodo, y la salida del SqlDataReader se muestra en la ventana de la consola. C# VB

Shared Sub GetSalesByCategory ( ByVal connectionString como cuerdas , _ ByVal categoryName Como cadena ) Con conexin Como Nuevo SqlConnection (connectionString) 'Crear el comando y establecer sus propiedades. Dim comando como SqlCommand = New SqlCommand () command.Connection = conexin command.CommandText = "SalesByCategory" command.CommandType = CommandType.StoredProcedure 'Agregar el parmetro de entrada y establecer sus propiedades. Dim parmetro como New SqlParameter () parameter.ParameterName = "@ CategoryName" parameter.SqlDbType = SqlDbType.NVarChar parameter.Direction = ParameterDirection.Input parameter.Value = categoryName 'Agregar el parmetro a la coleccin Parameters. command.Parameters.Add (parmetro) 'Abre la conexin y ejecutar el lector. Connection.Open () Dim lector como SqlDataReader = Command.ExecuteReader () Si reader.HasRows Luego hacer bien reader.Read () Console.WriteLine ( "{0}: {1: C}" , _ lector (0), lector (1)) Loop dems Console.WriteLine ( "No hay filas devueltas." ) End Si End Uso End Sub

Comandos de solucin de problemas


El. NET Framework para SQL Server agrega contadores de rendimiento que le permiten detectar problemas intermitentes relacionados con la ejecucin de comandos. Para obtener ms informacin, consulte Uso de contadores de rendimiento ADO.NET .

Trabajar con parmetros de comando


. NET Framework 2.0
Otras versiones

9 de cada 19 ha calificado este til - Valorar este tema Los objetos de comando utilice parmetros para pasar valores a las instrucciones SQL o procedimientos almacenados, proporcionando la comprobacin de tipos y validacin. A diferencia del texto de comandos, el parmetro de entrada se trata como un valor literal, no como cdigo ejecutable. Esto ayuda a proteger contra los "ataques de inyeccin SQL", en la que un atacante inserta un comando en una sentencia SQL que pone en peligro la seguridad en el servidor. Adems de los beneficios de seguridad, comandos con parmetros proporcionan un mtodo conveniente para organizar los valores pasados a una fuente de datos. A DbParameter objeto puede ser creado con el constructor, o aadindolo a la DbParameterCollection llamando al Aade mtodo de la DbParameterCollectioncoleccin. El Add mtodo tomar como entrada o bien argumentos del constructor o de un objeto de parmetro existente, segn el proveedor de datos.

El suministro de la Propiedad ParameterDirection


Al agregar parmetros, es necesario proporcionar un ParameterDirection propiedad para otros parmetros de parmetros de entrada. La siguiente tabla muestra losParameterDirection valores que puede utilizar con el ParameterDirection enumeracin.

Persona

Descripcin

Entrada InputOutput Salida ReturnValue

El parmetro es un parmetro de entrada. Este es el valor predeterminado. El parmetro puede ser de entrada y salida. El parmetro es un parmetro de salida. El parmetro representa un valor devuelto de una operacin como un procedimiento almacenado, una funcin de funcin, o funcin definida por el usuario.

Trabajo con marcadores de posicin de parmetros

La sintaxis de los marcadores de posicin de parmetro depende de la fuente de datos. Los proveedores de. NET Framework manejar nombres y especificacin de parmetros y marcadores de posicin de parmetro diferente. Esta sintaxis se adapta a una fuente de datos especfica, tal como se describe en la siguiente tabla.

El proveedor de datos

Parmetro nombrar sintaxis

SqlClient OleDb

Usa parmetros con nombre en el formato @ parametername . Utiliza marcadores de posicin de parmetros indicados por un signo de interrogacin ( ? ). Utiliza marcadores de posicin de parmetros indicados por un signo de interrogacin ( ? ). Usa parmetros con nombre en el formato : parmname (o parmname ).

Odbc

OracleClient

Especificacin de los tipos de datos de parmetros


El tipo de datos de un parmetro es especfico para el. Proveedor de datos. Especificar el tipo convierte el valor del parmetro para el tipo. proveedor de datos antes de pasar el valor de la fuente de datos. Tambin puede especificar el tipo de un parmetro de forma genrica mediante el establecimiento de la DbType propiedad del parmetro de objeto a un determinado DbType . El. NET Framework tipo de proveedor de datos de un parmetro objetivo se deduce del tipo Marco. NET del valor de la Parmetro objeto, o por el DbType delparmetro objeto. La siguiente tabla muestra la inferirse Parmetro tipo basndose en el objeto que se pasa como parmetro el valor especificado o DbType .

. NET Fra me wor k tipo

System.Data .DbType

SqlDbType

OleDbTyp e

OdbcType

Oracle Type

bool byte

Boolean Byte

Poco TinyInt

Boolean UnsignedTi nyInt VarBinary

Poco TinyInt

Byte Byte

byte []

Binario

VarBinary. Esta conversin implcita fallar si la matriz de bytes es mayor que el tamao mximo de un VarBinary , que es

Binario

Crudo

de 8000 bytes. Para las matrices de bytes mayores que 8000 bytes, establezca explcitamente el SqlDbType . carb n Inferir un SqlDbType a partir de carbn no es compatible. DateTime DateTime Char Char Byte

Date Tim e Deci mal dobl e flota r Guid Int1 6 Int3 2 Int6 4 objet o

DBTimeSta mp

DateTime

DateTi me

Decimal

Decimal

Decimal

Numrico

Nmer o Doble

Doble

Flotar

Doble

Doble

Solo

Real

Solo

Real

Flotar

Guid Int16

UniqueIdentifier SmallInt

Guid SmallInt

UniqueIdentifier SmallInt

Crudo Int16

Int32

Int

Int

Int

Int32

Int64

BigInt

BigInt

BigInt

Nmer o Gota

Objeto

Variante

Variante

Inferir unOdbcType deobjeto s no es compatible. NVarChar

cade na

Cadena

NVarChar . Esta conversin implcita fallar si la cadena es mayor que el tamao mximo de un NVarChar , que es de 4000 caracteres. Para las cadenas de ms de 4000 caracteres, establezca

VarWChar

NVarC har

explcitamente el SqlDbType . Tim eSpa n UInt 16 Tiempo Inferir un SqlDbType de Time Span no es compatible. Inferir un SqlDbType a partir de UInt16 no es compatible. Inferir un SqlDbType a partir de UInt32 no es compatible. Inferir un SqlDbType a partir de UInt64 no es compatible. VarChar DBTIME Tiempo DateTi me

UInt16

UnsignedS mallInt

Int

UInt16

UInt 32

UInt32

UnsignedIn t

BigInt

UInt32

UInt 64

UInt64

UnsignedBi gInt

Numrico

Nmer o

AnsiString

VarChar

VarChar

VarCh ar Char

AnsiStringFixe dLength Moneda

Char

Char

Char

Dinero

Moneda

Inferir unOdbcType dedivisa s no es compatible. Fecha

Nmer o

Fecha

Inferir un SqlType de fecha no es compatible. Inferir un SqlType de SByte no es compatible. NCHAR

DBDATE

DateTi me

SByte

TinyInt

Inferir unOdbcType deSByte no es compatible. NCHAR

SByte

StringFixedLe ngth Tiempo

WChar

NCHA R DateTi me

Inferir un SqlType de tiempo n o es compatible. Inferir un SqlDbType de VAR NUMERIC no es compatible.

DBTIME

Tiempo

VARNUMERI C

VARNUME RIC

Inferir unOdbcType deVAR NUMERICno es compatible.

Nmer o

Nota

Las conversiones de decimal a otros tipos son conversiones de restriccin que redondean el Decimal valor al valor entero ms cercano a cero. Si el resultado de la conversin no es representable en el tipo de destino, una OverflowException es lanzada.
Nota

Cuando se enva un valor de parmetro nulo al servidor, debe especificar DBNull , no nula ( Nada en Visual Basic). El valor nulo en el sistema es un objeto vaco que no tiene ningn valor. DBNull se utiliza para representar los valores nulos. Para obtener ms informacin sobre los valores nulos de base de datos, veaTratamiento de valores NULL .

Derivado Informacin de parmetros


Los parmetros tambin se pueden derivar de un procedimiento almacenado utilizando la DbCommandBuilder clase. Tanto el SqlCommandBuilder yOleDbCommandBuilder clases proporcionan un mtodo esttico, DeriveParameters , que rellena automticamente la coleccin de parmetros de un objeto de comando con los parmetros de un procedimiento almacenado. Tenga en cuenta que DeriveParameters sobrescribe cualquier informacin existente parmetro para el comando.

Nota

Derivado informacin de parmetros incurre en una penalizacin en el rendimiento, ya que requiere un viaje adicional y vuelta a la fuente de datos para recuperar la informacin. Si la informacin de parmetros se conoce en tiempo de diseo, puede mejorar el rendimiento de la aplicacin mediante el establecimiento de los parmetros de forma explcita.
Para obtener ms informacin, vea Generar comandos automticamente .

Utilizar parmetros con SqlCommand y un procedimiento almacenado


Los procedimientos almacenados ofrecen muchas ventajas en aplicaciones basadas en datos. El uso de procedimientos almacenados, las operaciones de base de datos se puede encapsular en un solo comando, optimizado para un mejor rendimiento, y mejorar con mayor seguridad. Aunque un procedimiento almacenado puede ser llamado simplemente pasando el nombre del procedimiento almacenado seguido por argumentos de los parmetros como una sentencia de SQL, utilizando el parmetros de la coleccin ADO.NET DbCommand objeto permite definir ms explcitamente los parmetros de procedimientos almacenados, as como acceder a la salida parmetros y valores de retorno.

Nota

Instrucciones con parmetros se ejecutan en el servidor mediante sp_executesql, que permite la reutilizacin del plan de consulta. Cursores locales o variables en el lote de sp_executesql no son visibles para el lote que llama a sp_executesql. Cambios en el contexto de base de datos slo hasta el final de la instruccin sp_executesql. Para obtener ms informacin, vea los Libros en pantalla de SQL Server.
Cuando se utilizan parmetros con SqlCommand para ejecutar un procedimiento almacenado de SQL Server, los nombres de los parmetros agregados a laParmetros de coleccin deben coincidir con los nombres de los marcadores

de parmetros en el procedimiento almacenado. El. NET Framework para SQL Server no es compatible con el signo de interrogacin (?) Marcador de posicin para pasar parmetros a una instruccin SQL o un procedimiento almacenado. Trata a los parmetros en el procedimiento almacenado como parmetros con nombre y busca a juego marcadores de parmetros. Por ejemplo, el CustOrderHistprocedimiento almacenado se define con un parmetro denominado @ CustomerID . Cuando se ejecuta el cdigo del procedimiento almacenado debe tambin utilizar un parmetro denominado @ CustomerID .

CREATE PROCEDURE dbo.CustOrderHist @ CustomerID varchar (5)

Ejemplo

En este ejemplo se muestra cmo llamar a un procedimiento almacenado de SQL Server en el Northwind base de datos muestra. El nombre del procedimiento almacenado es dbo.SalesByCategory y tiene un parmetro de entrada denominado @ CategoryName con un tipo de datos nvarchar (15) . El cdigo crea un nuevo SqlConnection dentro de un bloque mediante la conexin de manera que se dispone cuando el procedimiento termina. El SqlCommand y SqlParameterobjetos son creados, y establecer sus propiedades. A SqlDataReader ejecuta el SqlCommand y devuelve el conjunto de resultados del procedimiento almacenado, mostrando el resultado en la ventana de la consola.

Nota

En lugar de crear SqlCommand y SqlParameter objetos y luego establecer las propiedades en declaraciones por separado, en su lugar puede optar por utilizar uno de los constructores sobrecargados para establecer varias propiedades en una sola sentencia.
C# VB

Shared Sub GetSalesByCategory ( ByVal connectionString como cuerdas , _ ByVal categoryName Como cadena ) Con conexin Como Nuevo SqlConnection (connectionString) 'Crear el comando y establecer sus propiedades. Dim comando como SqlCommand = New SqlCommand () command.Connection = conexin command.CommandText = "SalesByCategory" command.CommandType = CommandType.StoredProcedure 'Agregar el parmetro de entrada y establecer sus propiedades. Dim parmetro como New SqlParameter () parameter.ParameterName = "@ CategoryName" parameter.SqlDbType = SqlDbType.NVarChar parameter.Direction = ParameterDirection.Input parameter.Value = categoryName 'Agregar el parmetro a la coleccin Parameters. command.Parameters.Add (parmetro) 'Abre la conexin y ejecutar el lector. Connection.Open () Dim lector como SqlDataReader = Command.ExecuteReader () Si reader.HasRows Luego hacer bien reader.Read () Console.WriteLine ( "{0}: {1: C}" , _ lector (0), lector (1)) Loop dems

Console.WriteLine ( "No hay filas devueltas." ) End Si End Uso End Sub

Utilizar parmetros con un OleDbCommand o OdbcCommand


Cuando se utilizan parmetros con un OleDbCommand o OdbcCommand , el orden de los parmetros agregados a la Parmetros de recoleccin debe coincidir con el orden de los parmetros definidos en el procedimiento almacenado. El. NET Framework para OLE DB y. NET Framework de datos para los parmetros de tratar a ODBC en un procedimiento almacenado como marcadores de posicin y aplicar valores de los parmetros en orden. Adems, los parmetros de retorno de valor deben ser los primeros parmetros agregados a la Parmetros de coleccin. El. NET Framework para OLE DB y. NET Framework para ODBC no admite parmetros con nombre para pasar parmetros a una instruccin SQL o un procedimiento almacenado. En este caso, debe utilizar el signo de interrogacin (?) Marcador de posicin, como en el siguiente ejemplo.

SELECT * FROM Clientes WHERE CustomerID =?


Como resultado, el orden en el que los parmetros objetos se aaden a la Parmetros de recogida directamente debe corresponder a la posicin de la? marcador de posicin para el parmetro.

Ejemplo OleDb
C# VB

Dim comando Como OleDbCommand = New OleDbCommand (_ "SampleProc" , conexin) command.CommandType = CommandType.StoredProcedure Dim parmetro como OleDbParameter = command.Parameters.Add (_ "RETURN_VALUE" , OleDbType. Integer ) parameter.Direction = ParameterDirection.ReturnValue parmetro = command.Parameters.Add (_ "@ InputParm" , OleDbType.VarChar, 12) parameter.Value = "Ejemplo de Valor" parmetro = command.Parameters.Add (_ "@ OutputParm" , OleDbType.VarChar, 28) parameter.Direction = ParameterDirection.Output

Ejemplo Odbc
C# VB

Dim comando Como OdbcCommand = New OdbcCommand (_ "{? = LLAMADA SampleProc (?,?)}" , conexin) command.CommandType = CommandType.StoredProcedure Dim parmetro como OdbcParameter = command.Parameters.Add ( "RETURN_VALUE" , OdbcType.Int) parameter.Direction = ParameterDirection.ReturnValue parmetro = command.Parameters.Add (_ "@ InputParm" , OdbcType.VarChar, 12) parameter.Value = "Ejemplo de Valor"

parmetro = command.Parameters.Add (_ "@ OutputParm" , OdbcType.VarChar, 28) parameter.Direction = ParameterDirection.Output

Generar comandos automticamente


. NET Framework 2.0
Otras versiones

3 de cada 10 ha calificado este til - Valorar este tema Cuando el SelectCommand propiedad se especifica de forma dinmica en tiempo de ejecucin, como por ejemplo a travs de una herramienta de consulta que tiene un comando de texto del usuario, no puede ser capaz de especificar el adecuado InsertCommand , UpdateCommand o DeleteCommand en tiempo de diseo. Si sus DataTable mapas o se genera a partir de una tabla de base de datos, usted puede tomar ventaja de la DbCommandBuilder objeto de generar automticamente el DeleteCommand , InsertCommand y UpdateCommand de los DbDataAdapter . Como requisito mnimo, debe establecer el SelectCommand propiedad para generacin automtica de comandos para trabajar. El esquema de la tabla recuperada por el SelectCommand propiedad determina la sintaxis de los comandos INSERT generada automticamente, UPDATE y DELETE. El DbCommandBuilder debe ejecutar el SelectCommand para devolver los metadatos necesarios para construir el INSERT, UPDATE y DELETE de SQL. Como resultado, un viaje extra a la fuente de datos es necesario, y esto puede afectar al rendimiento. Para lograr un rendimiento ptimo, debe especificar los comandos de forma explcita en lugar de utilizar el DbCommandBuilder . El SelectCommand tambin debe devolver al menos una clave principal o columna nica. Si no hay ninguna, una InvalidOperation excepcin se genera, y los comandos no se generan. Cuando se asocia con un DataAdapter , el DbCommandBuilder genera automticamente el InsertCommand , UpdateCommand y DeleteCommand propiedades de los DataAdapter si son referencias nulas. Si un comando que ya existe una propiedad, el actual comando se utiliza. Vistas de base de datos que se crean por la unin de dos o ms tablas no se considera una tabla de base de datos nica. En este caso no se puede utilizar elDbCommandBuilder para generar automticamente comandos, usted debe especificar los comandos de forma explcita. Para obtener informacin sobre la definicin explcita de comandos para resolver cambios a un conjunto de datos en el origen de datos, vea Actualizar orgenes de datos con DataAdapters . Es posible que desee asignar parmetros de salida de nuevo a la fila actualizada de un conjunto de datos . Una tarea habitual consiste en recuperar el valor de un campo de identidad de generacin automtica o marca de tiempo de la fuente de datos. El DbCommandBuilder no se asignarn los parmetros de salida a las columnas de una fila actualizada de forma predeterminada. En este caso, debe especificar explcitamente su mandato. Para un ejemplo de la cartografa un campo de identidad de generacin automtica a una columna de una fila insertada, vea Recuperar valores de identidad o Autonumrico .

Reglas para comandos generados automticamente


En la tabla siguiente se muestran las reglas de cmo comandos generados automticamente se generan.

Comando

Regla

InsertCommand

Inserta una fila en la fuente de datos para todas las filas de la tabla con un RowState de Alta . Inserta valores para todas las columnas que son actualizables (pero no las columnas como identidades, expresiones o marcas de tiempo). Actualiza filas en el origen de datos para todas las filas de la tabla con un RowState de Modified . Actualiza los valores de todas las columnas excepto para las columnas que no son actualizables, como identidades o expresiones. Actualiza todas las filas donde los valores de columna del origen de datos coinciden con los valores de columna de clave principal de la fila, y donde las restantes columnas del origen de datos coinciden con los valores originales de la fila. Para obtener ms informacin, consulte "Modelo de simultaneidad optimista para actualizaciones y eliminaciones", ms adelante en este tema. Elimina filas en el origen de datos para todas las filas de la tabla con un RowState de Deleted . Elimina todas las filas donde los valores de columna coinciden con los valores de columna de clave principal de la fila, y en las restantes columnas del origen de datos coinciden con los valores originales de la fila. Para obtener ms informacin, consulte "Modelo de simultaneidad optimista para actualizaciones y eliminaciones", ms adelante en este tema.

UpdateCommand

DeleteCommand

Modelo de simultaneidad optimista para actualizaciones y eliminaciones


La lgica para generar comandos automticamente para instrucciones UPDATE y DELETE se basa en la concurrencia optimista - es decir, los registros no estn bloqueados para la edicin y pueden ser modificados por otros usuarios o procesos en cualquier momento. Debido a que un registro puede haber sido modificado despus de que fuera devuelto por la sentencia SELECT, pero antes de la instruccin UPDATE o DELETE se emite, el UPDATE generada automticamente o DELETE incluye una clusula WHERE, que especifica que una fila slo se actualiza si contiene todo original valores y no se ha eliminado de la fuente de datos. Esto se hace para evitar sobrescribir los datos nuevos. Cuando una actualizacin generada automticamente intenta actualizar una fila que se ha eliminado o que no contiene los valores originales que se encuentran en el conjunto de datos , el comando no afecta a ningn registro y un DBConcurrencyException tira. Si desea que la instruccin UPDATE o DELETE se ejecute independientemente de los valores originales, debe establecer explcitamente el UpdateCommand para losDataAdapter y no depender de la generacin automtica de comandos.

Limitaciones de la lgica generacin automtica de comandos


Las siguientes limitaciones se aplican a la generacin automtica de comandos.

Slo tablas no relacionadas


La lgica de generacin automtica de comandos genera INSERT, UPDATE o DELETE para tablas independientes sin tener en cuenta las relaciones con otras tablas en el origen de datos. Como resultado, se puede producir un error al llamar a Update para realizar cambios en una columna que participa en una restriccin de clave externa de la base de datos. Para evitar esta excepcin, no utilice el DbCommandBuilder al actualizar las columnas que participan en una restriccin de clave externa, sino que explicitar las afirmaciones utilizadas para realizar la operacin.

Tabla y columna
Lgica de generacin automtica de comandos falla si los nombres de columna o nombres de tabla contiene caracteres especiales, como espacios, puntos, comillas u otros caracteres no alfanumricos, aunque sean delimitados por corchetes. Nombres completos de tabla en forma de catalog.schema.table son compatibles.

Utilizar CommandBuilder para generar automticamente una instruccin SQL


Para generar automticamente instrucciones SQL para un DataAdapter , primero ajuste el SelectCommand propiedad de los DataAdapter , a continuacin, crear una CommandBuilder objeto y especifique como argumento el DataAdapter para el que el CommandBuilder generar automticamente las instrucciones SQL. C# VB

"Se supone que la conexin es un objeto SqlConnection vlida "dentro de un bloque Using. Dim adaptador Como SqlDataAdapter = New SqlDataAdapter (_ "SELECT * FROM dbo.Customers" , conexin) Dim constructor Como SqlCommandBuilder = New SqlCommandBuilder (adaptador) builder.QuotePrefix = "[" builder.QuoteSuffix = "]"

Modificacin de las propiedades SelectCommand


Si modifica el CommandText del SelectCommand despus del INSERT, UPDATE o DELETE se han generado automticamente, puede producirse una excepcin. Si la modificacin SelectCommand.CommandText contiene informacin de esquema que es incompatible con la SelectCommand.CommandText utiliza cuando la insercin, actualizacin o eliminacin comandos se genera de forma automtica, las llamadas futuras al DataAdapter.Update mtodo puede intentar acceder a las columnas que ya no existen en la tabla actual que hace referencia el SelectCommand y se iniciar una excepcin ser. Puede actualizar la informacin de esquema utilizado por el CommandBuilder para generar automticamente rdenes llamando a la RefreshSchema mtodo de laCommandBuilder . Si desea conocer el comando generado automticamente, puede obtener una referencia a los comandos generados automticamente mediante elGetInsertCommand , GetUpdateCommand y GetDeleteCommand mtodos de la CommandBuilder objeto y comprobando el CommandText propiedad del comando asociado. En el ejemplo de cdigo siguiente se escribe en la consola el comando de actualizacin que se ha generado de forma automtica.

Console.WriteLine (builder.GetUpdateCommand (). CommandText) En el siguiente ejemplo se recrea la Clientes mesa en el custDS conjunto de datos. El RefreshSchema se llama al
mtodo para actualizar los comandos generados automticamente con esta informacin nueva columna. C# VB

"Supone una SqlConnection abierta y SqlDataAdapter dentro de un bloque Using. adapter.SelectCommand.CommandText = _ "SELECT CustomerID, ContactName DE dbo.Customers" builder.RefreshSchema () custDS.Tables.Remove (custDS.Tables ( "Clientes" )) adapter.Fill (custDS, "Clientes" )

La obtencin de un nico valor de una base de datos


. NET Framework 2.0
Otras versiones 3 de 5 puntuado este til - Valorar este tema Es posible que necesite para devolver informacin de base de datos que es simplemente un valor nico en lugar de en la forma de un flujo de datos o tabla. Por ejemplo, es posible que desee devolver el resultado de una funcin de agregado como COUNT (*), SUM (precio), o AVG (Cantidad). El Comando objeto proporciona la capacidad para devolver los valores individuales utilizando el ExecuteScalar mtodo. Los ExecuteScalar devuelve el mtodo, como un valor escalar, el valor de la primera columna de la primera fila del conjunto de resultados. El siguiente ejemplo de cdigo se inserta un nuevo valor en la base de datos mediante un SqlCommand . El ExecuteScalar mtodo se utiliza para devolver el valor de columna de identidad para el registro insertado. C# VB

Public Funcin AddProductCategory (_ ByVal newName Como cadena , ByVal connString Como cadena ) como Integer Dim newProdID Como Int32 = 0 Dim sql Como cadena = _ "INSERT INTO Production.ProductCategory (nombre) VALUES (@ Name)," _ Y "SELECT CAST (SCOPE_IDENTITY () AS int);" Usando CONN Como Nuevo SqlConnection (connString) Dim cmd Como Nuevo SqlCommand (sql, conn) cmd.Parameters.Add ( "@ Name" , SqlDbType.VarChar) cmd.Parameters ( "@ nombre" ). Valor = newName Pruebe conn.Open () newProdID = Convert.ToInt32 (cmd.ExecuteScalar ()) Catch ex como excepcin Console.WriteLine (ex.Message) Fin Trate End Uso Volver newProdID End Funcin

Trabajo con DataAdapters


. NET Framework 2.0
Otras versiones 2 de 8 puntuado este til - Valorar este tema A DataAdapter se usa para recuperar datos de un origen de datos y rellenar las tablas de un DataSet . Los DataAdapter tambin resuelve los cambios realizados en el DataSet en el origen de datos. El DataAdapter utiliza la conexin del objeto. NET Framework para conectarse a un origen de datos, y utiliza comandos objetos para recuperar datos desde y resolver los cambios en el origen de datos. .. Cada proveedor de datos incluido con el NET Framework tiene un DataAdapter objeto:. NET Framework para OLE DB incluye un OleDbDataAdapter . objeto, el NET Framework para SQL Server incluye un SqlDataAdapter objeto, los datos de NET Framework. Provider para ODBC incluye un OdbcDataAdapter objeto, y el. NET Framework para Oracle incluye un OracleDataAdapter objeto.

Llenar un DataSet desde un DataAdapter


. NET Framework 2.0
Otras versiones

32 de los 49 ha calificado este til - Valorar este tema La ADO.NET DataSet es una representacin residente en memoria de datos que proporciona un modelo de programacin relacional coherente independientemente del origen de datos. El DataSet representa un conjunto completo de datos, incluyendo tablas, restricciones y relaciones entre las tablas. Debido a que el conjunto de datos es independiente de la fuente de datos, un conjunto de datos pueden incluir datos locales de la aplicacin, as como los datos de mltiples fuentes de datos. La interaccin con las fuentes de datos existentes se controla a travs de los DataAdapter . El SelectCommand propiedad del DataAdapter es un smbolo del objeto que recupera los datos del origen de datos. El InsertCommand , UpdateCommand yDeleteCommand propiedades de los DataAdapter son comandos objetos que gestionan las actualizaciones de los datos del origen de datos de acuerdo con las modificaciones realizadas en los datos en el DataSet . Estas propiedades se explican con ms detalle en Actualizar orgenes de datos con DataAdapters . El relleno mtodo de los DataAdapter se usa para rellenar un DataSet con los resultados de la SelectCommand del DataAdapter . Llene toma como argumentos un DataSet a poblarse, y un DataTable objeto, o el nombre de la DataTable que se llena de las filas volvi del SelectCommand . Nota Con las DataAdapter para recuperar una tabla entera toma tiempo, especialmente si hay muchas filas de la tabla. Esto es porque el acceso a la base de datos, localizar y procesar los datos y, a continuacin, transferir los datos sobre el alambre a su cliente es mucho tiempo. Tirando toda la tabla para el cliente tambin bloquea todas las filas en

el servidor. Para mejorar el rendimiento, puede utilizar el DONDE clusula puede reducir en gran medida el nmero de filas que se devuelven al cliente. Tambin puede reducir la cantidad de datos devueltos al cliente por slo enumerar explcitamente las columnas requeridas en el SELECTcomunicado. Otra solucin es poner recuperar las filas en lotes, tales como unos pocos cientos de filas a la vez, y slo recuperar el lote siguiente, cuando el cliente se hace con el lote actual. El relleno mtodo utiliza el DataReader objeto implcitamente para devolver los nombres de columna y los tipos utilizados para crear las tablas en el DataSet , as como los datos para llenar las filas de las tablas en el DataSet . Tablas y columnas slo se crean si no existen ya, de lo contrario Llene utiliza los existentes DataSetesquema. Tipos de columnas se crean como. NET Framework de acuerdo con las tablas de asignacin. NET Data Provider para tipos de datos. NET Framework Tipos de datos . Las claves principales no se crean si no existen en el origen de datos y DataAdapter.MissingSchemaAction se estableceMissingSchemaAction.AddWithKey . Si Llena considera que existe una clave principal para una tabla, que se sobreponen a los datos en el DataSet con los datos de la fuente de datos para las filas donde los valores de columna de clave principal coincidan con los de la fila devuelta desde el origen de datos. Si no hay ninguna clave principal se encuentra, los datos se agregan a las tablas en el DataSet . Fill utiliza las asignaciones que puedan existir al rellenar el DataSet (vea Configuracin de DataTable y DataColumn de asignaciones ).

Nota

Si SelectCommand devuelve los resultados de una combinacin externa, el DataAdapter no establece un PrimaryKey valor resultante de la DataTable . Tendr que definir el PrimaryKey s mismo para asegurar que las filas duplicadas se resuelven correctamente. Para obtener ms informacin, vea Definir una clave principal para una tabla .
En el ejemplo de cdigo siguiente se crea una instancia de un SqlDataAdapter que utiliza un objeto SqlConnection para el Microsoft SQL Server Northwind base de datos y rellena una DataTable en un DataSet con la lista de clientes. La sentencia SQL y SqlConnection argumentos pasados al SqlDataAdapter constructor se utiliza para crear el SelectCommand propiedad de los SqlDataAdapter .

Ejemplo
C# VB

"Se supone que la conexin es un objeto SqlConnection vlida. Dim queryString Como cadena = _ "SELECT CustomerID, CompanyName DE dbo.Customers" Dim adaptador Como SqlDataAdapter = New SqlDataAdapter (_ queryString, conexin) Dim clientes As DataSet = New DataSet adapter.Fill (clientes, "Clientes" )

Nota

El cdigo que se muestra en este ejemplo no explcitamente abrir y cerrar la conexin . El relleno mtodo abre implcitamente la conexin que los DataAdapterutiliza si comprueba que la conexin no est abierta. Si Fill abierto la conexin, sino que tambin cierra la conexin cuando Fill est terminado. Esto puede simplificar el cdigo cuando se trata de una operacin nica, como un relleno o una actualizacin . Sin embargo, si va a realizar mltiples operaciones que requieren una conexin abierta, se puede mejorar el rendimiento de la aplicacin llamando explcitamente el Abierto mtodo de la conexin , la realizacin de las operaciones en el origen de datos y, a continuacin, llamando al Primer mtodo de la conexin . Usted debe tratar de mantener las conexiones a la fuente de datos abierta lo ms brevemente posible para liberar recursos

para su uso por otras aplicaciones cliente.

Varios conjuntos de resultados


Si el DataAdapter encuentra varios conjuntos de resultados, crea varias tablas en el DataSet . Las mesas estn recibe el nombre predeterminado incremental de la Tabla N , a partir de "Tabla" para Table0. Si el nombre de la tabla se pasa como argumento al relleno mtodo, las tablas se recibe el nombre predeterminado incremental de TableName N , comenzando con "TableName" para TableName0.

Llenar un DataSet desde mltiples DataAdapters


Cualquier nmero de DataAdapter objetos se puede utilizar con un conjunto de datos . Cada DataAdapter puede utilizarse para llenar uno o ms DataTableobjetos y resolver las actualizaciones en el origen de datos correspondiente. DataRelation y Constraint objetos pueden ser adicionados al conjunto de datos a nivel local, lo que le permite relacionar los datos de fuentes de datos diferentes. Por ejemplo, un conjunto de datos puede contener datos de una base de datos Microsoft SQL Server, una base de datos IBM DB2 expuestos a travs de OLE DB y un origen de datos que flujos XML. Uno o ms DataAdapter objetos puede manejar la comunicacin a cada fuente de datos.

Ejemplo
En el ejemplo de cdigo siguiente rellena una lista de clientes de la Northwind base de datos en Microsoft SQL Server 2000, y una lista de las rdenes de la Northwind base de datos almacenada en Microsoft Access 2000. Las mesas llenas estn relacionados con una DataRelation , y la lista de clientes se muestra a continuacin con los pedidos de ese cliente. Para obtener ms informacin acerca de DataRelation objetos, vea Agregar una relacin entre tablas y Explorar una relacin entre tablas . C# VB

"Se supone que customerConnection es un objeto SqlConnection vlida. ' Asume que orderConnection es un objeto OleDbConnection vlida. Dim custAdapter Como SqlDataAdapter = New SqlDataAdapter (_ "SELECT * FROM dbo.Customers" , customerConnection) Dim ordAdapter Como OleDbDataAdapter = New OleDbDataAdapter (_ "SELECT * FROM Orders" , orderConnection) Dim CustomerOrders As DataSet = New DataSet () custAdapter.Fill (CustomerOrders, "Clientes" ) ordAdapter.Fill (CustomerOrders, "Orders" ) Dim relacin como DataRelation = _ customerOrders.Relations.Add ( "CustOrders" , _ customerOrders.Tables ( "Clientes" ). Las columnas ( "IdCliente" ), _ customerOrders.Tables ( "Orders" ). Las columnas ( "IdCliente" )) Dim proa, Crow Como DataRow Para Cada proa En customerOrders.Tables ( "Clientes" ). Filas Console.WriteLine (proa ( "IdCliente" ). ToString ()) Para cada Crow En pRow.GetChildRows (relacin) Console.WriteLine (vbTab & Crow ( "OrderID" ). ToString ()) Siguiente Siguiente

SQL Server Decimal Tipo


El DataSet defecto es el almacenamiento de datos utilizando. NET Framework. Para la mayora de las aplicaciones, estos proporcionan una representacin conveniente de informacin de la fuente de datos. Sin embargo, esta representacin puede causar un problema cuando el tipo de datos del origen de datos es un decimal de SQL Server o tipo de datos numrico. El. NET Framework decimal del tipo de datos permite a un mximo de 28 dgitos significativos, mientras que el SQL Server decimal del tipo de datos permite a 38 dgitos significativos. Si los SqlDataAdapter determina durante un relleno operacin que la precisin de un SQL Server decimal campo es mayor que 28 caracteres, la fila actual no se agrega a la DataTable . En cambio, el FillError evento, que permite determinar si una prdida de precisin se producir, y responder adecuadamente. Para obtener ms informacin acerca de la FillError evento, vea Trabajar con eventos DataAdapter . Para obtener el SQL Server decimal valor, tambin puede utilizar un SqlDataReader objeto y llamar a la GetSqlDecimal mtodo. ADO.NET 2.0 introduce soporte mejorado para System.Data.SqlTypes en el DataSet . Para obtener ms informacin, consulte SqlTypes y el DataSet .

Captulos OLE DB
Conjuntos de filas jerrquicos, o captulos (OLE DB tipo DBTYPE_HCHAPTER , ADO tipo adChapter ) se puede utilizar para rellenar el contenido de un DataSet .Cuando los OleDbDataAdapter encuentra una columna con captulo durante un relleno operacin, un DataTable se crea para la columna con captulo, y esa tabla se llena con las columnas y filas del captulo. La tabla creada para la columna con captulo se nombra utilizando tanto el nombre de la tabla padre y el nombre de la columna con captulo en la forma " ParentTableNameChapteredColumnName ". Si ya existe una tabla en el DataSet que coincide con el nombre de la columna con captulo, la tabla actual se rellena con los datos del captulo. Si no hay ninguna columna en una tabla existente que coincida con una columna en el captulo, una nueva columna se agrega. Antes de las tablas en el DataSet se rellenan con los datos de las columnas con captulo, se crea una relacin entre las tablas primarias y secundarias del conjunto de filas jerrquico mediante la adicin de una columna entera a los padres y tabla secundaria, el establecimiento de la columna primaria para auto- incremento y la creacin de un DataRelation utilizando las columnas agregadas de ambas tablas. La relacin se aade llamadas de acuerdo con la tabla padre y nombres de los captulos de columna en la forma " ParentTableNameChapterColumnName ". Tenga en cuenta que la columna relacionada slo existe en el DataSet . Despus se llena desde el origen de datos de resultado en las filas que se agregan a las tablas en lugar de los cambios que se fusionaron en las filas existentes. Tenga en cuenta tambin que, si se utiliza el DataAdapter.Fill sobrecarga que toma un objeto DataTable , slo que la tabla se llenar. Una columna de incremento automtico entero todava se aadir a la mesa, pero no tabla secundaria se crearn o lleno, y no existe relacin ser creada. El siguiente ejemplo utiliza el proveedor MSDataShape para generar una columna captulo de pedidos de cada cliente en una lista de clientes. Un conjunto de datosse rellena con los datos. C# VB

Con conexin Como OleDbConnection = New OleDbConnection (_ "Provider = MSDataShape; Data Provider = SQLOLEDB;" & _ "Data Source = (local); Integrada" & _ "Security = SSPI; Initial Catalog = Northwind" ) Dim adaptador Como OleDbDataAdapter = New OleDbDataAdapter (_ "SHAPE {SELECT IdCliente, NombreCompaa FROM Clientes}" & _ "APPEND ({SELECT CustomerID, OrderID FROM Pedidos} como rdenes de" & _ "se refieren CustomerID a CustomerID)" , conexin) Dim clientes As DataSet = New DataSet () adapter.Fill (clientes, "Clientes" ) End Uso

Cuando el relleno operacin, el conjunto de datos contiene dos tablas: Clientes y CustomersOrders , donde CustomersOrders representa la columna con captulo. Una columna adicional denominada Orders se aade al Clientes mesa, y una columna adicional denominada CustomersOrders se aade a laCustomersOrders mesa. Los pedidos de columna en el Clientes mesa est puesta para autoincremento. Un DataRelation , CustomersOrders , se crea con las columnas que se agregaron a las mesas con clientes como la tabla primaria. Las siguientes tablas muestran algunos resultados de la muestra. TableName: Clientes

CustomerID

CompanyName

rdenes

ALFKI ANATR

Alfreds Futterkiste Ana Trujillo y Emparedados helados

0 1

TableName: CustomersOrders

CustomerID

OrderID

CustomersOrders

ALFKI ALFKI ANATR ANATR

10643 10692 10308 10625

0 0 1 1

Utilizar parmetros con DataAdapter


. NET Framework 2.0
Otras versiones 2 de cada 17 ha calificado este til - Valorar este tema Los DbDataAdapter tiene cuatro propiedades que se utilizan para recuperar datos desde y actualizar datos a la fuente de datos: el SelectCommand propiedad devuelve los datos del origen de datos, y el InsertCommand , UpdateCommand y DeleteCommand propiedades se utilizan para gestionar los cambios en el origen de datos. El SelectCommand propiedad se debe establecer antes de llamar al relleno mtodo de los DataAdapter . El InsertCommand , UpdateCommand oDeleteCommand propiedades deben estar establecidas antes de la actualizacin mtodo de los DataAdapter se llama, en funcin de los cambios realizados a los datos en el DataTable . Por ejemplo, si las filas se han aadido, la InsertCommand se debe establecer antes de llamar a Update . Cuando actualizacin est procesando una fila insertada, actualizada o eliminada, el DataAdapter utiliza

el respectivo Comando de propiedad para procesar la accin. La informacin actual sobre la fila modificada se pasa al comando objeto a travs de la Parmetros de coleccin. Cuando se actualiza una fila en el origen de datos, se llama a la instruccin UPDATE que utiliza un identificador nico para identificar la fila de la tabla se actualizar.El identificador nico es comnmente el valor de un campo de clave principal. La instruccin UPDATE utiliza parmetros que contienen el identificador nico y las columnas y los valores que se deben actualizar, como se muestra en la siguiente instruccin Transact-SQL.

Los clientes UPDATE SET CompanyName = @ CompanyName DONDE CustomerID = @ CustomerID

Nota La sintaxis de los marcadores de posicin de parmetro depende de la fuente de datos. Este ejemplo muestra marcadores de posicin para una fuente de datos SQL Server. El uso del signo de interrogacin (?) Marcadores de posicin para System.Data.OleDb y System.Data.Odbc parmetros.
En este ejemplo de Visual Basic, el CompanyName campo se actualiza con el valor de la CompanyName @ parmetro de la fila en la que CustomerID es igual al valor de la @ CustomerID parmetro. Los parmetros de recuperar la informacin de la fila modificada mediante la SourceColumn propiedad de la SqlParameterobjeto. Los siguientes son los parmetros de la instruccin UPDATE anterior muestra. El cdigo asume que la variable adaptador representa una vlidaSqlDataAdapter objeto.

adapter.Parameters.Add (_ "@ CompanyName", SqlDbType.NChar, 15, "CompanyName") Como parmetro Dim SqlParameter = _ adapter.UpdateCommand.Parameters.Add ("@ CustomerID", _ SqlDbType.NChar, 5, "IdCliente") parameter.SourceVersion = DataRowVersion.Original
El Add mtodo de la Parmetros coleccin lleva el nombre del parmetro, el DataAdapter tipo especfico, el tamao (si es aplicable al tipo), y el nombre de laSourceColumn del objeto DataTable . Observe que el SourceVersion del @ CustomerID parmetro se establece en original . Esto garantiza que la fila existente en la fuente de datos se actualiza si el valor de la columna o columnas identificadas ha sido cambiado en el modificado DataRow . En ese caso, el original valor de la fila que coincida con el valor de la corriente en la fuente de datos, y el actual valor de la fila que contiene el valor actualizado. El SourceVersion para elCompanyName @ parmetro no est definido y se utiliza el valor predeterminado, actual valor de la fila.

Parameter.SourceColumn, Parameter.SourceVersion
El SourceColumn y SourceVersion se pueden pasar como argumentos al parmetro constructor, o establecer como propiedades de una ya existente parmetros .El SourceColumn es el nombre de la DataColumn de la DataRow donde el valor del parmetro se recuperar. El SourceVersion especifica el DataRow versin de que los DataAdapter utiliza para recuperar el valor. La siguiente tabla muestra los DataRowVersion valores de enumeracin disponibles para su uso con SourceVersion .

Enumeracin DataRowVersion Corriente

Descripcin

El parmetro utiliza el valor actual de la columna. Este es el valor predeterminado. El parmetro utiliza el DefaultValue de la columna.

Defecto

Original Propuesto

El parmetro utiliza el valor original de la columna. El parmetro utiliza un valor propuesto.

El SqlClient ejemplo de cdigo en la siguiente seccin se define un parmetro para un UpdateCommand en la que el CustomerID se utiliza la columna como unaSourceColumn para dos parmetros: @ CustomerID ( SET CustomerID = @ CustomerID ), y @ OldCustomerID ( DONDE CustomerID = @ OldCustomerID). El @ CustomerID parmetro se utiliza para actualizar el CustomerID columna en el valor actual en el DataRow . Como resultado, el CustomerID SourceColumncon un SourceVersion de corriente se utiliza. El @ OldCustomerID parmetro se utiliza para identificar la fila actual en el origen de datos. Debido a que el valor de la columna correspondiente se encuentra en la original versin de la fila, el mismo SourceColumn ( CustomerID ) con un SourceVersion del original se utiliza.

Trabajar con parmetros SqlClient


El siguiente ejemplo muestra cmo crear un SqlDataAdapter y establecer el MissingSchemaAction a AddWithKey con el fin de recuperar informacin de esquema adicional de la base de datos. El SelectCommand , InsertCommand , UpdateCommand y DeleteCommand conjunto de propiedades y sus correspondientes SqlParameter objetos agregados a la Parmetros de coleccin. El mtodo devuelve un SqlDataAdapter objeto. C# VB

Public Funcin CreateSqlDataAdapter (_ ByVal conexin Como SqlConnection) Como SqlDataAdapter Dim adaptador Como SqlDataAdapter = New SqlDataAdapter adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey 'Crear los comandos. adapter.SelectCommand = New SqlCommand (_ "SELECT CustomerID, CompanyName de clientes" , conexin) adapter.InsertCommand = New SqlCommand (_ "INSERT INTO usuarios (CustomerID, CompanyName)" & _ "VALUES (@ CustomerID, CompanyName @)" , conexin) adapter.UpdateCommand = New SqlCommand (_ "Los clientes UPDATE SET CustomerID = @ CustomerID, CompanyName =" & _ "@ CompanyName DONDE CustomerID = @ OldCustomerID" , conexin) adapter.DeleteCommand = New SqlCommand (_ "DELETE FROM Clientes WHERE CustomerID = @ CustomerID" , de conexin) 'Crear los parmetros. adapter.InsertCommand.Parameters.Add ( "@ CustomerID" , _ SqlDbType. Char , 5, "IdCliente" ) adapter.InsertCommand.Parameters.Add ( "@ CompanyName" , _ SqlDbType.VarChar, 40, "CompanyName" ) adapter.UpdateCommand.Parameters.Add ( "@ CustomerID" , _ SqlDbType. Char , 5, "IdCliente" ) adapter.UpdateCommand.Parameters.Add ( "@ CompanyName" , _ SqlDbType.VarChar, 40, "CompanyName" ) adapter.UpdateCommand.Parameters.Add ( "@ OldCustomerID" , _ SqlDbType. Char , 5, "IdCliente" ). SourceVersion = _ DataRowVersion.Original adapter.DeleteCommand.Parameters.Add ( "@ CustomerID" , _ SqlDbType. Char , 5, "IdCliente" ). SourceVersion = _ DataRowVersion.Original

Volver adaptador End Funcin

OleDb marcadores de posicin de parmetros


Para los OleDbDataAdapter y OdbcDataAdapter objetos, debe utilizar signo de interrogacin (?) marcadores de posicin para identificar los parmetros. C# VB

Dim selectSQL Como cadena = _ "SELECT IdCliente, NombreCompaa FROM Clientes" & _ "WHERE CountryRegion =? = Y City?" Dim insertSQL COMO cadena = _ "INSERT INTO usuarios (CustomerID, CompanyName) VALUES (?,?)" Dim updateSQL COMO cadena = _ "Los clientes UPDATE SET CustomerID, CompanyName =? =?" & _ WHERE CustomerID =? " Dim deleteSQL Como cadena = "DELETE FROM Clientes WHERE CustomerID =?"
Las instrucciones de consulta con parmetros que definen los parmetros de entrada y salida deben ser creados. Para crear un parmetro, utilice el Parameters.Addmtodo o el parmetro constructor para especificar el nombre de la columna, tipo de datos y tamao. Para los tipos de datos intrnsecos, como Integer , no es necesario incluir el tamao, o puede especificar el tamao predeterminado. En el ejemplo de cdigo siguiente se crean los parmetros de la instruccin SQL del ejemplo anterior, y luego llena un DataSet .

Ejemplo OleDb
C# VB

"Se supone que la conexin es un objeto OleDbConnection vlida. Dim adaptador Como OleDbDataAdapter = New OleDbDataAdapter Dim selectCMD COMO OleDbCommand = New OleDbCommand (selectSQL, conexin) adapter.SelectCommand = selectCMD "Aadir parmetros y valores establecidos. selectCMD.Parameters.Add (_ "@ CountryRegion" , OleDbType.VarChar, 15). Valor = "UK" selectCMD.Parameters.Add (_ "@ City" , OleDbType.VarChar, 15). Valor = "London" Dim clientes As DataSet = New DataSet adapter.Fill (clientes, "Clientes" )

Parmetros Odbc
C# VB

"Se supone que la conexin es un objeto OdbcConnection vlida. Dim adaptador Como OdbcDataAdapter = New OdbcDataAdapter Dim selectCMD COMO OdbcCommand = New OdbcCommand (selectSQL, conexin) adapter.SelectCommand = selectCMD

"Aadir parmetros y valores establecidos. selectCMD.Parameters.Add ( "@ CountryRegion" , OdbcType.VarChar, 15). Valor = "UK" selectCMD.Parameters.Add ( "@ City" , OdbcType.VarChar, 15). Valor = "London" Dim clientes As DataSet = New DataSet adapter.Fill (clientes, "Clientes" )

Nota Si un nombre de parmetro no se suministra para un parmetro, el parmetro se le asigna un nombre predeterminado incremental de parmetros N ,comenzando con "Parameter1". Le recomendamos que evite el parmetro N convencin de nomenclatura al proporcionar un nombre de parmetro, ya que el nombre que suministrar puedan entrar en conflicto con un nombre de parmetro predeterminado existente en el ParameterCollection . Si el nombre proporcionado ya existe, se produce una excepcin.

Agregar restricciones existentes a un DataSet


. NET Framework 2.0
Otras versiones 6 de 9 puntuado este til - Valorar este tema El relleno mtodo del DataAdapter llena un DataSet slo con columnas y filas de un origen de datos, aunque las restricciones suelen establecerse por la fuente de datos, el relleno mtodo no agrega esta informacin de esquema para el conjunto de datos de forma predeterminada. Para rellenar un DataSet con la informacin existente sobre restricciones de clave principal de una fuente de datos, puede llamar a la FillSchema mtodo de los DataAdapter , o establecer laMissingSchemaAction propiedad de los DataAdapter para AddWithKey antes de llamar Llena . Esto se asegurar de que las restricciones de clave principal en el conjunto de datos reflejan los de la fuente de datos. Informacin de restriccin de clave no est incluido y debe crearse explcitamente, como se muestra enAgregar restricciones a una tabla . Adicin de la informacin de esquema a un DataSet antes de llenarlo con los datos garantiza que las restricciones de clave primaria se incluyen con los DataTableobjetos en el conjunto de datos . Como resultado, cuando las llamadas adicionales para cubrir el conjunto de datos se hacen, la informacin de columna de clave principal se utiliza para que coincida con las nuevas filas del origen de datos con filas actuales en cada DataTable , y los datos actuales de las tablas se sobrescribe con los datos del origen de datos . Sin la informacin del esquema, las nuevas filas del origen de datos se aaden al conjunto de datos , lo que resulta en las filas duplicadas.

Nota Si una columna de una fuente de datos se identifica como incremento automtico, el FillSchema mtodo o

el relleno con un mtodo MissingSchemaAction deAddWithKey , crea un DataColumn con un AutoIncrement propiedad establecida en verdadero . Sin embargo, tendr que configurar los AutoIncrementStepy AutoIncrementSeed valores a ti mismo. Para obtener ms informacin acerca de las columnas de incremento automtico, vea Crear columnas AutoIncrement .
Usando FillSchema o poner la MissingSchemaAction a AddWithKey requiere un procesamiento adicional en el origen de datos para determinar la informacin de columna de clave principal. Este procesamiento adicional puede dificultar el rendimiento. Si conoce la informacin de clave principal en tiempo de diseo, se recomienda especificar explcitamente la columna o columnas de clave primaria con el fin de lograr un rendimiento ptimo. Para obtener informacin sobre la definicin explcita de informacin de clave principal para una tabla, vea Definir una clave principal para una tabla . En el ejemplo de cdigo siguiente se muestra cmo agregar informacin de esquema a un DataSet mediante FillSchema . C# VB

Dim custDataSet Como DataSet = New DataSet () custAdapter.FillSchema (custDataSet, SchemaType.Source, "Clientes" ) custAdapter.Fill (custDataSet, "Clientes" )
En el ejemplo de cdigo siguiente se muestra cmo agregar informacin de esquema a un DataSet utilizando el MissingSchemaAction.AddWithKey propiedad del relleno mtodo. C# VB

Dim custDataSet Como DataSet = New DataSet () custAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey custAdapter.Fill (custDataSet, "Clientes" )

Manejo de mltiples conjuntos de resultados


Si el DataAdapter encuentra varios conjuntos de resultados devueltos desde el SelectCommand , crear varias tablas en el DataSet . En las tablas se le dar un nombre de base cero incremental de impago de la Tabla N , a partir de la tabla en lugar de "Table0". Si el nombre de la tabla se pasa como un argumento a laFillSchema mtodo, las tablas se le dar un nombre incremental de base cero de TableName N , a partir de TableName en lugar de "TableName0".

Nota Si el FillSchema mtodo de la OleDbDataAdapter objeto es llamado por un comando que devuelve varios conjuntos de resultados, slo la informacin de esquema del primer conjunto de resultados se devuelve. Al devolver informacin de esquema de varios conjuntos de resultados utilizando losOleDbDataAdapter , se recomienda que especifique un MissingSchemaAction de AddWithKey y obtener la informacin de esquema cuando se llama alrelleno mtodo.

Configuracin de DataTable y DataColumn Asignaciones


. NET Framework 2.0
Otras versiones 3 de cada 12 ha calificado este til - Valorar este tema A DataAdapter contiene una coleccin de cero o ms DataTableMapping objetos en su TableMappings propiedad. A DataTableMapping proporciona una asignacin principal entre los datos devueltos por una consulta en un origen de datos y un DataTable . El DataTableMapping nombre puede ser pasado en lugar delDataTable nombre al relleno mtodo de los DataAdapter . En el ejemplo siguiente, se crea un DataTableMapping denominado AuthorsMapping para el Autoresmesa. C# VB

workAdapter.TableMappings.Add ( "AuthorsMapping" , "Autores" )


A DataTableMapping permite utilizar nombres de columna en un DataTable que son diferentes de los de la base de datos. Los DataAdapter utiliza la asignacin para que coincida con las columnas de la tabla cuando se actualiza. Si no se especifica un TableName o un DataTableMapping nombre al llamar al relleno o Actualizacin de mtodo de los DataAdapter , el DataAdapter busca unDataTableMapping denominado "Table". Si eso DataTableMapping no existe, el TableName de la DataTable es "Table". Se puede especificar un valor predeterminado DataTableMapping mediante la creacin de un DataTableMapping con el nombre de "tablas". En el ejemplo de cdigo siguiente se crea un DataTableMapping (del System.Data.Common espacio de nombres) y la convierte en la asignacin predeterminada de los especificados DataAdapter por nombre "Tabla". A continuacin, se asignan las columnas de la primera tabla del resultado de la consulta (el Los clientes de la tabla Northwind base de datos) a un conjunto de ms fcil utilizacin nombres en la Customers de Northwind tabla en el DataSet . Para las columnas que no estn asignados, el nombre de la columna de la fuente de datos se utiliza. C# VB

Dim mapeo Como DataTableMapping = _ adapter.TableMappings.Add ( "Tabla" , "NorthwindCustomers" ) mapping.ColumnMappings.Add ( "CompanyName" , "Compaa" ) mapping.ColumnMappings.Add ( "ContactName" , "Contact" ) mapping.ColumnMappings.Add ( "CdigoPostal" , "Sabas que?" ) adapter.Fill (custDS)
En situaciones ms avanzadas, puede decidir que desea que los mismos DataAdapter para apoyar a cargar tablas diferentes con asignaciones diferentes. Para ello, basta con aadir ms DataTableMapping objetos. Cuando el relleno mtodo se le pasa una instancia de un DataSet y un DataTableMapping nombre, si una aplicacin con ese nombre se utiliza, de lo contrario, una DataTable con ese nombre se utiliza. Los ejemplos siguientes se crea un DataTableMapping con el nombre de los clientes y un DataTable nombre de BizTalkSchema . El ejemplo a continuacin, asigna las filas devueltas por la sentencia SELECT para la BizTalkSchema DataTable . C# VB

Dim mapeo Como ITableMapping = _ adapter.TableMappings.Add ( "Clientes" , "BizTalkSchema" )

mapping.ColumnMappings.Add mapping.ColumnMappings.Add mapping.ColumnMappings.Add mapping.ColumnMappings.Add

( ( ( (

"IdCliente" , "ClientID" ) "CompanyName" , "ClientName" ) "ContactName" , "Contact" ) "CdigoPostal" , "ZIP" )

adapter.Fill (custDS, "Clientes" )

Nota Si un nombre de columna de origen no se suministra para una asignacin de columna o un nombre de tabla de origen no se suministra para una asignacin de tablas, nombres por defecto ser generado automticamente. Si no se suministra columna de origen para una asignacin de columna, la asignacin de columna se le asigna un nombre predeterminado incremental de SourceColumn n, comenzando con SourceColumn1 . Si no hay ningn nombre de tabla de origen se suministra para una asignacin de tabla, el mapeo de la tabla se le asigna un nombre predeterminado incremental de SourceTable N , a partir de SourceTable1. Nota Se recomienda evitar la convencin de nomenclatura de SourceColumn N para una asignacin de columna, o SourceTable N para una asignacin de tablas, porque el nombre de suministrarle puede entrar en conflicto con un nombre de correlacin por omisin existente en la columna ColumnMappingCollection o nombre de mapeo de la tabla en la DataTableMappingCollection . Si el nombre proporcionado ya existe, una excepcin ser lanzada.

Manejo de mltiples conjuntos de resultados


Si SelectCommand devuelve varias tablas, relleno genera automticamente los nombres de tablas con valores incrementales para las tablas en el DataSet , empezando por el nombre de tabla especificado y continuando en forma TableName N , a partir de TableName1 . Puede utilizar asignaciones de tabla para asignar el nombre de la tabla generada automticamente a un nombre que desee especificado para la tabla en el DataSet . Por ejemplo, para un SelectCommand que devuelve dos tablas Clientes y Pedidos , emita la siguiente llamada al relleno .

adapter.Fill (CustomersDataSet, "Clientes")


Dos tablas se crean en el conjunto de datos : Los clientes y Customers1 . Puede utilizar asignaciones de tabla para asegurarse de que la segunda tabla se denominaOrders en lugar de Customers1 . Para ello, asigne la tabla de origen de Customers1 a los DataSet tabla Orders , como se muestra en el siguiente ejemplo.

adapter.TableMappings.Add ("Customers1", "Pedidos") adapter.Fill (CustomersDataSet, "Clientes")

Trabajar con DataReaders


. NET Framework 2.0
2 de 7 puntuado este til - Valorar este tema

Usted puede utilizar el ADO.NET DataReader para recuperar una de slo lectura, slo hacia delante flujo de datos de una base de datos. Los resultados se devuelven como se ejecuta la consulta, y se almacenan en el bfer de red en el cliente hasta que usted los solicite mediante el Lee mtodo del DataReader . Usando elDataReader puede aumentar el rendimiento de aplicaciones, tanto por la recuperacin de datos, tan pronto como est disponible, y (por defecto) que almacena slo una fila a la vez en la memoria, lo que reduce la sobrecarga del sistema. .. Cada proveedor de datos incluido con el NET Framework tiene un DataReader objeto:. NET Framework para OLE DB incluye un OleDbDataReader objeto, el NET Framework para SQL Server incluye un archivo. SqlDataReader , el objeto NET Framework. Provider para ODBC incluye un OdbcDataReader objeto, y el. NET Framework para Oracle incluye un OracleDataReader objeto.

Recuperar datos mediante DataReader


. NET Framework 2.0
Otras versiones 13 de los 48 ha calificado este til - Valorar este tema Recuperacin de datos mediante un DataReader implica la creacin de una instancia del smbolo del objeto y luego crear un DataReader al llamarCommand.ExecuteReader para recuperar filas de un origen de datos. El siguiente ejemplo ilustra el uso de un DataReader donde lector representa un DataReader vlido y comando representa un objeto Command vlido.

Command.ExecuteReader reader = ();


Se utiliza el Lee mtodo de la DataReader objeto de obtener una fila de los resultados de la consulta. Se puede acceder a cada columna de la fila devuelta al pasar el nombre o referencia ordinal de la columna a la DataReader . Sin embargo, para un mejor rendimiento, el DataReader proporciona una serie de mtodos que le permiten acceder a los valores de las columnas de los tipos de datos nativos ( GetDateTime , GetDouble , GetGuid , GetInt32 , y as sucesivamente). Para obtener una lista de los mtodos de acceso con tipo de datos especficos del proveedor DataReaders , consulte OleDbDataReader y SqlDataReader . Utilizando los mtodos de acceso con tipo, suponiendo que el tipo de datos subyacente se conoce, reduce la cantidad de conversin de tipo requerido cuando se recupera el valor de la columna.

Nota El lanzamiento de Windows Server 2003 del Marco. NET incluye una propiedad adicional para el DataReader , HasRows , que le permite determinar si elDataReader ha devuelto ningn resultado antes de la lectura de la misma.
En el ejemplo de cdigo siguiente se repite a travs de un DataReader objeto y devuelve dos columnas de cada fila. C# VB

Private Sub HasRows ( ByVal conexin Como SqlConnection) Uso de conexin Dim comando como SqlCommand = New SqlCommand (_ "SELECT CategoryID, CategoryName FROM Categoras:" , _ conexin) Connection.Open ()

Dim lector como SqlDataReader = Command.ExecuteReader () Si reader.HasRows Luego hacer bien reader.Read () Console.WriteLine (reader.GetInt32 (0) _ Y vbTab y reader.GetString (1)) Loop dems Console.WriteLine ( "No hay registros encontrados." ) End Si reader.Close () Fin Usando End Sub
El DataReader proporciona una secuencia sin bfer de datos que permite la lgica de procedimiento para procesar eficientemente los resultados de un origen de datos de forma secuencial. El DataReader es una buena opcin al recuperar grandes cantidades de datos, ya que los datos no se almacenan en cach en la memoria.

Cerrar el DataReader
Siempre debe llamar al Primer mtodo cuando haya terminado de utilizar el DataReader objeto. Si el comando contiene los parmetros de salida o valores de retorno, que no estar disponible hasta el DataReader se cierre. Tenga en cuenta que mientras que un DataReader abierto, la conexin se utiliza exclusivamente dicho DataReader . No se puede ejecutar cualquier comando de la conexin , incluyendo la creacin de otro DataReader , hasta que el original DataReader se cierre.

Nota No llame a Close o Dispose en una conexin , un DataReader o cualquier otro objeto administrado en Finalizar mtodo de su clase. En un finalizador, slo liberar los recursos no administrados que su clase posea directamente. Si la clase no es propietaria de los recursos no administrados, no incluyen un Finalizarmtodo en la definicin de clase. Para obtener ms informacin, vea Recoleccin de Basura .

Recuperacin de varios conjuntos de resultados utilizando NextResult


Si varios conjuntos de resultados se devuelven, el DataReader proporciona el NextResult mtodo para iterar a travs de los conjuntos de resultados en orden. El siguiente ejemplo muestra el SqlDataReader procesamiento de los resultados de dos sentencias SELECT utilizando el ExecuteReader mtodo. C# VB

= New SqlCommand (_ "SELECT CategoryID, CategoryName FROM Categoras," & _ "SELECT EmployeeID, LastName FROM Empleados" , conexin) Connection.Open () Dim lector como SqlDataReader = Command.ExecuteReader () Es bien reader.HasRows Console.WriteLine (vbTab y reader.GetName (0) _ Y vbTab y reader.GetName (1))

Es bien reader.Read () Console.WriteLine (vbTab y reader.GetInt32 (0) _ Y vbTab y reader.GetString (1)) Bucle reader.NextResult () Loop End Uso End Sub

Obtencin de informacin de esquema desde el DataReader


Mientras que un DataReader abierto, puede recuperar informacin del esquema acerca del conjunto de resultados actual con el GetSchemaTable mtodo.GetSchemaTable devuelve un DataTable objeto poblada de filas y columnas que contienen la informacin de esquema para el conjunto de resultados actual. LaDataTable contiene una fila para cada columna del conjunto de resultados. Cada columna de los mapas de filas de esquema de mesa a una propiedad de la columna devuelto en el conjunto de resultados, donde el ColumnName es el nombre de la propiedad y el valor de la columna es el valor de la propiedad. En el ejemplo de cdigo siguiente se escribe la informacin de esquema para el DataReader . C# VB

Private Sub GetSchemaInfo ( ByVal conexin Como SqlConnection) Con conexin Dim comando como SqlCommand = New SqlCommand (_ "SELECT CategoryID, CategoryName FROM Categoras:" , _ conexin) Connection.Open () Dim lector como SqlDataReader = Command.ExecuteReader () Dim schemaTable Como DataTable = reader.GetSchemaTable () Dim fila como DataRow Dim columna como DataColumn Para cada fila En schemaTable.Rows Para cada columna En schemaTable.Columns Console.WriteLine ( cadena . Format ( "{0} = {1}" , _ column.ColumnName, fila (columna))) Prximo Console.WriteLine () Prximo reader.Close () Fin Usando End Sub

Trabajar con los captulos de OLE DB


Conjuntos de filas jerrquicos, o captulos (OLE DB tipo DBTYPE_HCHAPTER , ADO tipo adChapter ) se pueden recuperar con la OleDbDataReader . Cuando una consulta que incluye un captulo se devuelve como un DataReader , el captulo se devuelve como una columna en la que DataReader y se expone como unDataReader objeto.

La ADO.NET DataSet tambin puede ser usado para representar conjuntos de filas jerrquicos utilizando relaciones padre-hijo entre las tablas. Para obtener ms informacin, vea Utilizar DataSets en ADO.NET . En el ejemplo de cdigo siguiente se utiliza el proveedor MSDataShape para generar una columna captulo de pedidos de cada cliente en una lista de clientes. C# VB

Con conexin Como OleDbConnection = New OleDbConnection (_ "Provider = MSDataShape; Data Provider = SQLOLEDB;" & _ "Data Source = localhost; Integrated Security = SSPI; Initial Catalog = Northwind" ) Dim custCMD Como OleDbCommand = New OleDbCommand (_ "SHAPE {SELECT IdCliente, NombreCompaa FROM Clientes}" & _ "APPEND ({SELECT CustomerID, OrderID FROM Pedidos} AS CustomerOrders" & _ "se refieren CustomerID a CustomerID)" , conexin) Connection.Open () Dim custReader Como OleDbDataReader custCMD.ExecuteReader = () Dim orderReader Como OleDbDataReader Es bien custReader.Read () Console.WriteLine ( "Los pedidos de" y custReader.GetString (1)) 'custReader.GetString (1) = CompanyName orderReader = custReader.GetValue (2) 'CustReader.GetValue (2) = rdenes captulo como DataReader Es bien orderReader.Read () Console.WriteLine (vbTab y orderReader.GetInt32 (1)) 'OrderReader.GetInt32 (1) = OrderID Loop orderReader.Close () Loop 'Asegrese de cerrar siempre los lectores y las conexiones. custReader.Close () Fin Usando

Resultados regresan con Oracle REF CURSOR


El. NET Framework para Oracle admite el uso de Oracle REF CURSOR para devolver un resultado de consulta. Un REF CURSOR de Oracle se devuelve como unOracleDataReader . Es posible recuperar un OracleDataReader objeto, que representa un REF CURSOR de Oracle utilizando el ExecuteReader mtodo, y tambin se puede especificar un OracleCommand que devuelve uno o ms cursores REF de Oracle como la SelectCommand durante OracleDataAdapter utilizan para rellenar un DataSet . Para acceder a un REF CURSOR de regresar de una fuente de datos de Oracle, cree una OracleCommand para la consulta y agregar un parmetro de salida que hace referencia al REF CURSOR en el Parmetros de la entrega de su OracleCommand . El nombre del parmetro debe coincidir con el nombre del parmetro REF CURSOR en su consulta. Establecer el tipo del parmetro que OracleType.Cursor . El ExecuteReader mtodo de su OracleCommand devolver unOracleDataReader para el REF CURSOR. Si su OracleCommand devuelve varios cursores REF aadir varios parmetros de salida. Puede acceder a los diferentes tipos REF CURSOR llamando alOracleCommand.ExecuteReader mtodo. La llamada a ExecuteReader devuelve un OracleDataReader referencia a la REF CURSOR primero. A continuacin, puede llamar a la OracleDataReader.NextResult mtodo para acceder a cursores posteriores REF. Aunque los parmetros de su OracleCommand.Parameterscoleccin coinciden con los parmetros REF CURSOR de salida por su nombre, el OracleDataReader accede a ellos en el orden en que se agregaron a laParmetros de coleccin.

Por ejemplo, considere el siguiente paquete de Oracle y cuerpo del paquete.

CREATE OR REPLACE CURSPKG PAQUETE COMO T_CURSOR TIPO ES REF CURSOR; OPEN_TWO_CURSORS procedimiento (EMPCURSOR OUT T_CURSOR, DEPTCURSOR OUT T_CURSOR); FIN CURSPKG; CREATE OR REPLACE CURSPKG PAQUETE DE CUERPO COMO OPEN_TWO_CURSORS procedimiento (EMPCURSOR OUT T_CURSOR, DEPTCURSOR T_CURSOR OUT) ES COMENZAR EMPCURSOR ABIERTO PARA SELECT * FROM DEMO.EMPLOYEE; DEPTCURSOR ABIERTO PARA SELECT * FROM DEMO.DEPARTMENT; OPEN_TWO_CURSORS fin; FIN CURSPKG;
El siguiente cdigo crea un objeto OracleCommand que devuelve los cursores REF desde la anterior paquete de Oracle mediante la adicin de dos parmetros de tipo OracleType.Cursor a la Parmetros coleccin. C# VB

Dim cursCmd Como OracleCommand = New OracleCommand ( "CURSPKG.OPEN_TWO_CURSORS" , oraConn) cursCmd.Parameters.Add ( "EMPCURSOR" , OracleType.Cursor). Direction = ParameterDirection.Output cursCmd.Parameters.Add ( "DEPTCURSOR" , OracleType.Cursor). Direction = ParameterDirection.Output
El cdigo siguiente devuelve los resultados del comando anterior utilizando los lee y NextResult mtodos de la OracleDataReader . Los parmetros REF CURSOR se devuelven en orden. C# VB

oraConn.Open () Dim cursCmd Como OracleCommand = New OracleCommand ( "CURSPKG.OPEN_TWO_CURSORS" , oraConn) cursCmd.CommandType = CommandType.StoredProcedure cursCmd.Parameters.Add ( "EMPCURSOR" , OracleType.Cursor). Direction = ParameterDirection.Output cursCmd.Parameters.Add ( "DEPTCURSOR" , OracleType.Cursor). Direction = ParameterDirection.Output Dim lector Como OracleDataReader cursCmd.ExecuteReader = () Console.WriteLine (vbCrLf & "Emp ID" y vbTab y "Nombre" ) Es bien reader.Read () Console.WriteLine ( "{0}" y vbTab y "{1}, {2}" , reader.GetOracleNumber (0), reader.GetString (1), reader.GetString (2)) Loop reader.NextResult () Console.WriteLine (vbCrLf & "Identificacin Dept" y vbTab y "Nombre" ) Es bien reader.Read () Console.WriteLine ( "{0}" y vbTab y "{1}" , reader.GetOracleNumber (0), reader.GetString (1)) Loop 'Asegrese de cerrar siempre los lectores y las conexiones. reader.Close () oraConn.Close ()
En el ejemplo siguiente, se utiliza el comando anterior para rellenar un DataSet con los resultados del paquete de Oracle.

Nota Para evitar una excepcin OverflowException , le recomendamos que tambin se ocupan de las conversiones del tipo NUMBER de Oracle a un archivo. NET Framework antes de almacenar el valor en una DataRow . Se puede utilizar el FillError evento para determinar si un OverflowException se ha producido. Para obtener ms informacin sobre la FillError evento, consulte Trabajar con eventos DataAdapter .
C# VB

Dim ds As DataSet = New DataSet () Dim adaptador Como OracleDataAdapter = Nuevos OracleDataAdapter (cursCmd) adapter.TableMappings.Add ( "Tabla" , "Empleados" ) adapter.TableMappings.Add ( "Tabla1" , "Departamentos" ) adapter.Fill (ds)

Obtener valores BLOB de una base de datos


. NET Framework 2.0
Otras versiones 7 de cada 12 ha calificado este til - Valorar este tema Por defecto, el DataReader carga los datos entrantes como un rengln tan pronto como una fila completa de datos disponibles. Objetos binarios grandes (BLOB) requieren un tratamiento diferente, sin embargo, ya que pueden contener gigabytes de datos que no pueden ser incluidos en una sola fila. ElCommand.ExecuteReader mtodo tiene una sobrecarga que se llevar a CommandBehavior argumento para modificar el comportamiento predeterminado delDataReader . Puede pasar SequentialAccess al ExecuteReader mtodo para modificar el comportamiento predeterminado del DataReader para que en lugar de cargar las filas de datos, carga de datos secuencialmente a medida que se recibe. Esto es ideal para la carga BLOB u otras estructuras de datos grandes. Tenga en cuenta que este comportamiento puede depender de su origen de datos. Por ejemplo, volviendo un BLOB de Microsoft Access cargar el BLOB completo est cargando en memoria, en lugar de secuencialmente a medida que se recibe. Al ajustar el DataReader para usar SequentialAccess , es importante tener en cuenta el orden en que se accede a los campos devueltos. El comportamiento predeterminado del DataReader , que carga una fila completa tan pronto como est disponible, le permite acceder a los campos devueltos en cualquier orden hasta la siguiente fila que se lee. Cuando se utiliza SequentialAccess sin embargo, debe tener acceso a los campos devueltos por el DataReader en orden. Por ejemplo, si la consulta devuelve tres columnas, el tercero de los cuales es un BLOB, debe devolver los valores de los campos primero y segundo antes de acceder a los datos BLOB en el tercer campo. Si usted accede al tercer campo antes de que los campos de primera o segunda, los valores de los campos primero y segundo ya no estn disponibles. Esto se debe a SequentialAccess ha modificado el DataReader para devolver los datos en secuencia y los datos no estn disponibles despus de la DataReader ha ledo ms all de ella. Cuando se accede a los datos en el campo BLOB, utilice los GetBytes o GetChars accesores mecanografiadas del DataReader , que llenan una matriz con los datos. Tambin puede utilizar GetString para datos de caracteres, sin embargo. para conservar los recursos del sistema puede que no desee cargar un valor BLOB entero en una variable de

cadena nica. En su lugar, puede especificar un tamao de bfer de datos especfico para ser devueltos, y un punto de partida para el primer byte o caracteres que se leen los datos devueltos. GetBytes y GetChars devuelve un largo valor, que representa el nmero de bytes o caracteres devueltos .Si pasa un array nulo a GetBytes o GetChars , el valor a largo devuelto ser el nmero total de bytes o caracteres en el BLOB. Si lo desea, puede especificar un ndice en la matriz como una posicin de partida para que los datos sean ledos.

Ejemplo
El ejemplo siguiente devuelve el ID de editor y el logotipo de la bares base de datos de ejemplo de Microsoft SQL Server 2000. El ID de editor ( pub_id ) es un campo de caracteres, y el logo es una imagen, que es un BLOB. Debido a que el logotipo de campo es un mapa de bits, el ejemplo devuelve los datos binarios mediante GetBytes . Observe que el ID de editor se accede por la fila actual de datos antes del logo, ya que los campos se debe acceder de forma secuencial. C# VB

"Se supone que la conexin es un objeto SqlConnection vlida. Dim comando como SqlCommand = New SqlCommand (_ "SELECT pub_id, logotipo de pub_info" , conexin) 'Escribe el BLOB en un archivo (*. Bmp). Dim stream Como FileStream 'Streams los datos binarios en el objeto FileStream. Dim escritor como BinaryWriter 'El tamao del bfer de BLOB. Dim bufferSize Como Integer = 100 'El byte BLOB ( ) de amortiguacin para ser llenado por GetBytes. Dim outByte (bufferSize - 1) Como Byte '. Los bytes devueltos por GetBytes Dim retval Como Larga ". La posicin inicial en la salida BLOB Dim startIndex como a largo = 0 "El ID de editor a utilizar en el nombre del archivo. Dim pubid Como cadena = "" 'Abre la conexin y leer datos en el DataReader. Connection.Open () Dim lector como SqlDataReader = Command.ExecuteReader (CommandBehavior.SequentialAccess) Es bien reader.Read () 'Obtiene el ID de editor, que debe ocurrir antes de recibir la insignia. pubid = reader.GetString (0) 'Crear un archivo para mantener la salida. corriente = New FileStream (_ "logo" y pubid y ". bmp" , FileMode.OpenOrCreate, FileAccess.Write) escritor = New BinaryWriter (stream) "Cambiar el byte de partida para un nuevo BLOB. startIndex = 0 'Leer bytes en outByte () y conservar el nmero de bytes devueltos. retval = reader.GetBytes (1, startIndex, outByte, 0, bufferSize) "Continuar mientras que hay bytes ms all del tamao de la memoria intermedia. hacer Mientras retval bufferSize = writer.Write (outByte) writer.Flush ()

'Vuelva a iniciar ndice al final del bfer pasado y llenar buffer. startIndex + = bufferSize retval = reader.GetBytes (1, startIndex, outByte, 0, bufferSize) Bucle 'Escribe el buffer restante. writer.Write (outByte, 0, retval - 1) writer.Flush () 'Cerrar el archivo de salida. writer.Close () Stream.Close () Bucle 'Cerrar el lector y la conexin. reader.Close () Connection.close ()

Obtencin de informacin de esquema de una base de datos


. NET Framework 2.0
Otras versiones 1 de 5 puntuado este til - Valorar este tema Obtencin de informacin de esquema de una base de datos se lleva a cabo con el proceso de descubrimiento de esquema. Esquema de descubrimiento permite a las aplicaciones solicitar que los proveedores administrados encontrar y devolver informacin sobre el esquema de la base de datos, tambin conocidos como metadatos , de una base de datos dada. Diferentes elementos del esquema de base de datos como tablas, columnas y procedimientos almacenados-estn expuestos a travs de colecciones de esquemas. Cada coleccin de esquemas contiene una variedad de informacin de esquema especfico del proveedor que se utiliza. Cada uno de Marco. NET gestionado proveedores de implementar el GetSchema mtodo en la conexin de la clase, y la informacin del esquema que se devuelve desde el GetSchema mtodo se presenta en forma de un DataTable . El GetSchema mtodo es un mtodo sobrecargado que proporciona parmetros opcionales para especificar la coleccin de esquemas para volver, y restringiendo la cantidad de informacin que se devuelve. Adems de la GetSchema mtodo, el. NET Framework para OLE DB tambin expone informacin de esquema mediante el GetOleDbSchemaTable mtodo de laOleDbConnection objeto. GetOleDbSchemaTable toma como argumentos un OleDbSchemaGuid que identifica la informacin de esquema para volver, y una serie de restricciones a los columnas devueltas. GetOleDbSchemaTable devuelve una DataTable rellena con la informacin de esquema solicitada.

Trabajando con los mtodos GetSchema


. NET Framework 2.0
Otras versiones

6 de cada 14 ha calificado este til - Valorar este tema La conexin de las clases en cada una de las Framework. NET gestionado proveedores de implementar un GetSchema mtodo que se utiliza para recuperar informacin del esquema de la base de datos que est conectado en ese momento, y la informacin de esquema devuelta desde el GetSchema mtodo se presenta en forma de un DataTable . El GetSchema mtodo es un mtodo sobrecargado que proporciona parmetros opcionales para especificar la coleccin de esquemas para volver, y restringiendo la cantidad de informacin que se devuelve.

Especificacin de las colecciones de esquemas


El primer parmetro opcional de la GetSchema mtodo es el nombre de la coleccin que se especifica como una cadena .. Hay dos tipos de colecciones de esquemas: colecciones comunes de esquema que son comunes a todos los proveedores, y colecciones especficas de esquema que son especficas de cada proveedor. Puede consultar a. NET Framework proveedor administrado para determinar la lista de colecciones de esquemas soportados llamando al GetSchema mtodo sin argumentos, o con el nombre de coleccin de esquemas "MetaDataCollections". Esto devolver un DataTable con una lista de las colecciones de esquemas soportados, el nmero de restricciones que cada soporte, y el nmero de piezas de identificadores que utilizan. Para obtener ms informacin acerca de las colecciones de esquemas comunes, consulte Comprensin de los colecciones de esquemas comunes , porque las colecciones especficas del proveedor, consulte Comprensin de los colecciones de esquemas especficas del proveedor .

Recuperacin de colecciones de esquemas Ejemplo


Los ejemplos siguientes muestran cmo utilizar el GetSchema mtodo de la NET Framework para SQL Server. SqlConnection clase para recuperar informacin del esquema de todas las tablas contenidas en la AdventureWorks base de datos de ejemplo: [Visual Basic]

Imports System.Data.SqlClient Mdulo Module1 Sub Main () ConnectionString Dim As String = GetConnectionString () Uso de una conexin SqlConnection Como Nuevo (connectionString) 'Conectar a la base de datos y luego recuperar la informacin del esquema. Connection.Open () Tabla As DataTable = connection.GetSchema ("Restricciones") "Mostrar el contenido de la tabla. DisplayData (tabla) Console.WriteLine ("Presione cualquier tecla para continuar.") Console.ReadKey ()

End Using End Sub GetConnectionString Private Function () As String 'Para evitar almacenar la cadena de conexin en el cdigo, 'Se puede recuperar desde un archivo de configuracin. Return "Data Source = (local); Database = AdventureWorks;" _ & "Integrated Security = SSPI"; End Function Private Sub displayData (tabla ByVal como DataTable) Para cada fila como DataRow En table.Rows For Each col Como DataColumn En table.Columns Console.WriteLine ("{0} = {1}", col.ColumnName, fila (col)) Prximo Console.WriteLine ("============================") Prximo End Sub End Module
[C #]

using System; using System.Data; using System.Data.SqlClient; clase del Programa de { static void main (String [] args) { string connectionString = GetConnectionString (); cantar (conexin SqlConnection = new SqlConnection (connectionString)) { / / Conectar con la base de datos y luego recuperar la informacin del esquema. Connection.Open (); DataTable tabla = connection.GetSchema ("tablas"); / / Mostrar el contenido de la tabla. DisplayData (tabla); Console.WriteLine ("Presione cualquier tecla para continuar."); Console.ReadKey (); } } GetConnectionString privado static string () { / / Para evitar guardar la cadena de conexin en el cdigo, / / Se puede recuperar de un archivo de configuracin. return "Data Source = (local); Database = AdventureWorks;" + "Integrated Security = SSPI;" } private static void displayData (System.Data.DataTable tabla) { foreach (fila System.Data.DataRow en table.Rows) { foreach (System.Data.DataColumn col en table.Columns) { Console.WriteLine ("{0} = {1}", col.ColumnName, row [col]); } Console.WriteLine ("============================"); }

} }

Especificacin de los valores de restriccin


El segundo parmetro opcional de la GetSchema mtodo son las restricciones que se utilizan para limitar la cantidad de informacin de esquema devuelta, y se pasa a la GetSchema mtodo como una matriz de cadenas. La posicin en la matriz determina los valores que se pueden pasar, y esto es equivalente a la cantidad de restriccin. Por ejemplo, la siguiente tabla se describen las restricciones soportadas por la coleccin "Tables" utilizando el esquema NET Framework para SQL Server.:

Nombre de la restriccin

Restriccin por defecto

Restriccin Nmero

Catlogo Propietario Mesa TableType

TABLE_CATALOG TABLE_SCHEMA TABLE_NAME TABLE_TYPE

1 2 3 4

Para utilizar una de las restricciones de la coleccin "Tables" esquema, basta con crear una matriz de cadenas con cuatro elementos, a continuacin, colocar un valor en el elemento que coincida con el nmero de restricciones. Por ejemplo, para restringir las tablas devueltas por el GetSchema mtodo slo a aquellas tablas que pertenecen a la "dbo" papel, ajuste el segundo elemento de la matriz a "dbo" antes de pasarla a la GetSchema mtodo.

Nota

Las colecciones restricciones para SqlClient y OracleClient tener un adicional ParameterName columna. La columna predeterminado restriccin todava est all para compatibilidad hacia atrs, pero se ignora actualmente. Las consultas parametrizadas en lugar de sustitucin de cadenas se debe utilizar para minimizar el riesgo de un ataque de inyeccin SQL al especificar valores de restriccin.
Nota

El nmero de elementos de la matriz debe ser menor o igual que el nmero de restricciones soportados en la coleccin de esquemas especificada ms unaArgumentException ser lanzada. No puede ser menor que el nmero mximo de restricciones. Las restricciones que faltan se supone que es nulo (sin restricciones).
Puede consultar un marco. NET proveedor administrado para determinar la lista de restricciones soportadas por llamar a la GetSchema mtodo con el nombre de la coleccin de esquemas restricciones, que es "Restricciones". Esto devolver un objeto DataTable con una lista de los nombres de las colecciones, los nombres de restriccin, los valores por defecto de restriccin, y los nmeros de restriccin.

Restriccin de colecciones de esquemas Ejemplo


Los ejemplos siguientes muestran cmo utilizar el GetSchema mtodo de. NET Framework para SQL Server SqlConnection clase para recuperar informacin del esquema de todas las tablas contenidas en la AdventureWorks base de datos de muestra y para restringir la informacin devuelta a slo las tablas que son propiedad de "dbo" papel: [Visual Basic]

Imports System.Data.SqlClient Mdulo Module1 Sub Main () ConnectionString Dim As String = GetConnectionString () Restricciones Dim (3) As String Uso de una conexin SqlConnection Como Nuevo (connectionString) 'Conectar a la base de datos y recuperar el 'Esquema de informacin. Connection.Open () restricciones (1) = "dbo" Tabla As DataTable = connection.GetSchema ("Tablas", _ restricciones) "Mostrar el contenido de la tabla. DisplayData (tabla) Console.WriteLine ("Presione cualquier tecla para continuar.") Console.ReadKey () End Using End Sub GetConnectionString Private Function () As String 'Para evitar almacenar la cadena de conexin en el cdigo, 'Se puede recuperar desde un archivo de configuracin. Return "Data Source = (local); Database = AdventureWorks;" _ & "Integrated Security = SSPI"; End Function Private Sub displayData (tabla ByVal como DataTable) Para cada fila como DataRow En table.Rows For Each col Como DataColumn En table.Columns Console.WriteLine ("{0} = {1}", col.ColumnName, fila (col)) Prximo Console.WriteLine ("============================") Prximo End Sub End Module
[C #]

using System; using System.Data; using System.Data.SqlClient; clase del Programa de { static void Main () { string connectionString = GetConnectionString (); using (SqlConnection = conexin new SqlConnection (connectionString)) { / / Conectar con la base de datos y, a continuacin, recuperar el / / Schema informacin. Connection.Open (); string [] = new String restricciones [4]; restricciones [1] = "dbo"; DataTable tabla = connection.GetSchema ("Tablas", restricciones); / / Mostrar el contenido de la tabla. DisplayData (tabla);

Console.WriteLine ("Presione cualquier tecla para continuar."); Console.ReadKey (); } } GetConnectionString privado static string () { / / Para evitar guardar la cadena de conexin en el cdigo, / / Se puede recuperar de un archivo de configuracin. return "Data Source = (local); Database = AdventureWorks;" + "Integrated Security = SSPI;" } private static void displayData (System.Data.DataTable tabla) { foreach (fila System.Data.DataRow en table.Rows) { foreach (System.Data.DataColumn col en table.Columns) { Console.WriteLine ("{0} = {1}", col.ColumnName, row [col]); } Console.WriteLine ("============================"); } } }

Comprender las colecciones de esquemas comunes


. NET Framework 2.0
Otras versiones 3 de cada 4 ha calificado este til - Valorar este tema Las colecciones de esquemas comunes son las colecciones de esquemas que son ejecutados por cada uno de los proveedores de Marco. NET. Puede consultar a. NET Framework proveedor administrado para determinar la lista de colecciones de esquemas soportados llamando al GetSchema mtodo sin argumentos, o con el nombre de coleccin de esquemas "MetaDataCollections". Esto devolver un DataTable con una lista de las colecciones de esquemas soportados, el nmero de restricciones que cada soporte, y el nmero de piezas de identificadores que utilizan. Estas colecciones describir todas las columnas necesarias. Los proveedores son libres de aadir columnas adicionales si as lo desean. Por ejemplo, SqlClient y OracleClient ParameterName aadir a la coleccin de restricciones. Si un proveedor no puede determinar el valor de una columna obligatoria, devolver null. Para obtener ms informacin acerca del uso de los GetSchema mtodos, consulte Trabajo con los mtodos GetSchema .

MetaDataCollections

Esta coleccin de esquemas expone informacin acerca de todas las colecciones de esquemas admitidos por. NET Framework proveedor administrado que actualmente se utiliza para conectarse a la base de datos.

ColumnName CollectionName

DataType cadena

Descripcin El nombre de la coleccin para pasar a la GetSchema mtodo para devolver la coleccin. El nmero de restricciones que se pueden especificar para la coleccin. El nmero de piezas en el nombre del objeto compuesto identificador / base de datos. Por ejemplo, en SQL Server, esto sera 3 para las tablas 4 y para las columnas. En Oracle, sera 2 para tablas y 3 para las columnas.

NumberOfRestriction

int

NumberOfIdentifierParts

int

DataSourceInformation
Esta coleccin de esquemas expone informacin acerca de la fuente de datos que el proveedor. NET Framework administrada est conectarse.

ColumnName CompositeIdentifierSeparatorPatter n

DataType cadena

Descripcin La expresin regular para que coincida con los separadores compuestos en un identificador compuesto. Por ejemplo, "\." (Para SQL Server) o "@ |. \" (Para Oracle). Un identificador compuesto es normalmente lo que se utiliza para un nombre de objeto de la base de datos, por ejemplo: pubs.dbo.authors o pubs@dbo.authors. Para SQL Server, utilice la expresin regular "\.". Para OracleClient, utilice "@ |. \". Para utilizar el ODBC Catalog_name_seperator. Para DBLITERAL_CATALOG_SEPARATO R OLE DB o el uso DBLITERAL_SCHEMA_SEPARATOR. El nombre del producto que tiene acceso el proveedor, como "Oracle" o "SQLServer". Indica la versin del producto tiene acceso el proveedor, en el formato nativo de las

DataSourceProductName

cadena

DataSourceProductVersion

cadena

fuentes de datos y no en formato de Microsoft. En algunos casos DataSourceProductVersion y DataSourceProductVersionNormalized ser el mismo valor. En el caso de OLE DB y ODBC, stas sern siempre los mismos que se asignan a la misma llamada de funcin en la API nativo subyacente. DataSourceProductVersionNormali zed cadena Una versin normalizada para la fuente de datos, de manera que puede ser comparado conString.Compare () . El formato de este es coherente para todas las versiones del proveedor para evitar la versin 10 de la clasificacin entre versin 1 y versin 2. Por ejemplo, el proveedor de Oracle utiliza un formato de "nn.nn.nn.nn.nn" para su versin normalizada, lo que provoca una fuente de datos de Oracle 8i para volver "08.01.07.04.01".SQL Server utiliza la tpica Microsoft "nn.nn.nnnn" formato. En algunos casos, DataSourceProductVersion y DataSourceProductVersionNormalized ser el mismo valor. En el caso de OLE DB y ODBC stas sern siempre los mismos que se asignan a la misma llamada de funcin en la API nativo subyacente. Especifica la relacin entre las columnas en una clusula GROUP BY y las columnas no agregadas en la lista de seleccin. Una expresin regular que coincide con un identificador y tiene un valor de concordancia del identificador. Por ejemplo, "[A-Za-z0-9_ # $]". Indica si los identificadores no cotizados se consideran entre maysculas y minsculas o no. Especifica si las columnas de la clusula ORDER BY debe estar en la lista de

GroupByBehavior

GroupByBehavior

IdentifierPattern

cadena

IdentifierCase

IdentifierCase

OrderByColumnsInSelect

bool

seleccin. El valor true indica que estn obligados a estar en la lista de seleccin, el valor false indica que no estn obligados a estar en la lista de seleccin. ParameterMarkerFormat cadena Una cadena de formato que representa cmo dar formato a un parmetro. Si los parmetros con nombre son compatibles con la fuente de datos, el marcador por primera vez en esta cadena debe estar donde el nombre del parmetro debe ser formateado. Por ejemplo, si el origen de datos de los parmetros de espera para ser nombrados y precedido de un ':' esto sera ": {0}". Al formatear esto con un nombre de parmetro de "p1" la cadena resultante es ": p1". Si la fuente de datos que se espera parmetros prefijados con la "@", pero los nombres ya los incluye, esto sera '{0}', y el resultado de dar formato a un parmetro llamado "p1 @" simplemente sera "@ p1" . Para las fuentes de datos que no espera parmetros con nombre y esperar que el uso de la '?' carcter, la cadena de formato se pueden especificar como simplemente '?', que pasara por alto el nombre del parmetro. Para OLE DB volvemos '?'. Una expresin regular que coincide con un marcador de parmetros. Que tendr un valor de concordancia del nombre del parmetro, si los hay. Por ejemplo, si los parmetros con nombre son compatibles con una '@' leadin de caracteres que se incluirn en el nombre del parmetro, esto sera: "(@ [AZa-z0-9_ $ #] *)". Sin embargo, si los parmetros con nombre son compatibles con un ':' como el plomo en su carcter y no es parte del nombre del parmetro, esto sera: ": ([AZa-z0-9_ $ #] *)". Por supuesto, si el origen de datos no admite parmetros con nombre, esto sera simplemente "?". La longitud mxima de un nombre de

ParameterMarkerPattern

cadena

ParameterNameMaxLength

int

parmetro en caracteres. Visual Studio espera que si los nombres de parmetros son compatibles, el valor mnimo para la longitud mxima es de 30 caracteres. Si el origen de datos no admite parmetros con nombre, esta propiedad devuelve cero. ParameterNamePattern cadena Una expresin regular que coincide con los nombres de parmetros vlidos. Diferentes fuentes de datos tienen reglas diferentes en cuanto a los caracteres que se pueden utilizar para los nombres de los parmetros. Visual Studio espera que si los nombres de parmetros son compatibles, los caracteres "\ p {Lu} \ p {LL} \ p {Lt} \ p {LM} \ {p} Lo \ p {NL} \ p {Nd}" son el mnimo admitido conjunto de caracteres vlidos para los nombres de los parmetros. Una expresin regular que coincide con un identificador entre comillas y tiene un valor de concordancia del identificador de s mismo, sin las comillas. Por ejemplo, si el origen de datos utilizado comillas para identificar los identificadores entre comillas, esto sera: "(([^ \"] | \ "\") *) ". Indica si los identificadores entre comillas se tratan como entre maysculas y minsculas o no. Una expresin regular que coincide con el separador de instrucciones. Una expresin regular que coincide con una cadena literal y tiene un valor de concordancia de la misma literal. Por ejemplo, si la fuente de datos utilizada comillas simples para identificar las cadenas, esto sera: "('([^] |'') *')" ' Especifica los tipos de SQL de combinacin son compatibles con el origen de datos.

QuotedIdentifierPattern

cadena

QuotedIdentifierCase

IdentifierCase

StatementSeparatorPattern

cadena

StringLiteralPattern

cadena

SupportedJoinOperators

SupportedJoinOperators

DataTypes

Esta coleccin de esquemas expone informacin acerca de los tipos de datos que son compatibles con la base de datos que el proveedor de Marco. NET administrada est conectado.

ColumnName TypeName ProviderDbType

DataType cadena int

Descripcin El proveedor de datos especfico de nombre de tipo. La. Proveedor especfico de tipo de valor que se debe utilizar cuando se especifica el tipo de parmetro Por ejemplo, SqlDbType.Money o OracleType.Blob. La longitud de una columna no numrica o parmetro se refiere tanto a la mxima o la longitud definida para este tipo por el proveedor. Para los datos de caracteres, esto es la longitud mxima o se define en unidades, definido por la fuente de datos. Oracle tiene el concepto de especificar una longitud y luego especificar el tamao de almacenamiento real de algunos tipos de datos de caracteres. Esto slo define la longitud en unidades de Oracle. Para tipos de datos de fecha y hora, que es la longitud de la representacin de cadena (suponiendo que la precisin mxima permitida del segundo componente fraccional). Si el tipo de datos es numrico, ste es el lmite superior de la mxima precisin del tipo de datos. Cadena de formato que representa cmo agregar esta columna a una instruccin de definicin de datos, como CREATE TABLE. Cada elemento de la matriz CreateParameter debe estar representado por un "marcador de parmetro" en la cadena de formato. Por ejemplo, el tipo de datos DECIMAL de SQL necesita una precisin y una escala. En este caso, la cadena de formato sera "DECIMAL ({0}, {1})". Los parmetros de creacin que se deben especificar al crear una columna de este tipo de datos. Cada parmetro de creacin est en la lista de la cadena, separados por una coma en el orden en que se vayan a suministrar. Por ejemplo, el tipo de datos DECIMAL de SQL necesita una precisin y una escala. En este caso, los parmetros de creacin debe contener la cadena "precisin, la escala". En un comando de texto para crear una columna DECIMAL con una precisin de 10 y una escala de 2, el valor de la columna CreateFormat podra ser DECIMAL ({0}, {1}) "y la especificacin del tipo completo sera DECIMAL (10, 2). El nombre del tipo de marco. NET del tipo de datos. verdaderos valores-de este tipo de datos puede ser de incremento automtico. falsos valores de este tipo de datos no puede ser de incremento

ColumnSize

largo

CreateFormat

cadena

CreateParameters

cadena

DataType IsAutoincrementable

cadena bool

automtico. Tenga en cuenta que esto simplemente indica si una columna de este tipo de datos puede ser de incremento automtico, no que todas las columnas de este tipo son de incremento automtico. IsBestMatch bool true-El tipo de datos es la mejor coincidencia entre todos los tipos de datos del almacn de datos y el archivo. NET Framework tipo de datos indicado por el valor en la columna Tipo de datos. false: el tipo de datos no es la mejor opcin. Para cada conjunto de filas en las que el valor de la columna de tipo de datos es el mismo, la columna IsBestMatch se establece en true en una sola fila. true-El tipo de datos es un tipo de carcter y distingue entre maysculas y minsculas. false: el tipo de datos no es un tipo de carcter o no distingue entre maysculas y minsculas. verdaderos-columnas de este tipo de datos creado por el lenguaje de definicin de datos (DDL) sern de longitud fija. falsos columnas de este tipo de datos creado por el DDL ser de longitud variable. DBNull.Value-No se sabe si el proveedor asignar este campo con una columna de longitud fija o de longitud variable. true-El tipo de datos tiene una precisin y escala fijas. false: el tipo de datos no tiene una precisin y escala fijas. true-El tipo de datos contiene datos muy largos, la definicin de datos muy largos es especfica del proveedor. false: el tipo de datos no contiene datos muy largos. true-El tipo de datos es anulable. false: el tipo de datos no se puede anular. DBNull.Value-No se sabe si el tipo de datos es anulable. verdadero-El tipo de datos se puede utilizar en una clusula WHERE con cualquier operador, excepto el predicado LIKE. false: el tipo de datos no se puede utilizar en una clusula WHERE con cualquier operador, excepto el predicado LIKE. verdadero-El tipo de datos se puede utilizar con el predicado LIKE false: el tipo de datos no se puede utilizar con el predicado LIKE. true-El tipo de datos es sin signo. false: el tipo de datos est firmado. DBNull.Value no aplicable al tipo de datos. Si el indicador de tipo es un tipo numrico, es el nmero mximo de

IsCaseSensitive

bool

IsFixedLength

bool

IsFixedPrecisionScale

bool

IsLong

bool

IsNullable

bool

IsSearchable

bool

IsSearchableWithLike

bool

IsUnsigned

bool

MaximumScale

corto

dgitos a la derecha del punto decimal. De lo contrario, esto es DBNull.Value. MinimumScale corto Si el indicador de tipo es un tipo numrico, este es el nmero mnimo de dgitos a la derecha del punto decimal. De lo contrario, esto es DBNull.Value. verdadero - el tipo de datos es actualizada por la base de datos cada vez que se cambia la fila y el valor de la columna es diferente de todos los valores anteriores falso - el tipo de datos es nota actualizada la base de datos cada vez que se cambia la fila DBNull.Value - la base de datos no es compatible con este tipo de tipo de datos verdadero - el tipo de datos se puede expresar como un literal false - el tipo de datos no se puede expresar como un literal El prefijo aplicado a un literal dado. El sufijo aplicado a un literal dado. NativeDataType es una columna de OLE DB especfico para exponer el tipo de OLE DB de tipo de datos.

IsConcurrencyType

bool

IsLiteralsSupported

bool

LiteralPrefix LitteralSuffix NativeDataType

cadena cadena Cadena

Restricciones
Esta coleccin de esquemas expone informacin sobre las restricciones que son compatibles con el Marco. NET proveedor administrado que actualmente se utiliza para conectarse a la base de datos.

ColumnName CollectionName RestrictionName RestrictionDefault RestrictionNumber

DataType cadena cadena cadena int

Descripcin El nombre de la coleccin que estas restricciones se aplica a. El nombre de la restriccin en la coleccin. Ignorado. La ubicacin real de las restricciones colecciones que esta restriccin particular cae pulg

ReservedWords
Esta coleccin de esquemas expone informacin acerca de las palabras que estn reservadas por la base de datos del Marco. NET proveedor administrado que est conectado actualmente.

ColumnName

DataType

Descripcin

Palabra reservada

cadena

Proveedor de palabras reservadas especficas.

Comprender las colecciones de esquemas especficas del proveedor


. NET Framework 2.0

Otras versiones

4 de 9 puntuado este til - Valorar este tema


Las colecciones de esquemas especficas del proveedor son las colecciones de esquemas que son especficos para cada uno de los proveedores de Marco. NET.Puede consultar a. NET Framework proveedor administrado para determinar la lista de colecciones de esquemas soportados llamando al GetSchema mtodo sin argumentos, o con el nombre de coleccin de esquemas "MetaDataCollections". Esto devolver un DataTable con una lista de las colecciones de esquemas soportados, el nmero de restricciones que cada soporte, y el nmero de piezas de identificadores que utilizan. Para obtener ms informacin acerca del uso de los GetSchema mtodos, consulte Trabajo con los mtodos GetSchema . En las secciones siguientes se enumeran distintos controladores y proveedores, junto con las colecciones de esquemas especficos que apoyan.

Microsoft. NET Framework para SQL Server

Microsoft. NET Framework para SQL Server es compatible con las siguientes colecciones de esquemas especficas adems de las colecciones de esquemas comunes. Bases de datos ForeignKeys ndices IndexColumns Procedimientos ProcedureParameters Tablas Columnas Usuarios Vistas ViewColumns

UserDefinedTypes

Bases de datos
ColumnName DataType Descripcin

database_name Dbid create_date

Cadena Int16 DateTime

Nombre de la base de datos. Base de datos de ID. Fecha de creacin de la base de datos.

Las claves externas


ColumnName DataTyp e Descripcin

constraint_catalog constraint_schema constraint_name table_catalog esquema_tabla table_name constraint_type is_deferrable initially_deferred

Cadena Cadena Cadena Cadena Cadena Cadena Cadena Cadena Cadena

Catalogue la restriccin pertenece. Esquema que contiene la restriccin. Nombre. Restriccin Nombre de la tabla forma parte. Esquema que que contiene la tabla. Nombre de la tabla Tipo de restriccin. Slo "clave externa" est permitido. Especifica si la restriccin es aplazable. Devuelve NO. Especifica si la restriccin es inicialmente aplazable. Devuelve NO.

ndices
ColumnName DataType Descripcin

constraint_catalog constraint_schema constraint_name table_catalog esquema_tabla

Cadena Cadena Cadena Cadena Cadena

Catlogo ndice que pertenece. Esquema que contiene el ndice. Nombre del ndice. Nombre de la tabla del ndice est asociado. Esquema que contiene la tabla est asociada con el ndice.

table_name

Cadena

Nombre de la tabla.

IndexColumns
ColumnName DataType Descripcin

constraint_catalog constraint_schema constraint_name table_catalog esquema_tabla table_name column_name ORDINAL_POSITION KeyType

Cadena Cadena Cadena Cadena Cadena Cadena Cadena Int32 UInt16

Catlogo ndice que pertenece. Esquema que contiene el ndice. Nombre del ndice. Nombre de la tabla del ndice est asociado. Esquema que contiene la tabla est asociada con el ndice. Nombre de la tabla. Nombre de columna del ndice est asociado. Columna posicin ordinal. El tipo de objeto.

Procedimientos
Esta coleccin slo est disponible en SQL Server 2000 y versiones posteriores.

ColumnName

DataType

Descripcin

SPECIFIC_CATALOG specific_schema SPECIFIC_NAME routine_catalog routine_schema ROUTINE_NAME Routine_type

Cadena Cadena Cadena Cadena Cadena Cadena Cadena

Nombre especfico del catlogo. Nombre especfico del esquema. Nombre especfico del catlogo. Catalogue el procedimiento almacenado pertenece. Esquema que contiene el procedimiento almacenado. Nombre del procedimiento almacenado. Devuelve PROCEDURE para los procedimientos almacenados y FUNCTION para las funciones. Tiempo se cre el procedimiento. La ltima vez que el procedimiento se modific.

creado last_altered

DateTime DateTime

Parmetros de procedimiento
ColumnName DataTyp e Descripcin

SPECIFIC_CATALOG

Cadena

Nombre del catlogo de la operacin para la que se trata de un parmetro. Esquema que contiene el procedimiento para el que este parmetro es parte de. Nombre del procedimiento para el que este parmetro es una parte de. Posicin ordinal del parmetro a partir de 1. Para el valor de retorno de un procedimiento, esto es un 0. Devoluciones En caso de un parmetro de entrada, OUT si es un parmetro de salida e INOUT si es un parmetro de entrada / salida. Devuelve YES si indica que el resultado del procedimiento que es una funcin. De lo contrario, devuelve NO. Devuelve YES si se declara como localizador. De lo contrario, devuelve NO. Nombre del parmetro. NULL si se corresponde con el valor de retorno de una funcin. Proporcionado por el sistema de tipo de datos. Longitud mxima de caracteres para los tipos de datos binarios o de caracteres. De lo contrario, devuelve NULL. Longitud mxima, en bytes, de los tipos de datos binarios o de caracteres. De lo contrario, devuelve NULL. Nombre del catlogo de la intercalacin del parmetro. Si ninguno de los tipos de caracteres, devuelve NULL. Siempre devuelve NULL. Nombre de la intercalacin del parmetro. Si ninguno de los tipos de caracteres, devuelve

specific_schema

Cadena

SPECIFIC_NAME

Cadena

ORDINAL_POSITION

Int16

parameter_mode

Cadena

is_result

Cadena

as_locator

Cadena

PARAMETER_NAME

Cadena

data_type CHARACTER_MAXIMUM_LENGTH

Cadena Int32

CHARACTER_OCTET_LENGTH

Int32

COLLATION_CATALOG

Cadena

COLLATION_SCHEMA collation_name

Cadena Cadena

NULL. character_set_catalog Cadena Catlogo nombre del juego de caracteres del parmetro. Si ninguno de los tipos de caracteres, devuelve NULL. Siempre devuelve NULL. Nombre del conjunto de caracteres del parmetro. Si ninguno de los tipos de caracteres, devuelve NULL. La precisin de los datos numricos aproximados, de datos numricos exactos, datos enteros, o los datos monetarios. De lo contrario, devuelve NULL. Precisin base de datos numricos aproximados, de datos numricos exactos, datos enteros, o los datos monetarios. De lo contrario, devuelve NULL. Escala de los datos numricos aproximados, de datos numricos exactos, datos enteros, o los datos monetarios. De lo contrario, devuelve NULL. La precisin en fracciones de segundo si el tipo de parmetro es datetime o smalldatetime. De lo contrario, devuelve NULL. NULL. Reservado para uso futuro por SQL Server. NULL. Reservado para uso futuro por SQL Server.

CHARACTER_SET_SCHEMA character_set_name

Cadena Cadena

numeric_precision

Byte

numeric_precision_radix

Int16

numeric_scale

Int32

datetime_precision

Int16

interval_type interval_precision

Cadena Int16

Tablas
ColumnName DataType Descripcin

table_catalog esquema_tabla table_name table_type

Cadena Cadena Cadena Cadena

Catlogo de la mesa. Esquema que contiene la tabla. Nombre de tabla. Tipo de tabla. Puede ser vista o tabla BASE.

Columnas
ColumnName DataType Descripcin

table_catalog esquema_tabla table_name column_name ORDINAL_POSITION COLUMN_DEFAULT IS_NULLABLE

Cadena Cadena Cadena Cadena Int16 Cadena Cadena

Catlogo de la mesa. Esquema que contiene la tabla. Nombre de tabla. Nombre de columna. Columna nmero de identificacin. Valor por defecto de la columna Nulabilidad de la columna. Si esta columna permite NULL, esta columna devuelve S. De lo contrario, no se devuelve. Proporcionado por el sistema de tipo de datos. Longitud mxima, en caracteres, datos binarios, datos de caracteres o texto y datos de imagen. De lo contrario, se devuelve NULL. Longitud mxima, en bytes, de los datos binarios, datos de caracteres o texto y datos de imagen. De lo contrario, se devuelve NULL. La precisin de los datos numricos aproximados, de datos numricos exactos, datos enteros, o los datos monetarios. De lo contrario, se devuelve NULL. Precisin base de datos numricos aproximados, de datos numricos exactos, datos enteros, o los datos monetarios. De lo contrario, se devuelve NULL. Escala de los datos numricos aproximados, de datos numricos exactos, datos enteros, o los datos monetarios. De lo contrario, se devuelve NULL. Cdigo de subtipo para datetime de SQL-92 y los tipos de datos de intervalo. Para otros tipos de datos, se devuelve NULL. Devuelve maestro, lo que indica la base de datos en la que se encuentra el conjunto de caracteres, si la columna es de tipo de datos de caracteres o datos de texto. De lo contrario, se devuelve

data_type CHARACTER_MAXIMUM_LENGTH

Cadena Int32 - Sql8, Int16 - SQL7

CHARACTER_OCTET_LENGTH

Int32 - SQL8, Int16 - SQL7

numeric_precision

Byte sin signo

numeric_precision_radix

Int16

numeric_scale

Int32

datetime_precision

Int16

character_set_catalog

Cadena

NULL. CHARACTER_SET_SCHEMA character_set_name Cadena Cadena Siempre devuelve NULL. Devuelve el nombre nico para el conjunto de caracteres si esta columna es de tipo de datos de caracteres o datos de texto. De lo contrario, se devuelve NULL. Devuelve maestro, lo que indica la base de datos en la que se define la intercalacin, si la columna es de tipo de datos de caracteres o datos de texto. De lo contrario, esta columna es NULL.

COLLATION_CATALOG

Cadena

Usuarios
ColumnNa me DataType Descripcin

uid nombre CreateDate UpdateDate

Int16 Cadena DateTime DateTime

ID de usuario, nica en esta base de datos. 1 es el propietario de la base. Nombre de usuario o grupo, nico en esta base de datos. Fecha en que la cuenta fue agregado. Fecha en que la cuenta fue cambiada por ltima vez.

Vistas
Esta coleccin slo est disponible en SQL Server 2000 y versiones posteriores.

ColumnName

DataTyp e

Descripcin

table_catalog esquema_tabla table_name CHECK_OPTION

Cadena Cadena Cadena Cadena

Catlogo de la vista. Esquema que contiene la vista. Ver nombre. Tipo de WITH CHECK OPTION. Es CASCADE si la vista original fue creado con la opcin WITH CHECK. De lo contrario, se devuelve None. Especifica si la vista es actualizable. Siempre devuelve NO.

IS_UPDATABLE

Cadena

ViewColumns
ColumnName DataType Descripcin

view_catalog view_schema view_name table_catalog esquema_tabla table_name column_name

Cadena Cadena Cadena Cadena Cadena Cadena Cadena

Catlogo de la vista. Esquema que contiene la vista. Ver nombre. Catlogo de la tabla que est asociado con este punto de vista. Esquema que contiene la tabla asociada con esta vista. Nombre de la tabla que est asociado a la vista. Base de mesa. Nombre de columna.

UserDefinedTypes
Esta coleccin slo est disponible en SQL Server 2005 o superior.

ColumnName

DataType

Descripcin

assembly_name UDT_name version_major version_minor version_build version_revision Culture_info Public_key Is_fixed_length max_length permission_set_desc

Cadena Cadena Objeto Objeto Objeto Objeto Objeto Objeto Boolean Int16 Cadena

El nombre del archivo para el montaje. El nombre de clase para la asamblea. Nmero de versin principal. Nmero de versin secundaria. Nmero de compilacin. Nmero de Revisin. La informacin de referencia cultural asociada a este UDT. La clave pblica utilizada por esta Asamblea. Especifica si la longitud del tipo es siempre igual max_length. La longitud mxima del tipo en bytes. El nombre descriptivo para el permission-set/security-level para la asamblea. La fecha de la asamblea fue creado / registrado.

create_date

DateTime

Microsoft. NET Framework para Oracle


. El Microsoft NET Framework para Oracle es compatible con los siguientes colecciones de esquemas especficas adems de las colecciones de esquemas comunes: Columnas ndices IndexColumns Procedimientos Secuencias Sinnimos Tablas Usuarios Vistas Funciones Paquetes PackageBodies Argumentos UniqueKeys PrimaryKeys ForeignKeys ForeignKeyColumns ProcedureParameters

Columnas
ColumnName DataTyp e Descripcin

PROPIETARIO TABLE_NAME COLUMN_NAME Identificacin Tipo de datos LONGITUD PRECISION

Cadena Cadena Cadena Decimal Cadena Decimal Decimal

Propietario de la tabla, vista o clster. Tabla, vista o nombre del clster. Nombre de columna. Nmero de secuencia de la columna tal como fue creado. Tipo de datos de la columna. Longitud de la columna en bytes. Precisin decimal de tipo de datos NUMBER, precisin binaria de tipo de datos FLOAT, null para todos los otros tipos de datos. Los dgitos a la derecha del punto decimal en un nmero. Especifica si una columna acepta valores NULL. El valor es N si existe una restriccin NOT NULL en la columna o si la columna forma parte

ESCALA Acepta valores NULL

Decimal Cadena

de un PRIMARY KEY.

ndices
ColumnName DataType Descripcin

PROPIETARIO Index_name Index_type

Cadena Cadena Cadena

Propietario del ndice Nombre del ndice. Tipo de ndice (NORMAL, BITMAP, basado en las funciones NORMAL, basado en las funciones de mapa de bits o dominio). Propietario del objeto indexado. Nombre del objeto indexado. Tipo del objeto indexado (por ejemplo, TABLE, CLUSTER). Si el ndice es nico o no nico. Si el ndice est activada o desactivada. Nmero de columnas en el prefijo de la clave de compresin. Nombre del espacio de tabla que contiene el ndice. Nmero inicial de las transacciones. El nmero mximo de transacciones. Tamao de la medida inicial. Tamao de extensiones secundarias. Nmero mnimo de extensiones permitidas en el segmento. El nmero mximo de extensiones permitidas en el segmento. Porcentaje de incremento en tamao de extensin. Porcentaje de umbral de espacio de bloque permitido por entrada de ndice.

TABLE_OWNER TABLE_NAME TABLE_TYPE

Cadena Cadena Cadena

SINGULARIDAD COMPRESIN PREFIX_LENGTH

Cadena Cadena Decimal

TABLESPACE_NAME INI_TRANS Max_trans INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS

Cadena Decimal Decimal Decimal Decimal Decimal

MAX_EXTENTS

Decimal

PCT_INCREASE PCT_THRESHOLD

Decimal Decimal

INCLUDE_COLUMN

Decimal

Id. de columna de la ltima columna que se incluirn en clave de tabla organizada por ndices primarias (no rebose) ndice. Esta columna se asigna a la columna column_id de los puntos de vista * _TAB_COLUMNS diccionario de datos. Nmero de freelists procesos destinados a este segmento. Nmero de grupos freelist asignado a este segmento. Porcentaje mnimo de espacio libre en un bloque. La informacin de registro. B *-tree nivel: profundidad del ndice desde su bloque raz a sus bloques de hojas. Una profundidad de 0 indica que el bloque de raz y hoja bloque son los mismos. Nmero de bloques de hoja del ndice Nmero de distintos valores indexados. Para los ndices que hacen cumplir las restricciones UNIQUE y PRIMARY KEY, este valor es el mismo que el nmero de filas en la tabla (USER_TABLES.NUM_ROWS). Nmero medio de bloques de hojas redondeadas en el que aparece cada valor distinto en el ndice al entero ms prximo. Para los ndices que hacen cumplir las restricciones UNIQUE y PRIMARY KEY, este valor es siempre 1. Promedio del nmero de bloques de datos en la tabla que se han apuntado por un valor distinto en el ndice redondeado al entero ms cercano. Esta estadstica es el nmero medio de bloques de datos que contienen filas que contienen un valor dado para las columnas indizadas. Indica la cantidad de orden de las filas de la tabla en funcin de los valores del ndice. Si un ndice no particionado es VLIDA o inutilizable. Nmero de filas en el ndice.

FREELISTS

Decimal

FREELIST_GROUPS PCT_FREE REGISTRO BNivel

Decimal Decimal Cadena Decimal

LEAF_BLOCKS DISTINCT_KEYS

Decimal Decimal

AVG_LEAF_BLOCKS_PER_KEY

Decimal

AVG_DATA_BLOCKS_PER_KEY

Decimal

CLUSTERING_FACTOR

Decimal

ESTADO

Cadena

NUM_ROWS

Decimal

SAMPLE_SIZE LAST_ANALYZED

Decimal DateTime

Tamao de la muestra utilizada para analizar el ndice. Fecha en la que fue la ms reciente de este ndice analiza. Nmero de hilos por ejemplo para escanear el ndice. Nmero de casos a travs del cual los ndices a analizar. Si este ndice est particionado (S | NO). Si el ndice es en una tabla temporal. Si el nombre del ndice es generado por el sistema (Y | N). Si el ndice es un objeto secundario creado por el mtodo de la ODCIIndexCreate Cartucho Oracle9i Data (Y | N). Nombre de la agrupacin de almacenamientos intermedios por omisin que se utiliza para los bloques de ndices. Si las estadsticas se introdujeron directamente por el usuario. Indica la duracin de una tabla temporal: 1) SYS $ SESSION: las filas se conservan durante toda la sesin, 2) SYS $ TRANSACCIN: las filas se eliminan despus de COMMIT, 3) Null para el cuadro permanente Para un ndice secundario de una tabla organizada por ndices, el porcentaje de filas con estimacin VLIDO Para un ndice de dominio, el propietario de la indextype. Para un ndice de dominio, el nombre de la indextype. Para un ndice de dominio, la serie de parmetros. Para los ndices particionados, indica si las estadsticas se obtuvieron mediante el anlisis de ndice como un todo (YES) o se estimaron a partir de las estadsticas de particiones de ndice subyacentes y

GRADO INSTANCIAS

Cadena Cadena

PARTITIONED TEMPORAL GENERADO

Cadena Cadena Cadena

SECUNDARIA

Cadena

BUFFER_POOL

Cadena

USER_STATS

Cadena

DURACIN

Cadena

PCT_DIRECT_ACCESS

Decimal

ITYP_OWNER

Cadena

ITYP_NAME PARMETROS Global_stats

Cadena Cadena Cadena

subparticiones (NO). DOMIDX_STATUS Cadena Refleja el estado del ndice de dominio. NULL: el ndice especificado no es un ndice de dominio. VALIDEZ: el ndice es un ndice de dominio vlido. IDXTYP_INVLD: el tipo de ndice de este ndice de dominio no es vlido. Refleja el estado de una operacin que se realiz en un ndice de dominio: NULL: el ndice especificado no es un ndice de dominio. VALIDEZ: la operacin que se realiza sin errores. ERROR: La operacin fall con un error. Indica el estado de un ndice basado en las funciones: NULL: no se trata de un ndice basado en las funciones, ENABLED: el ndice basado en funcin est activada, DESACTIVADO: el ndice basado en funcin est desactivada. Indica si se trata de un ndice de combinacin o no.

DOMIDX_OPSTATUS

Cadena

FUNCIDX_STATUS

Cadena

JOIN_INDEX

Cadena

IndexColumns
ColumnName DataType Descripcin

INDEX_OWNER Index_name TABLE_OWNER TABLE_NAME COLUMN_NAME COLUMN_POSITION COLUMN_LENGTH CHAR_LENGTH DESCENDER

Cadena Cadena Cadena Cadena Cadena Decimal Decimal Decimal Cadena

Propietario del ndice. Nombre del ndice. Propietario de la tabla o clster. Nombre de la tabla o clster. Nombre de columna o atributo de columna tipo de objeto. Posicin de la columna o atributo en el ndice. Indexadas longitud de la columna. Punto de cdigo mxima longitud de la columna. Si la columna se ordena en orden descendente.

Procedimientos
ColumnName DataType Descripcin

PROPIETARIO OBJECT_NAME SUBOBJECT_NAME OBJECT_ID DATA_OBJECT_ID LAST_DDL_TIME

Cadena Cadena Cadena Decimal Decimal DateTime

Propietario del objeto. Nombre del objeto. Nombre del subobjeto (por ejemplo, la particin). Diccionario nmero de objeto del objeto. Diccionario nmero objeto del segmento que contiene el objeto. Marca de tiempo de la ltima modificacin del objeto resultante de un comando DDL (incluidas las donaciones y revoca). Marca de tiempo de la especificacin del objeto (datos de caracteres). Estado del objeto (VALID, INVALID o N / A). Si el objeto es temporal (la sesin actual se puede ver slo los datos que se colocan en este mismo objeto). El nombre de este sistema de objetos generados? (Y | N). Si este es un objeto secundario creado por el mtodo de la ODCIIndexCreate Cartucho Oracle9i Data (Y | N). La fecha de creacin del objeto.

TIMESTAMP

Cadena

ESTADO TEMPORAL

Cadena Cadena

GENERADO SECUNDARIA

Cadena Cadena

CREADO

DateTime

Secuencias
ColumnName DataTyp e Descripcin

SEQUENCE_OWNER SEQUENCE_NAME MIN_VALUE MAX_VALUE INCREMENT_BY CYCLE_FLAG ORDER_FLAG Cache_size

Cadena Cadena Decimal Decimal Decimal Cadena Cadena Decimal

Nombre del propietario de la secuencia. Secuencia nombre. El valor mnimo de la secuencia. El valor mximo de la secuencia. Valor segn el cual secuencia se incrementa. Secuencia se ajusta alrededor al llegar lmite. Estn los nmeros de secuencia generado en orden. Cantidad de nmeros de secuencia a la cach.

LAST_NUMBER

Decimal

ltimo nmero de secuencia escrito en el disco. Si una secuencia utiliza el almacenamiento en cach, el nmero escrito en el disco es el ltimo nmero colocado en la cach de secuencia. Este nmero es probable que sea mayor que el ltimo nmero de secuencia que se utiliz.

Sinnimos
ColumnName DataType Descripcin

PROPIETARIO SYNONYM_NAME TABLE_OWNER TABLE_NAME DB_LINK

Cadena Cadena Cadena Cadena Cadena

Propietario del sinnimo. Nombre del sinnimo. Propietario del objeto al que hace referencia el sinnimo. Nombre del objeto al que hace referencia el sinnimo. Nombre del enlace de base de datos de referencia, si la hay.

Tablas
ColumnName DataType Descripcin

PROPIETARIO TABLE_NAME TIPO

Cadena Cadena Cadena

Propietario de la tabla. Nombre de la tabla. Tipo de tabla.

Usuarios
ColumnName DataType Descripcin

NOMBRE Identificacin CreateDate

Cadena Decimal DateTime

Nombre del usuario. Nmero de identificacin del usuario. Fecha de creacin de usuarios.

Vistas
ColumnName DataTyp e Descripcin

PROPIETARIO View_name

Cadena Cadena

Propietario de la vista. Nombre de la vista.

TEXT_LENGTH TEXTO TYPE_TEXT_LENGTH TYPE_TEXT OID_TEXT_LENGTH OID_TEXT VIEW_TYPE_OWNER VIEW_TYPE SUPERVIEW_NAME

Decimal Cadena Decimal Cadena Decimal Cadena Cadena Cadena Cadena

Longitud del texto de opinin. Ver texto. Longitud de la clusula tipo de la vista con tipo. Tipo clusula de la vista con tipo. Longitud de la clusula WITH OID de la vista con tipo. Clusula WITH OID de la vista con tipo. Propietario del tipo de la vista si la vista es una vista con tipo. Tipo de la vista si la vista es una vista con tipo. Nombre de la supervista.

Funciones
ColumnName DataType Descripcin

PROPIETARIO OBJECT_NAME SUBOBJECT_NAME OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE CREADO LAST_DDL_TIME

Cadena Cadena Cadena Decimal Decimal Cadena DateTime DateTime

Propietario del objeto. Nombre del objeto. Nombre del subobjeto (por ejemplo, la particin). Diccionario nmero de objeto del objeto. Diccionario nmero objeto del segmento que contiene el objeto. Tipo de objeto. La fecha de creacin del objeto. Marca de tiempo de la ltima modificacin del objeto resultante de un comando DDL (incluidas las donaciones y revoca). Marca de tiempo de la especificacin del objeto (datos de caracteres) Estado del objeto (VALID, INVALID o N / A). Si el objeto es temporal (la sesin actual se puede ver slo los datos que se colocan en este mismo objeto). El nombre de este sistema de objetos generados? (Y | N).

TIMESTAMP

Cadena

ESTADO TEMPORAL

Cadena Cadena

GENERADO

Cadena

SECUNDARIA

Cadena

Si este es un objeto secundario creado por el mtodo de la ODCIIndexCreate Cartucho Oracle9i Data (Y | N).

Paquetes
ColumnName DataType Descripcin

PROPIETARIO OBJECT_NAME SUBOBJECT_NAME OBJECT_ID DATA_OBJECT_ID LAST_DDL_TIME

Cadena Cadena Cadena Decimal Decimal DateTime

Propietario del objeto. Nombre del objeto. Nombre del subobjeto (por ejemplo, la particin). Diccionario nmero de objeto del objeto. Diccionario nmero objeto del segmento que contiene el objeto. Marca de tiempo de la ltima modificacin del objeto resultante de un comando DDL (incluidas las donaciones y revoca). Marca de tiempo de la especificacin del objeto (datos de caracteres). Estado del objeto (VALID, INVALID o N / A). Si el objeto es temporal (la sesin actual se puede ver slo los datos que se colocan en este mismo objeto). El nombre de este sistema de objetos generados? (Y | N). Si este es un objeto secundario creado por el mtodo de la ODCIIndexCreate Cartucho Oracle9i Data (Y | N). La fecha de creacin del objeto.

TIMESTAMP

Cadena

ESTADO TEMPORAL

Cadena Cadena

GENERADO SECUNDARIA

Cadena Cadena

CREADO

DateTime

PackageBodies
ColumnName DataType Descripcin

PROPIETARIO OBJECT_NAME SUBOBJECT_NAME OBJECT_ID DATA_OBJECT_ID

Cadena Cadena Cadena Decimal Decimal

Propietario del objeto. Nombre del objeto. Nombre del subobjeto (por ejemplo, la particin). Diccionario nmero de objeto del objeto. Diccionario nmero objeto del segmento que contiene el objeto.

LAST_DDL_TIME

DateTime

Marca de tiempo de la ltima modificacin del objeto resultante de un comando DDL (incluidas las donaciones y revoca). Marca de tiempo de la especificacin del objeto (datos de caracteres). Estado del objeto (VALID, INVALID o N / A). Si el objeto es temporal (la sesin actual se puede ver slo los datos que se colocan en este mismo objeto). El nombre de este sistema de objetos generados? (Y | N). Si este es un objeto secundario creado por el mtodo de la ODCIIndexCreate Cartucho Oracle9i Data (Y | N). La fecha de creacin del objeto.

TIMESTAMP

Cadena

ESTADO TEMPORAL

Cadena Cadena

GENERADO SECUNDARIA

Cadena Cadena

CREADO

DateTime

Argumentos
ColumnName DataTyp e Descripcin

PROPIETARIO PACKAGE_NAME OBJECT_NAME ARGUMENT_NAME POSICIN

Cadena Cadena Cadena Cadena Decimal

Nombre del propietario del objeto. Nombre del paquete. Nombre del procedimiento o funcin. Nombre del argumento. Posicin en la lista de argumentos, o NULL para el valor devuelto de la funcin. Secuencia de argumentos, incluidos todos los niveles de anidacin. Valor predeterminado para la discusin. Longitud del valor predeterminado del argumento. Direccin Argumento (IN, OUT o IN / OUT). Longitud de la columna en bytes. Longitud en dgitos decimales (NUMBER) o dgitos binarios (FLOAT). Los dgitos a la derecha del punto decimal en un nmero.

SECUENCIA DEFAULT_VALUE DEFAULT_LENGTH IN_OUT DATA_LENGTH DATA_PRECISION

Decimal Cadena Decimal Cadena Decimal Decimal

DATA_SCALE

Decimal

DATA_TYPE

Cadena

El tipo de datos del argumento.

UniqueKeys
ColumnName DataType Descripcin

PROPIETARIO CONSTRAINT_NAME TABLE_NAME

Cadena Cadena Cadena

Propietario de la definicin de restriccin. Nombre de la definicin de restriccin. Nombre asociado con la tabla (o vista) con la definicin de restriccin. Texto de la condicin de bsqueda de una restriccin de comprobacin. Propietario del cuadro mencionado en una restriccin referencial. Nombre de la definicin de restriccin nicos para la tabla de referencia. Eliminar regla para una restriccin referencial (CASCADE o NO ACTION). Estado de aplicacin de la limitacin (activado o desactivado). Si la restriccin es aplazable. Si todos los datos obedece a la restriccin (validado o no validados). Si el nombre de la restriccin es usuario o del sistema generado. Un valor YES indica que esta restriccin especifica un siglo de manera ambigua. Para evitar los errores derivados de esta ambigedad, reescribir la restriccin de la funcin TO_DATE con un ao de cuatro dgitos. Si una restriccin habilitada se hace cumplir o no ejecutadas. Cuando la restriccin se ha habilitado o deshabilitado ltima Nombre del usuario propietario del ndice Nombre del ndice

Search_condition

Cadena

R_OWNER

Cadena

R_CONSTRAINT_NAME

Cadena

DELETE_RULE

Cadena

ESTADO DEFERRABLE VALIDADO

Cadena Cadena Cadena

GENERADO BAD

Cadena Cadena

CONFIAR LAST_CHANGE INDEX_OWNER Index_name

Cadena DateTime Cadena Cadena

PrimaryKeys
ColumnName DataType Descripcin

PROPIETARIO CONSTRAINT_NAME TABLE_NAME

Cadena Cadena Cadena

Propietario de la definicin de restriccin. Nombre de la definicin de restriccin. Nombre asociado con la tabla (o vista) con la definicin de restriccin. Texto de la condicin de bsqueda de una restriccin de comprobacin. Propietario del cuadro mencionado en una restriccin referencial. Nombre de la definicin de restriccin nicos para la tabla de referencia. Eliminar regla para una restriccin referencial (CASCADE o NO ACTION). Estado de aplicacin de la limitacin (activado o desactivado). Si la restriccin es aplazable. Si todos los datos obedece a la restriccin (validado o no validados). Si el nombre de la restriccin es usuario o del sistema generado. Un valor YES indica que esta restriccin especifica un siglo de manera ambigua. Para evitar los errores derivados de esta ambigedad, reescribir la restriccin de la funcin TO_DATE con un ao de cuatro dgitos. Si una restriccin habilitada se hace cumplir o no ejecutadas. Cuando la restriccin se ha habilitado o deshabilitado ltima. Nombre del usuario propietario del ndice. Nombre del ndice.

Search_condition

Cadena

R_OWNER

Cadena

R_CONSTRAINT_NAME

Cadena

DELETE_RULE

Cadena

ESTADO DEFERRABLE VALIDADO

Cadena Cadena Cadena

GENERADO BAD

Cadena Cadena

CONFIAR LAST_CHANGE INDEX_OWNER Index_name

Cadena DateTime Cadena Cadena

ForeignKeys
ColumnName DataType Descripcin

PRIMARY_KEY_CONSTRAINT_NAME PRIMARY_KEY_OWNER PRIMARY_KEY_TABLE_NAME

Cadena Cadena Cadena

Nombre de la definicin de restriccin. Propietario de la definicin de restriccin. Nombre asociado con la tabla (o vista) con la definicin de restriccin Propietario de la definicin de restriccin. Nombre de la definicin de restriccin. Nombre asociado con la tabla (o vista) con la definicin de restriccin. Texto de la condicin de bsqueda de una restriccin de comprobacin Propietario del cuadro mencionado en una restriccin referencial. Nombre de la definicin de restriccin nicos para la tabla de referencia. Eliminar regla para una restriccin referencial (CASCADE o NO ACTION). Estado de aplicacin de la limitacin (activado o desactivado). Si todos los datos obedece a la restriccin (validado o no validados). Si el nombre de la restriccin es usuario o del sistema generado. Si una restriccin habilitada se hace cumplir o no ejecutadas. Cuando la restriccin se ha habilitado o deshabilitado ltima. Nombre del usuario propietario del ndice. Nombre del ndice.

FOREIGN_KEY_OWNER FOREIGN_KEY_CONSTRIANT_NAME FOREIGN_KEY_TABLE_NAME

Cadena Cadena Cadena

Search_condition

Cadena

R_OWNER

Cadena

R_CONSTRAINT_NAME

Cadena

DELETE_RULE

Cadena

ESTADO

Cadena

VALIDADO

Cadena

GENERADO

Cadena

CONFIAR

Cadena

LAST_CHANGE

DateTime

INDEX_OWNER Index_name

Cadena Cadena

ForeignKeyColumns
ColumnName DataTyp Descripcin

PROPIETARIO CONSTRAINT_NAME TABLE_NAME COLUMN_NAME

Cadena Cadena Cadena Cadena

Propietario de la definicin de restriccin. Nombre de la definicin de restriccin. Nombre de la tabla de definicin de restriccin. Nombre de la columna o atributo de la columna de tipo de objeto especificado en la definicin de restriccin. Posicin original de la columna o atributo en la definicin del objeto.

POSICIN

Decimal

ProcedureParameters
ColumnName DataTyp e Descripcin

PROPIETARIO OBJECT_NAME PACKAGE_NAME OBJECT_ID SOBRECARGA ARGUMENT_NAME POSICIN

Cadena Cadena Cadena Decimal Cadena Cadena Decimal

Propietario del objeto. Nombre del procedimiento o funcin. Nombre del procedimiento o funcin. Objeto nmero del objeto. Sobrecarga nico identificador. Nombre del argumento. Posicin en la lista de argumentos, o NULL para un valor devuelto de la funcin. Secuencia de argumentos, incluidos todos los niveles de anidacin. Profundidad de anidamiento del argumento a favor de tipos compuestos. El tipo de datos del argumento. Valor predeterminado para la discusin. Longitud del valor predeterminado del argumento. Direccin Argumento (IN, OUT o IN / OUT).

SECUENCIA

Decimal

DATA_LEVEL

Decimal

DATA_TYPE DEFAULT_VALUE DEFAULT_LENGTH IN_OUT

Cadena Cadena Decimal Cadena

DATA_LENGTH DATA_PRECISION

Decimal Decimal

Longitud de la columna (en bytes). Longitud en dgitos decimales (NUMBER) o dgitos binarios (FLOAT). Los dgitos a la derecha del punto decimal en un nmero. Argumento radix para un nmero. Conjunto de caracteres nombre para el argumento. Propietario del tipo del argumento. Nombre del tipo del argumento. Si el tipo es un tipo de paquete local (es decir, se declara en una especificacin de paquete), esta columna muestra el nombre del paquete. Slo es relevante para los tipos locales de paquete. Muestra el nombre del tipo declarado en el paquete identificado en la columna TYPE_NAME. Slo es relevante para los tipos locales de paquete cuando el paquete identificado en la columna TYPE_NAME es un paquete remoto. En esta columna se muestra el vnculo de base de datos utilizado para referirse al paquete remoto. Para argumentos numricos, el nombre del tipo de PL / SQL del argumento. Null lo contrario. Carcter lmite para los tipos de datos de cadena. Indica si el lmite de byte (B) o lmite de caracteres (C) es oficial para la cadena

DATA_SCALE RADIX CHARACTER_SET_NAME TYPE_OWNER TYPE_NAME

Decimal Decimal Cadena Cadena Cadena

TYPE_SUBNAME

Cadena

TYPE_LINK

Cadena

PLS_TYPE

Cadena

CHAR_LENGTH CHAR_USED

Decimal Cadena

Microsoft SQL Server ODBC Driver


El Microsoft SQL Server Driver ODBC admite las siguientes colecciones de esquemas especficas adems de las colecciones de esquemas comunes: Tablas ndices Columnas Procedimientos ProcedureColumns ProcedureParameters Vistas

Tablas y vistas
ColumnName DataType

TABLE_CAT TABLE_SCHEM TABLE_NAME TABLE_TYPE OBSERVACIONES

Cadena Cadena Cadena Cadena Cadena

ndices
ColumnName DataType

TABLE_CAT TABLE_SCHEM TABLE_NAME NON_UNIQUE INDEX_QUALIFIER Index_name TIPO ORDINAL_POSITION COLUMN_NAME ASC_OR_DESC CARDINATLITY PGINAS FILTER_CONDITION SS_TYPE_SCHEMA SS_DATA_TYPE

Cadena Cadena Cadena Int16 Cadena Cadena Int16 Int16 Cadena Cadena Int32 Int32 Cadena Cadena Byte

Columnas
ColumnName DataType

TABLE_CAT TABLE_SCHEM TABLE_NAME COLUMN_NAME DATA_TYPE TYPE_NAME COLUMN_SIZE BUFFER_LENGTH DECIMAL_DIGITS NUM_PREC_RADIX Acepta valores NULL OBSERVACIONES COLUMN_DEF SQL_DATA_TYPE SQL_DATETIME_SUB CHAR_OCTET_LENGTH ORDINAL_POSITION IS_NULLABLE SS_TYPE_CATALOG SS_TYPE_SCHEMA SS_DATA_TYPE

Cadena Cadena Cadena Cadena Int16 Cadena Int32 Int32 Int16 Int16 Int16 Cadena Cadena Int16 Int16 Int32 Int32 Cadena Cadena Cadena Byte

Procedimientos
ColumnName DataType

PROCEDURE_CAT PROCEDURE_SCHEM PROCEDURE_NAME NUM_INPUT_PARAMS NUM_OUTPUT_PARAMS NUM_RESULT_SETS OBSERVACIONES PROCEDURE_TYPE

Cadena Cadena Cadena Int32 Int32 Int32 Cadena Int16

ProcedureColumns
ColumnName DataType

PROCEDURE_CAT PROCEDURE_SCHEM PROCEDURE_NAME COLUMN_NAME Column_type DATA_TYPE TYPE_NAME COLUMN_SIZE BUFFER_LENGTH DECIMAL_DIGITS NUM_PREC_RADIX Acepta valores NULL

Cadena Cadena Cadena Cadena Int16 Int16 Cadena Int32 Int32 Int16 Int16 Int16

OBSERVACIONES COLUMN_DEF SQL_DATA_TYPE SQL_DATETIME_SUB CHAR_OCTET_LENGTH ORDINAL_POSITION IS_NULLABLE SS_TYPE_CATALOG SS_TYPE_SCHEMA SS_DATA_TYPE

Cadena Cadena Int16 Int16 Int32 Int32 Cadena Cadena Cadena Byte

ProcedureParameters
ColumnName DataType

PROCEDURE_CAT PROCEDURE_SCHEM PROCEDURE_NAME COLUMN_NAME Column_type DATA_TYPE TYPE_NAME COLUMN_SIZE BUFFER_LENGTH DECIMAL_DIGITS NUM_PREC_RADIX Acepta valores NULL

Cadena Cadena Cadena Cadena Int16 Int16 Cadena Int32 Int32 Int16 Int16 Int16

OBSERVACIONES COLUMN_DEF SQL_DATA_TYPE SQL_DATETIME_SUB CHAR_OCTET_LENGTH ORDINAL_POSITION IS_NULLABLE SS_TYPE_CATALOG SS_TYPE_SCHEMA SS_DATA_TYPE

Cadena Cadena Int16 Int16 Int32 Int32 Cadena Cadena Cadena Byte

Microsoft Oracle ODBC Driver


El Microsoft SQL Server Oracle ODBC Driver es compatible con los siguientes colecciones de esquemas especficas adems de las colecciones de esquemas comunes: Tablas Columnas Procedimientos ProcedureColumns ProcedureParameters Vistas ndices

Tablas y vistas
ColumnName DataType

TABLE_QUALIFIER TABLE_OWNER TABLE_NAME TABLE_TYPE OBSERVACIONES

Cadena Cadena Cadena Cadena Cadena

Columnas
ColumnName DataType

TABLE_QUALIFIER TABLE_OWNER TABLE_NAME COLUMN_NAME DATA_TYPE TYPE_NAME PRECISION LONGITUD ESCALA RADIX Acepta valores NULL OBSERVACIONES ORDINAL_POSITION

Cadena Cadena Cadena Cadena Int16 Cadena Int32 Int32 Int16 Int16 Int16 Cadena Int32

Procedimientos
ColumnName DataType

PROCEDURE_QUALIFIER PROCEDURE_OWNER PROCEDURE_NAME NUM_INPUT_PARAMS NUM_OUTPUT_PARAMS NUM_RESULT_SETS OBSERVACIONES

Cadena Cadena Cadena Int16 Int16 Int16 Cadena

PROCEDURE_TYPE

Int16

ProcedureColumns
ColumnName DataType

PROCEDURE_QUALIFIER PROCEDURE_OWNER PROCEDURE_NAME COLUMN_NAME Column_type DATA_TYPE TYPE_NAME PRECISION LONGITUD ESCALA RADIX Acepta valores NULL OBSERVACIONES SOBRECARGA ORDINAL_POSITION

Cadena Cadena Cadena Cadena Int16 Int16 Cadena Int32 Int32 Int16 Int16 Int16 Cadena Int32 Int32

Microsoft Jet ODBC Driver


El Microsoft Jet SQL Server ODBC Driver es compatible con los siguientes colecciones de esquemas especficas adems de las colecciones de esquemas comunes: Tablas ndices Columnas Procedimientos ProcedureColumns ProcedureParameters Vistas

Tablas y vistas
ColumnName DataType

TABLE_QUALIFIER TABLE_OWNER TABLE_NAME TABLE_TYPE OBSERVACIONES

Cadena Cadena Cadena Cadena Cadena

Columnas
ColumnName DataType

TABLE_QUALIFIER TABLE_OWNER TABLE_NAME COLUMN_NAME DATA_TYPE TYPE_NAME PRECISION LONGITUD ESCALA RADIX Acepta valores NULL OBSERVACIONES ORDINAL_POSITION

Cadena Cadena Cadena Cadena Int16 Cadena Int32 Int32 Int16 Int16 Int16 Cadena Int32

Procedimientos
ColumnName DataType

PROCEDURE_QUALIFIER PROCEDURE_OWNER PROCEDURE_NAME NUM_INPUT_PARAMS NUM_OUTPUT_PARAMS NUM_RESULT_SETS OBSERVACIONES PROCEDURE_TYPE

Cadena Cadena Cadena Int16 Int16 Int16 Cadena Int16

ProcedureColumns
ColumnName DataType

PROCEDURE_QUALIFIER PROCEDURE_OWNER PROCEDURE_NAME COLUMN_NAME Column_type DATA_TYPE TYPE_NAME PRECISION LONGITUD ESCALA RADIX Acepta valores NULL OBSERVACIONES SOBRECARGA

Cadena Cadena Cadena Cadena Int16 Int16 Cadena Int32 Int32 Int16 Int16 Int16 Cadena Int32

ORDINAL_POSITION

Int32

ProcedureParameters
ColumnName DataType

PROCEDURE_CAT PROCEDURE_SCHEM PROCEDURE_NAME COLUMN_NAME Column_type DATA_TYPE TYPE_NAME COLUMN_SIZE BUFFER_LENGTH DECIMAL_DIGITS NUM_PREC_RADIX Acepta valores NULL OBSERVACIONES COLUMN_DEF SQL_DATA_TYPE SQL_DATETIME_SUB CHAR_OCTET_LENGTH ORDINAL_POSITION IS_NULLABLE

Cadena Cadena Cadena Cadena Int16 Int16 Cadena Int32 Int32 Int16 Int16 Int16 Cadena Cadena Int16 Int16 Int32 Int32 Cadena

Microsoft SQL Server OLEDB Provider


El Microsoft SQL Server Driver OLEDB admite las siguientes colecciones de esquemas especficas adems de las colecciones de esquemas comunes: Tablas Columnas Procedimientos ProcedureParameters Catlogo ndices

Tablas
ColumnName DataType

TABLE_CATALOG TABLE_SCHEMA TABLE_NAME TABLE_TYPE TABLE_GUID DESCRIPCIN TABLE_PROPID DATE_CREATED DATE_MODIFIED

Cadena Cadena Cadena Cadena Guid Cadena Int64 DateTime DateTime

Columnas
ColumnName DataType

TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME

Cadena Cadena Cadena Cadena

COLUMN_GUID COLUMN_PROPID ORDINAL_POSITION COLUMN_HASDEFAULT COLUMN_DEFAULT COLUMN_FLAGS IS_NULLABLE DATA_TYPE TYPE_GUID CHARACTER_MAXIMUM_LENGTH CHARACTER_OCTET_LENGTH NUMERIC_PRECISION NUMERIC_SCALE DATETIME_PRECISION CHARACTER_SET_CATALOG CHARACTER_SET_SCHEMA CHARACTER_SET_NAME COLLATION_CATALOG COLLATION_SCHEMA COLLATION_NAME DOMAIN_CATALOG DOMAIN_SCHEMA DOMAIN_NAME DESCRIPCIN

Guid Int64 Int64 Boolean Cadena Int64 Boolean Int32 Guid Int64 Int64 Int32 Int16 Int64 Cadena Cadena Cadena Cadena Cadena Cadena Cadena Cadena Cadena Cadena

COLUMN_LCID COLUMN_COMPFLAGS COLUMN_SORTID COLUMN_TDSCOLLATION IS_COMPUTED

Int32 Int32 Int32 Byte [] Boolean

Procedimientos
ColumnName DataType

PROCEDURE_CATALOG PROCEDURE_SCHEMA PROCEDURE_NAME PROCEDURE_TYPE PROCEDURE_DEFINITION DESCRIPCIN DATE_CREATED DATE_MODIFIED

Cadena Cadena Cadena Int16 Cadena Cadena DateTime DateTime

ProcedureParameters
ColumnName DataType

PROCEDURE_CATALOG PROCEDURE_SCHEMA PROCEDURE_NAME PARAMETER_NAME ORDINAL_POSITION PARAMETER_TYPE PARAMETER_HASDEFAULT

Cadena Cadena Cadena Cadena Int32 Int32 Boolean

PARAMETER_DEFAULT IS_NULLABLE DATA_TYPE CHARACTER_MAXIMUM_LENGTH CHARACTER_OCTET_LENGTH NUMERIC_PRECISION NUMERIC_SCALE DESCRIPCIN TYPE_NAME LOCAL_TYPE_NAME

Cadena Boolean Int32 Int64 Int64 Int32 Int16 Cadena Cadena Cadena

Catlogo
ColumnName DataType

CATALOG_NAME DESCRIPCIN

Cadena Cadena

ndices
ColumnName DataType

TABLE_CATALOG TABLE_SCHEMA TABLE_NAME INDEX_CATALOG Esquema_ndice Index_name PRIMARY_KEY UNIQUE

Cadena Cadena Cadena Cadena Cadena Cadena Boolean Boolean

CLUSTERED TIPO FILL_FACTOR INITIAL_SIZE NULLS SORT_BOOKMARKS AUTO_UPDATE NULL_COLLATION ORDINAL_POSITION COLUMN_NAME COLUMN_GUID COLUMN_PROPID COMPILACIN CARDINALITY PGINAS FILTER_CONDITION INTEGRADO

Boolean Int32 Int32 Int32 Int32 Boolean Boolean Int32 Int64 Cadena Guid Int64 Int16 Decimal Int32 Cadena Boolean

Microsoft Oracle OLEDB Provider


El controlador OLEDB de Oracle de Microsoft admite las siguientes colecciones de esquemas especficas adems de las colecciones de esquemas comunes: Tablas Columnas Procedimientos ProcedureColumns ProcedureParameters Vistas ndices

Tablas
ColumnName DataType

TABLE_CATALOG TABLE_SCHEMA TABLE_NAME TABLE_TYPE TABLE_GUID DESCRIPCIN TABLE_PROPID DATE_CREATED DATE_MODIFIED

Cadena Cadena Cadena Cadena Guid Cadena Int64 DateTime DateTime

Columnas
ColumnName DataType

TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME COLUMN_GUID COLUMN_PROPID ORDINAL_POSITION COLUMN_HASDEFAULT COLUMN_DEFAULT COLUMN_FLAGS IS_NULLABLE

Cadena Cadena Cadena Cadena Guid Int64 Int64 Boolean Cadena Int64 Boolean

DATA_TYPE TYPE_GUID CHARACTER_MAXIMUM_LENGTH CHARACTER_OCTET_LENGTH NUMERIC_PRECISION NUMERIC_SCALE DATETIME_PRECISION CHARACTER_SET_CATALOG CHARACTER_SET_SCHEMA CHARACTER_SET_NAME COLLATION_CATALOG COLLATION_SCHEMA COLLATION_NAME DOMAIN_CATALOG DOMAIN_SCHEMA DOMAIN_NAME DESCRIPCIN

Int32 Guid Int64 Int64 Int32 Int16 Int64 Cadena Cadena Cadena Cadena Cadena Cadena Cadena Cadena Cadena Cadena

Procedimientos
ColumnName DataType

PROCEDURE_CATALOG PROCEDURE_SCHEMA PROCEDURE_NAME PROCEDURE_TYPE PROCEDURE_DEFINITION

Cadena Cadena Cadena Int16 Cadena

DESCRIPCIN DATE_CREATED DATE_MODIFIED

Cadena DateTime DateTime

ProcedureColumns
ColumnName DataType

PROCEDURE_CATALOG PROCEDURE_SCHEMA PROCEDURE_NAME COLUMN_NAME COLUMN_GUID COLUMN_PROPID ROWSET_NUMBER ORDINAL_POSITION IS_NULLABLE DATA_TYPE TYPE_GUID CHARACTER_MAXIMUM_LENGTH CHARACTER_OCTET_LENGTH NUMERIC_PRECISION NUMERIC_SCALE DESCRIPCIN SOBRECARGA

Cadena Cadena Cadena Cadena Guid Int64 Int64 Int64 Boolean Int32 Guid Int64 Int64 Int32 Int16 Cadena Int16

Vistas
ColumnName DataType

TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DESCRIPCIN DATE_CREATED DATE_MODIFIED

Cadena Cadena Cadena Cadena Boolean Boolean Cadena DateTime DateTime

ndices
ColumnName DataType

TABLE_CATALOG TABLE_SCHEMA TABLE_NAME INDEX_CATALOG Esquema_ndice Index_name PRIMARY_KEY UNIQUE CLUSTERED TIPO FILL_FACTOR INITIAL_SIZE NULLS

Cadena Cadena Cadena Cadena Cadena Cadena Boolean Boolean Boolean Int32 Int32 Int32 Int32

SORT_BOOKMARKS AUTO_UPDATE NULL_COLLATION ORDINAL_POSITION COLUMN_NAME COLUMN_GUID COLUMN_PROPID COMPILACIN CARDINALITY PGINAS FILTER_CONDITION INTEGRADO

Boolean Boolean Int32 Int64 Cadena Guid Int64 Int16 Decimal Int32 Cadena Boolean

Microsoft Jet OLEDB Provider


El Microsoft Jet OLEDB controlador es compatible con los siguientes colecciones de esquemas especficas adems de las colecciones de esquemas comunes: Tablas Columnas Procedimientos Vistas ndices

Tablas
ColumnName DataType

TABLE_CATALOG TABLE_SCHEMA TABLE_NAME TABLE_TYPE TABLE_GUID

Cadena Cadena Cadena Cadena Guid

DESCRIPCIN TABLE_PROPID DATE_CREATED DATE_MODIFIED

Cadena Int64 DateTime DateTime

Columnas
ColumnName DataType

TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME COLUMN_GUID COLUMN_PROPID ORDINAL_POSITION COLUMN_HASDEFAULT COLUMN_DEFAULT COLUMN_FLAGS IS_NULLABLE DATA_TYPE TYPE_GUID CHARACTER_MAXIMUM_LENGTH CHARACTER_OCTET_LENGTH NUMERIC_PRECISION NUMERIC_SCALE DATETIME_PRECISION

Cadena Cadena Cadena Cadena Guid Int64 Int64 Boolean Cadena Int64 Boolean Int32 Guid Int64 Int64 Int32 Int16 Int64

CHARACTER_SET_CATALOG CHARACTER_SET_SCHEMA CHARACTER_SET_NAME COLLATION_CATALOG COLLATION_SCHEMA COLLATION_NAME DOMAIN_CATALOG DOMAIN_SCHEMA DOMAIN_NAME DESCRIPCIN

Cadena Cadena Cadena Cadena Cadena Cadena Cadena Cadena Cadena Cadena

Procedimientos
ColumnName DataType

PROCEDURE_CATALOG PROCEDURE_SCHEMA PROCEDURE_NAME PROCEDURE_TYPE PROCEDURE_DEFINITION DESCRIPCIN DATE_CREATED DATE_MODIFIED

Cadena Cadena Cadena Int16 Cadena Cadena DateTime DateTime

Vistas
ColumnName DataType

TABLE_CATALOG TABLE_SCHEMA

Cadena Cadena

TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DESCRIPCIN DATE_CREATED DATE_MODIFIED

Cadena Cadena Boolean Boolean Cadena DateTime DateTime

ndices
ColumnName DataType

TABLE_CATALOG TABLE_SCHEMA TABLE_NAME INDEX_CATALOG Esquema_ndice Index_name PRIMARY_KEY UNIQUE CLUSTERED TIPO FILL_FACTOR INITIAL_SIZE NULLS SORT_BOOKMARKS AUTO_UPDATE

Cadena Cadena Cadena Cadena Cadena Cadena Boolean Boolean Boolean Int32 Int32 Int32 Int32 Boolean Boolean

NULL_COLLATION ORDINAL_POSITION COLUMN_NAME COLUMN_GUID COLUMN_PROPID COMPILACIN CARDINALITY PGINAS FILTER_CONDITION INTEGRADO

Int32 Int64 Cadena Guid Int64 Int16 Decimal Int32 Cadena Boolean

Modificar datos en ADO.NET


. NET Framework 2.0
3 de 6 puntuado este til - Valorar este tema Una funcin clave de cualquier aplicacin de base de datos es la capacidad de actualizar los datos que se almacenan en la base de datos. En ADO.NET, los datos se actualizan con los DataAdapter y DataSet y Comando objetos, y tambin puede incluir el uso de las transacciones.

Uso de procedimientos almacenados para actualizar datos


. NET Framework 2.0
Otras versiones 10 de los 22 ha calificado este til - Valorar este tema

Los procedimientos almacenados pueden aceptar los datos como parmetros de entrada y puede devolver datos como parmetros de salida, conjuntos de resultados o valores de retorno. El ejemplo siguiente muestra cmo ADO.NET enva y recibe parmetros de entrada, parmetros de salida y valores devueltos. El ejemplo inserta un nuevo registro en una tabla en la columna de clave principal es una columna de identidad en una base de datos SQL Server.

Nota Si utiliza procedimientos almacenados de SQL Server para editar o borrar los datos utilizando un SqlDataAdapter , asegrese de que no utiliza SET NOCOUNT ON en la definicin del procedimiento almacenado. Esto provoca que las filas afectadas recuento volvi a ser cero, lo que los DataAdapter interpreta como un conflicto de simultaneidad. En este caso, un DBConcurrencyException ser lanzada.

Ejemplo
El ejemplo utiliza el siguiente procedimiento almacenado para insertar una nueva categora en el Northwind Categoras mesa. El procedimiento almacenado toma el valor de la CategoryName columna como parmetro de entrada y utiliza la funcin SCOPE_IDENTITY () para recuperar el nuevo valor del campo de identidad,CategoryID , y devolverlo en un parmetro de salida. La sentencia RETURN se utiliza la funcin @ @ ROWCOUNT para devolver el nmero de filas insertadas.

CREAR PROCEDIMIENTO dbo.InsertCategory @ CategoryName nvarchar (15), @ Identity int OUT COMO INSERT INTO Categoras (CategoryName) VALUES (@ CategoryName) SET @ Identity SCOPE_IDENTITY = () RETURN @ @ ROWCOUNT
En el ejemplo de cdigo siguiente se utiliza la InsertCategory procedimiento almacenado se muestra arriba como la fuente para la InsertCommand deSqlDataAdapter . La Identidad @ parmetro de salida se refleja en el conjunto de datos despus de que el disco ha sido insertado en la base de datos cuando la actualizacin mtodo de los SqlDataAdapter se llama. El cdigo tambin recupera el valor de retorno.

Nota Cuando se utilizan los OleDbDataAdapter , debe especificar los parmetros con un ParameterDirection de ReturnValue antes de los otros parmetros.
C# VB

Private Sub ReturnIdentity ( ByVal connectionString como cadena ) Con conexin Como SqlConnection = New SqlConnection (_ connectionString) 'Crear un objeto SqlDataAdapter basados en una consulta SELECT. Dim adaptador Como SqlDataAdapter = New SqlDataAdapter (_ "SELECT CategoryID, CategoryName DE dbo.Categories" , _ conexin) 'Crear un objeto SqlCommand para ejecutar el procedimiento almacenado. adapter.InsertCommand = New SqlCommand ( "dbo.InsertCategory" , _ conexin) adapter.InsertCommand.CommandType = CommandType.StoredProcedure "Crear un parmetro para la ReturnValue. Dim parmetro como SqlParameter = _

adapter.InsertCommand.Parameters.Add (_ "@ RowCount" , SqlDbType.Int) parameter.Direction = ParameterDirection.ReturnValue "Crear un parmetro de entrada para el CategoryName. ' No es necesario especificar la direccin de los parmetros de entrada. adapter.InsertCommand.Parameters.Add (_ "@ CategoryName" , SqlDbType.NChar, 15, "CategoryName" ) "Crear un parmetro de salida para el nuevo valor de identidad. parmetro = adapter.InsertCommand.Parameters.Add (_ "@ Identity" , SqlDbType.Int, 0, "CategoryID" ) parameter.Direction = ParameterDirection.Output 'Crear un DataTable y llenarla. Dim categoras Como DataTable = New DataTable adapter.Fill (categoras) "Aadir una nueva fila. Dim newRow Como DataRow = categories.NewRow () newRow ( "CategoryName" ) = "Nueva categora" categories.Rows.Add (newRow) "Actualizacin de la base de datos. adapter.Update (categoras) 'Recuperar la ReturnValue. Dim rowCount Como Int32 = _ CInt (adapter.InsertCommand.Parameters ( "@ RowCount" ). Value) Console.WriteLine ( "ReturnValue: {0}" , rowCount.ToString ()) Console.WriteLine ( "todas las filas:" ) Dim fila como DataRow para cada fila en categories.Rows Console.WriteLine ( "{0}: {1}" , row (0), fila (1)) Siguiente Fin Usando End Sub

Actualizar orgenes de datos con DataAdapters


. NET Framework 2.0
Otras versiones 21 de los 34 ha calificado este til - Valorar este tema La actualizacin mtodo de los DataAdapter est llamado a resolver los cambios de un DataSet en el origen de datos. La actualizacin de mtodo, como el rellenomtodo, toma como argumentos una instancia de un DataSet , y un opcional DataTable objeto o DataTable nombre. El conjunto de datos de la instancia es elconjunto de

datos que contiene los cambios que se han hecho, y el DataTable identifica la tabla desde la que recuperar los cambios. Si no DataTable se especifica, el primer objeto DataTable en el DataSet se utiliza. Cuando se llama a la actualizacin de mtodo, el DataAdapter analiza los cambios que se han realizado y ejecuta el comando apropiado (INSERT, UPDATE o DELETE). Cuando el DataAdapter encuentra un cambio en un DataRow , utiliza el InsertCommand , UpdateCommand o DeleteCommand para procesar el cambio.Esto le permite maximizar el rendimiento de la aplicacin ADO.NET de sintaxis de comandos especificando en tiempo de diseo y, cuando sea posible, mediante el uso de procedimientos almacenados. Debe establecer explcitamente los comandos antes de llamar a Update . Si Update se llama y el comando correspondiente no existe una actualizacin en particular (por ejemplo, no DeleteCommand para las filas eliminadas), se produce una excepcin.

Nota Si utiliza procedimientos almacenados de SQL Server para editar o eliminar datos mediante un DataAdapter , asegrese de que no utiliza SET NOCOUNT ON en la definicin del procedimiento almacenado. Esto provoca que las filas devueltas afectadas cuentan como cero, que los DataAdapter interpreta como un conflicto de simultaneidad. En este caso, un DBConcurrencyException es lanzada.
Los parmetros del comando se puede utilizar para especificar los valores de entrada y de salida de una sentencia de SQL o un procedimiento almacenado para cada fila modificada en DataSet . Para obtener ms informacin, vea Utilizar parmetros con DataAdapter .

Nota Es importante entender la diferencia entre eliminar una fila de una DataTable y la eliminacin de la fila. Al llamar al Remove o RemoveAt mtodo, la fila se elimina inmediatamente. Las filas correspondientes en la parte de atrs origen de datos no se vern afectados si a continuacin, pasar el DataTable o DataSet a un DataAdapter y llamar a Update . Cuando se utiliza la eliminacin mtodo, la lnea permanece en el DataTable y est marcado para su eliminacin. Si a continuacin, pasar el DataTable o DataSet a un DataAdapter y llamar a Update , la fila correspondiente en la parte de atrs de origen de datos se elimina.
Si sus DataTable mapas o se genera a partir de una tabla de base de datos, usted puede tomar ventaja de la DbCommandBuilder objeto de generar automticamente el DeleteCommand , InsertCommand y UpdateCommand objetos para los DataAdapter . Para obtener ms informacin, vea Generar comandos automticamente .

Usando UpdatedRowSource para asignar valores a un conjunto de datos


Usted puede controlar cmo los valores devueltos por la fuente de datos se asignan a la DataTable despus de una llamada al mtodo Update de un DataAdapterutilizando el UpdatedRowSource propiedad de un DbCommand objeto. Al establecer el UpdatedRowSource propiedad a uno de los UpdateRowSource valores de la enumeracin, se puede controlar si los parmetros de salida devueltos por los DataAdapter comandos son ignorados o aplicados en la fila modificada en elDataSet . Tambin se puede especificar si la primera fila devuelta (si existe) se aplica a la fila modificada en DataTable . En la tabla siguiente se describen los distintos valores de la UpdateRowSource enumeracin y cmo afectan el comportamiento de un comando que se utiliza con un DataAdapter .

Enumeracin UpdatedRowSource

Descripcin

Ambos

Tanto los parmetros de salida y la primera fila de un conjunto de resultados devuelto se pueden asignar a la fila modificada en el DataSet . Slo los datos de la primera fila de un conjunto de resultados devuelto se pueden asignar a la fila modificada en el DataSet . Los parmetros de salida o filas de un conjunto de resultados devuelto son ignorados. Slo los parmetros de salida se pueden asignar a la fila modificada en el DataSet .

FirstReturnedRecord

Ninguno

OutputParameters

La actualizacin mtodo resuelve sus cambios de vuelta al origen de datos, sin embargo los otros clientes pueden haber modificado los datos del origen de datos desde la ltima vez que llen el DataSet . Para actualizar su conjunto de datos con los datos actuales, utilice los DataAdapter y relleno mtodo. Las nuevas filas se agregan a la tabla, y la informacin actualizada se incorporar a las filas existentes. El relleno mtodo determina si una nueva fila se aadir o una fila existente se actualizar mediante el examen de los valores de clave principal de las filas en el conjunto de datos y las filas devueltas por la SelectCommand . Si el rellenomtodo encuentra un valor de clave principal de una fila en el DataSet que coincide con un valor de clave principal de una fila de los resultados devueltos por elSelectCommand , se actualiza la fila existente con la informacin de la fila devuelta por SelectCommand y establece el RowState de la fila existente sin cambios . Si una fila devuelta por el SelectCommand tiene un valor de clave principal que no coincide con ninguno de los valores de clave principal de las filas en el DataSet , elrelleno mtodo agrega una nueva fila con un RowState de Sin cambios .

Nota Si SelectCommand devuelve los resultados de una combinacin externa, el DataAdapter no establecer un PrimaryKey valor resultante de la DataTable . Debe definir el PrimaryKey s mismo para asegurarse de que las filas duplicadas se resuelven correctamente. Para obtener ms informacin, vea Definir una clave principal para una tabla .
Para controlar las excepciones que se pueden producir cuando se llama a la actualizacin de mtodo, puede utilizar el RowUpdated de eventos para responder a la fila errores de actualizacin que se producen (vase Trabajar con eventos DataAdapter ), o puede establecer DataAdapter.ContinueUpdateOnError a cierto antes de llamar a Update y responder a la informacin almacenada en el error RowError propiedad de una fila en particular cuando la actualizacin est completa (verCmo agregar y leer informacin de error de fila ). Nota Llamar a AcceptChanges en el DataSet , DataTable o DataRow hace que todos los originales de los valores de un DataRow se sobrescribirn con losactuales valores de la DataRow . Si los valores de los campos que identifican la fila como nico han modificado, despus de llamar a AcceptChanges los originalesvalores ya no coinciden con los valores del origen de datos. AcceptChanges es llamado automticamente para cada fila en una llamada al mtodo Update de unDataAdapter . Puede conservar los valores originales durante una llamada al mtodo Update estableciendo primero la AcceptChangesDuringUpdate propiedad de los DataAdapter es false, o mediante la creacin de un controlador de eventos para el RowUpdated evento y establecer el estado de SkipCurrentRow . Para obtener ms informacin, vea Combinar contenido de DataSet y Trabajar con eventos DataAdapter .

Ejemplo
Los siguientes ejemplos muestran cmo realizar cambios a las filas modificadas estableciendo de forma explcita UpdateCommand de un DataAdapter y llamar a su actualizacin mtodo. Observe que el parmetro especificado en la clusula WHERE de la instruccin UPDATE est configurado para utilizar el original valor de la SourceColumn . Esto es importante, debido a que el actual valor puede haber sido modificado y no coincida con el valor en la fuente de datos. El original es el valor que se utiliza para rellenar el objeto DataTable de origen de datos. C#

VB

Private Sub AdapterUpdate ( ByVal connectionString como cadena ) Con conexin Como SqlConnection = New SqlConnection (_ connectionString) Dim adaptador Como SqlDataAdapter = New SqlDataAdapter (_ "SELECT CategoryID, CategoryName DE dbo.Categories" , _ conexin) adapter.UpdateCommand = New SqlCommand (_ "Categoras UPDATE SET CategoryName = @ CategoryName" & _ "WHERE CategoryID = @ CategoryID" , conexin) adapter.UpdateCommand.Parameters.Add (_ "@ CategoryName" , SqlDbType.NVarChar, 15, "CategoryName" ) Dim parmetro como SqlParameter = _ adapter.UpdateCommand.Parameters.Add (_ "@ CategoryID" , SqlDbType.Int) parameter.SourceColumn = "CategoryID" parameter.SourceVersion = DataRowVersion.Original Dim categoryTable Como Nuevo DataTable adapter.Fill (categoryTable) Dim categoryRow Como DataRow = categoryTable.Rows (0) categoryRow ( "NombreCategora" ) = "Bebidas Nuevos" adapter.Update (categoryTable) Console.WriteLine ( "Filas despus de la actualizacin." ) Dim fila como DataRow para cada fila en categoryTable.Rows Console.WriteLine ( "{0}: {1}" , row (0), fila (1)) Siguiente Fin Usando End Sub

Columnas AutoIncrement
Si las tablas del origen de datos tienen columnas de incremento automtico, usted puede llenar las columnas del DataSet mediante la devolucin del valor de incremento automtico como un parmetro de salida de un procedimiento almacenado y la cartografa que a una columna en una tabla, con la devolucin del auto de incremento en el valor de la primera fila de un conjunto de resultados devuelto por un procedimiento almacenado o una instruccin SQL o utilizando elRowUpdated caso de los DataAdapter para ejecutar una sentencia SELECT adicional. Para obtener ms informacin y un ejemplo, vea Recuperar valores de identidad o Autonumrico .

Orden de las inserciones, actualizaciones y eliminaciones


En muchas circunstancias, el orden en que los cambios realizados a travs del conjunto de datos se envan a la fuente de datos es importante. Por ejemplo, si un valor de clave principal de una fila existente se actualiza y una nueva fila se ha agregado con el nuevo valor de clave primaria como una clave externa, es importante para procesar la actualizacin antes de la insercin.

Usted puede utilizar el Select mtodo de la DataTable para devolver un objeto DataRow matriz que slo haga referencia a filas con un determinado RowState . A continuacin, puede pasar la volvi DataRow matriz a la actualizacin mtodo de los DataAdapter para procesar las filas modificadas. Al especificar un subconjunto de filas que se pueden actualizar, puede controlar el orden en que las inserciones, actualizaciones y eliminaciones se procesan.

Ejemplo
El siguiente cdigo garantiza que las filas eliminadas de la tabla se procesa en primer lugar, a continuacin, los registros actualizados, y finalmente las filas insertadas. C# VB

Dim tabla como DataTable = dataSet.Tables ( "Clientes" ) 'Borra primer proceso. dataSet.Update (tab. Select ( Nada , Nada , _ DataViewRowState.Deleted)) 'Descarga siguiente proceso. adapter.Update (tab. Select ( Nada , Nada , _ DataViewRowState.ModifiedCurrent)) 'Por ltimo, inserta proceso. dataAdpater.Update (tab. Select ( Nada , Nada , _ DataViewRowState.Added))

Recuperar valores de identidad o Autonumrico


. NET Framework 2.0
Otras versiones

15 de los 36 ha calificado este til - Valorar este tema Una clave principal en una base de datos relacional es una columna o combinacin de columnas que siempre contienen valores nicos. Conocer el valor de clave principal le permite localizar la fila que contiene. Motores de bases de datos relacionales, como SQL Server, Oracle y Microsoft Access / Jet apoyo a la creacin de columnas de incremento automtico que se pueden designar como claves principales. Estos valores son generados por el servidor como filas se aaden a una tabla.En SQL Server, se establece la propiedad de identidad de una columna, en Oracle crea una secuencia y en Microsoft Access se crea una columna Autonumrico. Un DataColumn tambin se puede utilizar para generar valores que se incrementa automticamente mediante el establecimiento de la AutoIncrement propiedad en true. Sin embargo, usted podra terminar con valores duplicados en instancias independientes de un DataTable , si mltiples aplicaciones de cliente se genera independientemente que se incrementa automticamente los valores. Tener el servidor genera valores de incremento automtico elimina los posibles conflictos al permitir que cada usuario para recuperar el valor generado para cada fila insertada.

Durante una llamada a la actualizacin de un mtodo DataAdapter , la base de datos puede enviar datos a la aplicacin de ADO.NET como parmetros de salida o como el primer registro devuelto por el conjunto de resultados de una instruccin SELECT ejecutados en el mismo lote que la instruccin INSERT. ADO.NET puede recuperar estos valores y actualizar las columnas correspondientes en la DataRow est actualizando. Algunos motores de bases de datos, tales como el motor de base de datos Jet de Microsoft Access, no admiten parmetros de salida y no puede procesar varias instrucciones en un solo lote. Cuando se trabaja con el motor de base de datos Jet, puede recuperar el valor Autonumrico nueva genera para una fila insertada mediante la ejecucin de un comando SELECT independiente en un controlador de eventos para el RowUpdated caso de los DataAdapter .

Nota

Una alternativa al uso de un valor de incremento automtico es utilizar el NewGuid mtodo de un Guid objeto de generar un GUID, o identificador nico global, en el equipo cliente que se puede copiar en el servidor, ya que cada nueva fila se inserta. El NewGuid mtodo genera un valor binario de 16-byte que se crea utilizando un algoritmo que proporciona una alta probabilidad de que ningn valor se duplicar. En una base de datos SQL Server, un GUID se almacena en ununiqueidentifier columna que SQL Server puede generar automticamente mediante la instruccin Transact-SQL NEWID () funcin. El uso de un GUID como clave principal puede afectar negativamente el rendimiento. SQL Server 2005 introduce soporte para la NEWSEQUENTIALID () funcin, que genera un GUID secuencial que no se garantiza que sea nico en el mundo, pero que puede ser indexado de manera ms eficiente.

Recuperacin de SQL Server valores de columna de identidad


Al trabajar con Microsoft SQL Server, puede crear un procedimiento almacenado con un parmetro de salida para devolver el valor de identidad para una fila insertada. En la tabla siguiente se describen las tres funciones Transact-SQL en SQL Server que se pueden utilizar para recuperar los valores de identidad de columna.

Funcin

Descripcin

SCOPE_IDENTITY

Devuelve el ltimo valor de identidad en el mbito de ejecucin actual. SCOPE_IDENTITY se recomienda para la mayora de los escenarios. Contiene el ltimo valor de identidad generado en una tabla en la sesin actual. @ @ IDENTITY puede verse afectada por factores desencadenantes y no puede devolver el valor de identidad que usted espera. Devuelve el ltimo valor de identidad generado para una tabla especfica en cualquier sesin y cualquier mbito.

@ @ IDENTITY

IDENT_CURRENT

El procedimiento almacenado siguiente muestra cmo insertar una fila en la Categoras tabla y utilice un parmetro de salida para devolver el nuevo valor de identidad generado por la SCOPE_IDENTITY Transact-SQL () funcin.

CREAR PROCEDIMIENTO dbo.InsertCategory @ CategoryName nvarchar (15), @ Identity int OUT COMO INSERT INTO Categoras (CategoryName) VALUES (@ CategoryName) SET @ Identity SCOPE_IDENTITY = ()
El procedimiento almacenado entonces se puede especificar como la fuente de la InsertCommand de un SqlDataAdapter objeto. El CommandType propiedad de laInsertCommand se debe establecer en StoredProcedure . La salida de identidad se recupera mediante la creacin de un SqlParameter que tiene

unParameterDirection de salida . Cuando el InsertCommand se procesa, el valor de incremento automtico identidad se devuelve y se coloca en el CategoryIDcolumna de la fila actual si se establece la UpdatedRowSource propiedad de la orden de insercin para UpdateRowSource.OutputParameters oUpdateRowSource.Both . Si el comando insert ejecuta un lote que incluye una instruccin INSERT y una instruccin SELECT que devuelve el valor de identidad nuevo, entonces se puede recuperar el nuevo valor mediante el establecimiento de la UpdatedRowSource propiedad de la orden de insercin para UpdateRowSource.FirstReturnedRecord. C# VB

Private Sub RetrieveIdentity ( ByVal connectionString como cadena ) Con conexin Como SqlConnection = New SqlConnection (_ connectionString) 'Crear un objeto SqlDataAdapter basados en una consulta SELECT. Dim adaptador Como SqlDataAdapter = New SqlDataAdapter (_ "SELECT CategoryID, CategoryName DE dbo.Categories" , _ conexin) 'Crear el SqlCommand para ejecutar el procedimiento almacenado. adapter.InsertCommand = New SqlCommand ( "dbo.InsertCategory" , _ conexin) adapter.InsertCommand.CommandType = CommandType.StoredProcedure 'Agregar el parmetro para el CategoryName. Especificacin de la ParameterDirection 'para un parmetro de entrada no es necesario. adapter.InsertCommand.Parameters.Add (_ "@ CategoryName" , SqlDbType.NVarChar, 15, "CategoryName" ) 'Agregar el SqlParameter para recuperar el valor de identidad nueva. ' Especifique el ParameterDirection como de salida. Dim parmetro como SqlParameter = _ adapter.InsertCommand.Parameters.Add (_ "@ Identity" , SqlDbType.Int, 0, "CategoryID" ) parameter.Direction = ParameterDirection.Output 'Crear un DataTable y llenarla. Dim categoras Como DataTable = New DataTable adapter.Fill (categoras) "Aadir una nueva fila. Dim newRow Como DataRow = categories.NewRow () newRow ( "CategoryName" ) = "Nueva categora" categories.Rows.Add (newRow) "Actualizacin de la base de datos. adapter.Update (categoras) Console.WriteLine ( "Listar todas las filas:" ) Dim fila como DataRow para cada fila en categories.Rows Console.WriteLine ( "{0}: {1}" , row (0), fila (1)) Siguiente Fin Usando End Sub

La fusin de nuevos valores de identidad


Un escenario comn es llamar a la GetChanges mtodo de un DataTable para crear una copia que contenga slo filas cambiadas, y utilizar la nueva copia al llamar a la actualizacin de un mtodo DataAdapter . Esto es especialmente til cuando se necesita para organizar los registros cambiados a un componente independiente que realice la actualizacin. Despus de la actualizacin, la copia puede contener nuevos valores de identidad que luego debe ser incluido de nuevo en el original DataTable . Los valores de identidad posibilidad de que puedan ser diferentes de los valores originales de la DataTable . Para llevar a cabo la fusin, los valores originales de los AutoIncrement columnas de la copia debe ser preservada, con el fin de ser capaz de localizar y actualizar las filas existentes en el original DataTable , en lugar de anexar nuevas filas que contienen los valores de identidad nuevos. Sin embargo, por defecto los valores originales se pierden despus de una llamada a la actualizacin de un mtodo DataAdapter , porque AcceptChanges se llama implcitamente para cada actualizacin DataRow . Hay dos maneras de preservar los valores originales de una DataColumn en una DataRow durante un DataAdapter actualizacin: El primer mtodo para preservar los valores originales es establecer el AcceptChangesDuringUpdate propiedad de los DataAdapter a falso . Esto afecta a cada DataRow en el objeto DataTable est actualizando. Para obtener ms informacin y un ejemplo de cdigo en AcceptChangesDuringUpdate . El segundo mtodo consiste en escribir cdigo en el RowUpdated controlador de eventos

de DataAdapter para establecer el estado de SkipCurrentRow . ElDataRow se actualiza pero el valor original de cada DataColumn se conserva. Este mtodo permite conservar los valores originales de algunas filas y no para otros. Por ejemplo, el cdigo puede preservar los valores originales de las filas agregadas y no para las filas editados o borrados por primera comprobacin de la StatementType , y luego poner de estado a SkipCurrentRow slo para las filas con un StatementType de insercin . Cuando cualquiera de estos mtodos se utilizan para preservar los valores originales en un DataRow durante un DataAdapter actualizacin, ADO.NET realiza una serie de acciones para establecer los valores actuales de la DataRow a nuevos valores devueltos por los parmetros de salida o la primera fila devuelta de una Conjunto de resultados, sin dejar de preservar el valor original en cada DataColumn . En primer lugar, la AcceptChanges mtodo de la DataRow est llamada a preservar los valores actuales como valores originales, y luego los nuevos valores asignados son. A raz de estas acciones, DataRows que tuvieron su RowStatepropiedad establecida en Alta tendrn su RowState propiedad establecida en Modificado , que puede ser inesperado. Cmo los resultados del comando se aplica a cada DataRow siendo actualizado se determina por la UpdatedRowSource propiedad de cada DbCommand . Esta propiedad se establece en un valor de la System.Data.UpdateRowSource enumeracin. La siguiente tabla describe cmo los UpdateRowSource valores de la enumeracin afectar el RowState propiedad de filas actualizadas.

Persona

Descripcin

Ambos

AcceptChanges se llama y ambos valores de los parmetros de salida y / o los valores de la primera fila de cualquier conjunto de resultados devueltos se colocan en el DataRow est actualizando. Si no hay valores a aplicar, el RowState ser sin cambios . Si una fila se ha vuelto, AcceptChanges , se llama y la fila se asignan a la fila modificada en DataTable , estableciendo el RowState deModified . Si no hay ninguna fila se devuelve, entonces AcceptChanges no se llama y el RowState permanece Alta .

FirstReturnedRecord

Ninguno

Los parmetros devueltos o filas se ignoran. No hay ninguna llamada a AcceptChanges y RowState sigue siendo aadida . AcceptChanges , se llama y cualquier parmetro de salida se asignan a la fila modificada en DataTable , estableciendo el RowState deModified . Si no hay parmetros de salida, el RowState ser sin cambios .

OutputParameters

Ejemplo
Este ejemplo muestra la extraccin de filas cambiadas de un DataTable y el uso de un SqlDataAdapter para actualizar el origen de datos y recuperar un valor de columna de identidad nueva. El InsertCommand ejecuta dos instrucciones Transact-SQL, la primera es la declaracin INSERT, y la segunda es una instruccin SELECT que utiliza la funcin SCOPE_IDENTITY para recuperar el valor de identidad.

INSERT INTO dbo.Shippers (CompanyName) VALUES (@ CompanyName); SELECT ShipperID, CompanyName DE dbo.Shippers DONDE ShipperID SCOPE_IDENTITY = ();
El UpdatedRowSource propiedad de la orden de insercin se establece en UpdateRowSource.FirstReturnedRow y la MissingSchemaAction propiedad de losDataAdapter se establece MissingSchemaAction.AddWithKey . La DataTable se llena y el cdigo agrega una nueva fila a la DataTable . Las filas modificadas se extraen a continuacin en un nuevo DataTable , que se pasa a los DataAdapter , que a continuacin, actualiza el servidor. C# VB

Private Sub MergeIdentityColumns ( ByVal connectionString como cadena ) Con conexin Como SqlConnection = New SqlConnection (_ connectionString) 'Crear el DataAdapter Dim adaptador Como SqlDataAdapter = New SqlDataAdapter (_ "SELECT ShipperID, CompanyName DE dbo.Shippers" , conexin) 'Agregar el InsertCommand para recuperar el valor de identidad nueva. adapter.InsertCommand = New SqlCommand (_ "INSERT INTO dbo.Shippers (CompanyName)" & _ "VALUES (@ CompanyName)," & _ "SELECT ShipperID, CompanyName DE dbo.Shippers" & _ "WHERE ShipperID SCOPE_IDENTITY = ();" , _ conexin) 'Agregar el parmetro para el valor introducido. adapter.InsertCommand.Parameters.Add (_ New SqlParameter ( "@ CompanyName" , SqlDbType.NVarChar, 40, _ "CompanyName" )) adapter.InsertCommand.UpdatedRowSource = UpdateRowSource.Both "MissingSchemaAction agrega cualquier esquema que faltan para 'la DataTable, incluidas las columnas de identidad adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey 'Llenar el DataTable. Dim expedidor Como Nuevo DataTable adapter.Fill (expedidor) 'Aadir un nuevo exportador.

Dim newRow Como DataRow = shipper.NewRow () newRow ( "CompanyName" ) = "nuevos exportadores" shipper.Rows.Add (newRow) "Aadir registros cambiados a un nuevo objeto DataTable. Esta DataTable 'ser utilizado por el DataAdapter. Dim dataChanges Como DataTable = shipper.GetChanges () 'Agregar el controlador de eventos. AddHandler adapter.RowUpdated, Nueva _ SqlRowUpdatedEventHandler ( AddressOf OnRowUpdated) 'Actualizar el origen de datos con los registros modificados. adapter.Update (dataChanges) 'Combinar las dos tablas de datos. shipper.Merge (dataChanges) 'Confirmar los cambios. shipper.AcceptChanges () Console.WriteLine ( "Filas despus de la fusin." ) Dim fila como DataRow para cada fila en shipper.Rows Console.WriteLine ( "{0}: {1}" , row (0), fila (1)) Siguiente Fin Usando End Sub
El OnRowUpdated controlador de eventos comprueba la StatementType de la SqlRowUpdatedEventArgs para determinar si la fila es una pieza de insercin. Si es as, entonces el estado de propiedad se establece en SkipCurrentRow . La fila se actualiza, pero los valores originales de la fila se conservan. En el cuerpo principal del procedimiento, la mezcla se llama al mtodo para combinar el nuevo valor de identidad en el original DataTable , y finalmente AcceptChanges se llama. C# VB

Private Sub OnRowUpdated (_ ByVal remitente como objeto , ByVal e como SqlRowUpdatedEventArgs) 'Si se trata de una insercin, a continuacin, omita esta fila. Si e.StatementType = StatementType.Insert Entonces e.Status = UpdateStatus.SkipCurrentRow Fin Si Fin Sub

Recuperar valores Autonumrico de Access de Microsoft


En esta seccin se incluye un ejemplo que muestra cmo recuperar Autonumrico valores de una base de datos Jet 4.0. El motor de base de datos Jet no es compatible con la ejecucin de varias instrucciones en un lote o el uso de los parmetros de salida, por lo que no es posible utilizar cualquiera de estas tcnicas para devolver el nuevo Autonumber valor asignado a una fila insertada. Sin embargo, puede agregar cdigo al RowUpdated controlador de eventos que ejecuta una separada SELECT @ @ IDENTITY para recuperar el nuevo Autonumrico valor.

Ejemplo
En lugar de agregar la informacin del esquema mediante MissingSchemaAction.AddWithKey , este ejemplo se configura un DataTable con el esquema correcto antes de llamar a los OleDbDataAdapter para llenar el DataTable . En este caso, el CategoryID columna est configurado para disminuir el valor asignado a cada fila insertada a partir de cero, mediante el establecimiento de AutoIncrement a verdadero , AutoIncrementSeed a 0, y AutoIncrementStep a -1. El cdigo se le aaden dos nuevas filas y utiliza GetChanges para aadir las filas cambiado a un nuevo DataTable que se pasa a la actualizacin mtodo. C# VB

Compartido conexin Como OleDbConnection = Nada Private Shared Sub MergeIdentityColumns ( ByVal conexin Como OleDbConnection) Con conexin 'Crear un DataAdapter basados en una consulta SELECT. Dim adaptador Como OleDbDataAdapter = New OleDbDataAdapter (_ "SELECT CategoryID, CategoryName FROM Categoras" , _ conexin) 'Crear el comando INSERT para la nueva categora. adapter.InsertCommand = New OleDbCommand (_ "INSERT INTO Categoras (CategoryName) Valores (?)" , conexin) adapter.InsertCommand.CommandType = CommandType.Text 'Agregar el parmetro para el CategoryName. adapter.InsertCommand.Parameters.Add (_ "@ CategoryName" , OleDbType.VarWChar, 15, "CategoryName" ) adapter.InsertCommand.UpdatedRowSource = UpdateRowSource.Both 'Crear un DataTable. Dim categoras Como DataTable = New DataTable 'Crear la columna CategoryID y establezca su auto -propiedades incrementando a disminuir a partir de cero. Dim columna como New DataColumn () column.DataType = System.Type. GetType ( "System.Int32" ) column.ColumnName = "CategoryID" column.AutoIncrement = Verdadero column.AutoIncrementSeed = 0 column.AutoIncrementStep = -1 categories.Columns.Add (columna) 'Crear la columna CategoryName. columna = New DataColumn () column.DataType = System.Type. GetType ( "System.String" ) column.ColumnName = "CategoryName" categories.Columns.Add (columna) 'Establecer la clave principal en CategoryID. Dim PKey (1) Como DataColumn PKey (0) = categories.Columns ( "CategoryID" ) categories.PrimaryKey = PKey 'Recuperar los datos y llenar el DataTable. adapter.Fill (categoras) "Aadir una nueva fila.

Dim newRow Como DataRow = categories.NewRow () newRow ( "CategoryName" ) = "Nueva categora" categories.Rows.Add (newRow) "Aadir otra nueva fila. Dim newRow2 Como DataRow = categories.NewRow () newRow2 ( "CategoryName" ) = "Otra nueva categora" categories.Rows.Add (newRow2) "Aadir registros cambiados a un nuevo objeto DataTable que se 'utilizan para exponer las inserciones a la base de datos. Dim dataChanges As DataTable = categories.GetChanges () "Incluir un evento para rellenar el valor Autonumrico. AddHandler adapter.RowUpdated, _ New OleDbRowUpdatedEventHandler ( AddressOf OnRowUpdated) "Actualizacin de la base de datos, insertar las nuevas filas. adapter.Update (dataChanges) Console.WriteLine ( "Filas antes de fusionarse:" ) Dim row1 Como DataRow Para Cada row1 En categories.Rows Console.WriteLine ( "{0}: {1}" , row1 (0), row1 (1)) Siguiente 'Combinar las dos tablas de datos. categories.Merge (dataChanges) 'Confirmar los cambios. categories.AcceptChanges () Console.WriteLine ( "Filas despus de la fusin:" ) Dim fila como DataRow para cada fila en categories.Rows Console.WriteLine ( "{0}: {1}" , row (0), fila (1)) Siguiente Fin Usando End Sub
El RowUpdated controlador de eventos utiliza el mismo abierto OleDbConnection como la actualizacin de la declaracin de los OleDbDataAdapter . Se comprueba la StatementType de los OleDbRowUpdatedEventArgs para las filas insertadas. Para cada fila insertada una nueva OleDbCommand se crea para ejecutar la instruccin SELECT @ @ IDENTITY en la conexin y devuelve el nuevo Autonumber valor, que se coloca en el CategoryID columna de la DataRow . Elestado de propiedad se establece en UpdateStatus.SkipCurrentRow para suprimir la llamada oculta a AcceptChanges . En el cuerpo principal del procedimiento, la mezcla se llama al mtodo para fusionar las dos DataTable objetos, y finalmente AcceptChanges se llama. C# VB

Private Shared Sub OnRowUpdated (_ ByVal remitente como objeto , ByVal e como OleDbRowUpdatedEventArgs) 'condicionalmente ejecuta este bloque de cdigo en slo inserta. Si e.StatementType = StatementType.Insert Entonces 'Recuperar la Autonumrico y gurdelo en la columna CategoryID. Dim cmdNewID Como New OleDbCommand ( "SELECT @ @ IDENTITY" , _ conexin) e.Row ( "CategoryID" ) = CInt (cmdNewID.ExecuteScalar)

e.Status = UpdateStatus.SkipCurrentRow Fin Si Fin Sub

Trabajar con eventos DataAdapter


. NET Framework 2.0
Otras versiones 6 de cada 11 ha calificado este til - Valorar este tema Los ADO.NET DataAdapter expone tres eventos que puede utilizar para responder a los cambios realizados en los datos del origen de datos. La siguiente tabla muestra los DataAdapter eventos.

Evento RowUpdatin g RowUpdated

Descripcin Una instruccin UPDATE, INSERT o DELETE en una fila (mediante una llamada a uno de los Actualice mtodos) est a punto de comenzar. Una instruccin UPDATE, INSERT o DELETE en una fila (mediante una llamada a uno de los Actualice mtodos) se ha completado. Se produjo un error durante una Fill operacin.

FillError

RowUpdating y RowUpdated
RowUpdating se provoca antes de cualquier actualizacin de una fila del conjunto de datos se ha procesado en el origen de datos. RowUpdated se produce despus de cualquier actualizacin de una fila del conjunto de datos se ha procesado en el origen de datos. Como resultado de ello, puede utilizar RowUpdatingpara modificar el comportamiento de actualizacin antes de que suceda, para proporcionar un control adicional cuando se produzca una actualizacin, para mantener una referencia a una fila actualizada, para cancelar la actualizacin actual y lo marcar para un proceso por lotes para ser procesados despus, y as sucesivamente. RowUpdated es til para responder a los errores y excepciones que se producen durante la actualizacin. Puede agregar informacin de error alconjunto de datos , as como la lgica de reintento, y as sucesivamente. Los RowUpdatingEventArgs y RowUpdatedEventArgs argumentos que se pasan a los RowUpdating y RowUpdated eventos son los siguientes: a Comandopropiedad que hace referencia el Comando objeto que se utiliza para realizar la actualizacin, una fila que hace referencia a la propiedad DataRow objeto que contiene la informacin actualizada, un StatementType propiedad para qu tipo de actualizacin se est realizando, el TableMapping , en su caso, y el estado de la operacin. Usted puede utilizar el estado de propiedad para determinar si ha ocurrido un error durante la operacin y, si se desea, para controlar las acciones en contra de las filas actuales y resultante. Cuando se produce el evento, el estado de la propiedad es igual a cualquiera de los dos Continuar o ErrorsOccurred . La siguiente tabla muestra los valores a los que se puede establecer la Situacin propiedad con el fin de controlar las acciones posteriores durante la actualizacin.

Estado Continuar ErrorsOccurred SkipCurrentRow SkipAllRemainingRows

Descripcin Continuar la operacin de actualizacin. Abortar la operacin y actualizacin de una excepcin. No haga caso de la fila actual y continuar con la operacin de actualizacin. Abortar la operacin de actualizacin, pero no una excepcin.

Ajuste del Estado a la propiedad ErrorsOccurred produce una excepcin que se produce. Puede controlar qu excepcin se produce mediante el establecimiento de la Errores propiedad a la excepcin deseada. Utilizando uno de los otros valores de Estado impide que una excepcin sea lanzada. Tambin puede utilizar el ContinueUpdateOnError propiedad para controlar los errores para las filas actualizadas. Si DataAdapter.ContinueUpdateOnError escierto , cuando una actualizacin de los resultados de una fila en una excepcin siendo arrojada, el texto de la excepcin se coloca en el RowError informacin de la fila en particular, y el proceso contina sin lanzar una excepcin. Esto le permite responder a los errores cuando la actualizacin se haya completado, en contraste con la RowUpdated evento, que le permite responder a los errores cuando el error es encontrado. El ejemplo de cdigo siguiente se muestra cmo agregar y quitar controladores de eventos. El RowUpdating controlador de eventos escribe un registro de todos los registros borrados con una marca de tiempo. El RowUpdated controlador de eventos agrega informacin de error al RowError propiedad de la fila en elDataSet , suprime la excepcin, y contina el procesamiento (que refleja el comportamiento de ContinueUpdateOnError = verdadero ). C# VB

"Se supone que la conexin es un objeto SqlConnection vlida. Dim custAdapter Como SqlDataAdapter = New SqlDataAdapter (_ "SELECT IdCliente, NombreCompaa FROM Clientes" , conexin) "Aadir controladores. AddHandler custAdapter.RowUpdating, Nueva SqlRowUpdatingEventHandler ( "Definicin de las propiedades de comando DataAdapter, DataSet rellenar y modificar DataSet. custAdapter.Update (custDS, "Clientes" ) 'Quitar controladores. RemoveHandler custAdapter.RowUpdating, _ New SqlRowUpdatingEventHandler ( AddressOf OnRowUpdating) RemoveHandler custAdapter.RowUpdated, _ New SqlRowUpdatedEventHandler ( AddressOf OnRowUpdated) Private Shared Sub OnRowUpdating (remitente como objeto , _ args Como SqlRowUpdatingEventArgs) Si args.StatementType = StatementType.Delete Entonces Dim tw Como System.IO.TextWriter = _ System.IO.File.AppendText ( "Deletes.log" ) tw.WriteLine (_ "{0}: {1} Cliente eliminados." , DateTime.Now, args.Row (_ "CustomerID" , DataRowVersion.Original)) tw.Close () Fin Si

Fin Sub Private Shared Sub OnRowUpdated (_ remitente como objeto , args Como SqlRowUpdatedEventArgs) Si args.Status = UpdateStatus.ErrorsOccurred args.Status = UpdateStatus.SkipCurrentRow args.Row.RowError = args.Errors.Message Fin Si Fin Sub

FillError
Los DataAdapter emite el FillError evento cuando se produce un error durante una Fill operacin. Este tipo de error se produce normalmente cuando los datos de la fila que se aade no se pudo convertir a un tipo de marco. NET sin alguna prdida de precisin. Si se produce un error durante una Fill operacin, la fila actual no se agrega a la DataTable . El FillError evento permite resolver el error y agregar la fila, o hacer caso omiso de la fila excluidos y continuar con el relleno operacin. El FillErrorEventArgs pasa al FillError evento puede contener varias propiedades que le permiten responder y resolver errores. La tabla siguiente muestra las propiedades de la FillErrorEventArgs objeto.

Propiedad Errores DataTabl e Valores

Descripcin La excepcin que se produjo. La DataTable objeto que se llena cuando se produjo el error.

Matriz de objetos que contiene los valores de la fila que se agrega cuando se produjo el error. Las referencias ordinales de la Valores matriz corresponden a las referencias ordinales de las columnas de la fila que se agrega. Por ejemplo, los valores [0] es el valor que se aada como la primera columna de la fila. Le permite elegir si desea o no una excepcin. Ajuste del Continuar propiedad a falso detendr la corriente de llenado , operacin y se iniciar una excepcin se. Ajuste Continuar a cierto sigue el relleno operacin a pesar del error.

Continuar

En el ejemplo de cdigo siguiente se agrega un controlador de eventos para el FillError caso de los DataAdapter . En la FillError cdigo de evento, el ejemplo determina si existe el potencial para la prdida de precisin, proporcionando la oportunidad de responder a la excepcin. C# VB

AddHandler adapter.FillError, Nueva FillErrorEventHandler (_ AddressOf FillError) Dim dataSet Como DataSet = New DataSet adapter.Fill (dataSet, "ThisTable" ) Private Shared Sub FillError (remitente como objeto , _ args Como FillErrorEventArgs) Si args.Errors. GetType () Es el tipo. GetType ( "System.OverflowException" ) Entonces 'Cdigo para manejar la prdida de precisin. " Agregar una fila a la tabla con los valores de las dos primeras columnas. DataRow Myrow = args.DataTable.Rows.Add ( Nuevo objeto () _ {Args.Values (0), args.Values (1), DBNull.Value}) 'Establecer el RowError que contiene el valor de la tercera columna.

args.RowError = _ "OverflowException encontr Valor de fuente de datos:." & _ args.Values (2) args. Continuar = Verdadero Final Si End Sub

Realizar operaciones por lotes mediante DataAdapters


. NET Framework 2.0
Otras versiones 1 de 2 puntuado este til - Valorar este tema Apoyo lotes en ADO.NET permite un DataAdapter para INSERT grupo, UPDATE y DELETE de un DataSet o DataTable con el servidor, en lugar de enviar una operacin a la vez. La reduccin en el nmero de viajes de vuelta al servidor tpicamente resulta en mejoras significativas de rendimiento. Las actualizaciones por lotes son compatibles con los proveedores. NET para SQL Server ( System.Data.SqlClient ) y Oracle ( System.Data.OracleClient ).

Realizacin de actualizaciones por lotes con DataAdapter


. NET Framework 2.0
9 de cada 12 ha calificado este til - Valorar este tema Cuando se actualiza una base de datos con los cambios de un conjunto de datos de versiones anteriores de ADO.NET, la actualizacin de un mtodo DataAdapterrealiza cambios a la base de datos de una fila a la vez. A medida que itera a travs de las filas de la especificada DataTable , examin cada DataRow para ver si se haba modificado. Si la fila se ha modificado, llamado el apropiado UpdateCommand , InsertCommand o DeleteCommand , dependiendo del valor de la RowStatepropiedad para esa fila. Cada actualizacin de fila trata de una red de ida y vuelta a la base de datos. En ADO.NET 2.0, los DataAdapter expone una UpdateBatchSize propiedad. Ajuste de la UpdateBatchSize a un valor entero positivo hace que las actualizaciones de la base de datos para ser enviados como lotes del tamao especificado. Por ejemplo, establecer el UpdateBatchSize a 10 agrupar a 10 estados independientes y presentarlos como nico lote. Ajuste de la UpdateBatchSize a 0 har que los DataAdapter para utilizar el tamao ms grande de lote que el servidor puede manejar. Si se establece en 1 desactiva las actualizaciones por lotes, como filas se envan uno a la vez.

Ejecucin de un lote muy grande puede disminuir el rendimiento. Por lo tanto, usted debe comprobar el ajuste de tamao de lote ptimo antes de implementar la aplicacin.

Utilizar la propiedad UpdateBatchSize


Cuando las actualizaciones por lotes estn habilitadas, el UpdatedRowSource valor de la propiedad de los DataAdapter UpdateCommand , InsertCommand yDeleteCommand se debe establecer en Ninguno o OutputParameters . Cuando se realiza una actualizacin por lotes, el comando de UpdatedRowSource valor de la propiedad de FirstReturnedRecord o dos no es vlido. El procedimiento siguiente se muestra el uso de la UpdateBatchSize propiedad. El procedimiento toma dos argumentos, un conjunto de datos de objetos que tiene columnas que representan la ProductCategoryID y Nombre de los campos en el Production.ProductCategory mesa, y un entero que representa el tamao del lote (el nmero de filas en el lote). El cdigo crea un nuevo SqlDataAdapter objeto, estableciendo su UpdateCommand , InsertCommand y DeleteCommandpropiedades. El cdigo supone que el conjunto de datos objeto ha modificado filas. Se establece el UpdateBatchSize propiedad y ejecuta la actualizacin. C# VB

Public Sub batchUpdate (_ ByVal dataTable Como DataTable, ByVal batchSize Como Int32) 'Asume GetConnectionString () devuelve una cadena de conexin vlida. Dim connectionString Como cadena GetConnectionString = () 'Conectar a la base de datos AdventureWorks. Utilizando conexin Como Nuevo SqlConnection (connectionString) 'Crear un objeto SqlDataAdapter. Dim adaptador Como Nuevo SqlDataAdapter () 'Establecer el comando UPDATE y parmetros. adapter.UpdateCommand = New SqlCommand (_ "UPDATE SET Production.ProductCategory" _ Y "Nombre = @ Nombre DONDE ProductCategoryID = @ ProdCatID:" , _ conexin) adapter.UpdateCommand.Parameters.Add ( "@ Name" , _ SqlDbType.NVarChar, 50, "Nombre" ) adapter.UpdateCommand.Parameters.Add ( "@ ProdCatID" , _ SqlDbType.Int, 4, "ProductCategoryID" ) adapter.UpdateCommand.UpdatedRowSource = _ UpdateRowSource.None 'Establecer el comando INSERT y parmetros. adapter.InsertCommand = New SqlCommand (_ "INSERT INTO Production.ProductCategory (nombre) VALUES (@ Name):" , _ conexin) adapter.InsertCommand.Parameters.Add ( "@ Name" , _ SqlDbType.NVarChar, 50, "Nombre" ) adapter.InsertCommand.UpdatedRowSource = _ UpdateRowSource.None 'Establecer el comando DELETE y parmetros. adapter.DeleteCommand = New SqlCommand (_ "DELETE FROM Production.ProductCategory" _ Y "DONDE ProductCategoryID = @ ProdCatID"; , conexin) adapter.DeleteCommand.Parameters.Add ( "@ ProdCatID" , _ SqlDbType.Int, 4, "ProductCategoryID" ) adapter.DeleteCommand.UpdatedRowSource = UpdateRowSource.None 'Establecer el tamao del lote. adapter.UpdateBatchSize = batchSize

'Ejecuta la actualizacin. adapter.Update (DataTable) Fin Usando End Sub

Manejo de lotes de actualizacin relacionados con eventos y errores


. NET Framework 2.0
1 de 2 puntuado este til - Valorar este tema Los DataAdapter tiene dos eventos relacionados actualizacin: RowUpdating y RowUpdated . En las versiones anteriores de ADO.NET, cuando el procesamiento por lotes est desactivado, cada uno de estos eventos se genera una vez para cada fila procesada. RowUpdating se genera antes de que la actualizacin se produce, y RowUpdated se genera despus de la actualizacin de la base de datos se ha completado.

Cambios en los eventos de comportamiento con actualizaciones por lotes


Cuando el procesamiento por lotes est habilitado, se actualizan varias filas en una operacin de base de datos nica. Por lo tanto, slo una RowUpdated evento se produce para cada lote, mientras que el RowUpdating evento se produce para cada fila procesada. Cuando el procesamiento por lotes est desactivado, los dos eventos se activan con uno-a-uno entrelazado, donde se RowUpdating evento y un RowUpdated fuego de eventos para una fila y luego una RowUpdating y unRowUpdated fuego de eventos para la siguiente fila, hasta que todo el filas se procesan.

Acceso a registros actualizados


Cuando se desactiva el procesamiento por lotes, la fila se actualiza se puede acceder mediante la Fila propiedad de la RowUpdatedEventArgs clase. Cuando se habilita el procesamiento por lotes, un solo RowUpdated evento se genera para varias filas. Por lo tanto, el valor de la fila de propiedades de cada fila es nulo. RowUpdating eventos todava se generan para cada fila. El CopyToRows mtodo de la RowUpdatedEventArgs clase le permite acceder a las filas procesadas por copiar las referencias a las filas en una matriz. Si no hay filas se estn procesando, CopyToRows lanza una ArgumentNullException . Utilice el RowCountpropiedad para devolver el nmero de filas procesadas antes de llamar al CopyToRows mtodo.

Manejo de Errores de datos


Ejecucin de lotes tiene el mismo efecto que la ejecucin de cada instruccin individual. Las sentencias se ejecutan en el orden en que las declaraciones se aadieron a la mezcla. Los errores se manejan de la misma manera en el modo por lotes como lo son cuando el modo por lotes est desactivado. Cada fila se procesa por separado. Slo las filas que se han procesado correctamente en la base de datos se actualizar en el correspondiente DataRow en el objeto DataTable . El proveedor de datos y el servidor de base de datos back-end determinar qu construcciones SQL son compatibles con la ejecucin del lote. Una excepcin se puede producir si una declaracin no compatible se presenta para su ejecucin.

Actualizar orgenes de datos con comandos


. NET Framework 2.0
Otras versiones Este tema an no ha sido calificado - Valorar este tema El uso de un. NET Framework, puede ejecutar procedimientos almacenados o datos de lenguaje de definicin de estados (por ejemplo, CREATE TABLE y ALTER COLUMN) para la manipulacin de esquema en una base de datos o catlogo. Estos comandos no devuelven filas como una consulta que, por lo que el Comandoobjeto proporciona una ExecuteNonQuery para procesarlos. Adems de utilizar ExecuteNonQuery para modificar esquema, tambin se puede utilizar este mtodo para procesar las sentencias de SQL que modifican datos, pero que no devuelven filas, como INSERT, UPDATE y DELETE. Aunque las filas no son devueltos por el ExecuteNonQuery mtodo, parmetros de entrada y de salida y valores de retorno puede ser aprobada y devuelta a travs de los parmetros de la toma del Comando objeto.

Modificar datos en un origen de datos


. NET Framework 2.0
Otras versiones Este tema an no ha sido calificado - Valorar este tema Sentencias SQL que modifican datos (como INSERT, UPDATE o DELETE) no devuelven filas. Del mismo modo, muchos de los procedimientos almacenados realizar una accin pero no devuelven filas. Para ejecutar comandos que no devuelven filas, crear un Comando objeto con el correspondiente comando SQL y unaconexin , incluidos los necesarios parmetros . Ejecuta el comando con el ExecuteNonQuery mtodo del Comando objeto. El ExecuteNonQuery mtodo devuelve un entero que representa el nmero de filas afectadas por la instruccin o un procedimiento almacenado que se ejecuta. Si mltiples sentencias se ejecutan, el valor devuelto es la suma de los registros afectados por todas las sentencias ejecutadas.

Ejemplo
En el ejemplo de cdigo siguiente se ejecuta una instruccin INSERT para insertar un registro en una base de datos utilizando ExecuteNonQuery . C# VB

"Supone una conexin SqlConnection vlida. Connection.Open () Dim queryString Como cadena = "INSERT INTO Clientes" & _

"(CustomerID, CompanyName) values ('NWIND', 'Neptuno')" Dim comando como SqlCommand = New SqlCommand (queryString, conexin) Dim RecordsAffected Como Int32 command.ExecuteNonQuery = ()
En el ejemplo de cdigo siguiente se ejecuta el procedimiento almacenado creado por el cdigo de ejemplo de realizacin de operaciones de catlogo . No hay filas devuelto por el procedimiento almacenado, por lo que el ExecuteNonQuery mtodo se utiliza, pero el procedimiento almacenado recibe un parmetro de entrada y devuelve un parmetro de salida y un valor de retorno. Para la OleDbCommand objeto, la ReturnValue parmetro debe ser aadido a la Parmetros primera coleccin. C# VB

"Supone una conexin SqlConnection vlida. Dim comando como SqlCommand = _ New SqlCommand ( "InsertCategory" , conexin) command.CommandType = CommandType.StoredProcedure Dim parmetro como SqlParameter = _ command.Parameters.Add ( "@ RowCount" , SqlDbType.Int) parameter.Direction = ParameterDirection.ReturnValue parmetro = command.Parameters.Add (_ "@ CategoryName" , SqlDbType.NChar, 15) parmetro = command.Parameters.Add ( "@ Identity" , SqlDbType.Int) parameter.Direction = ParameterDirection.Output command.Parameters ( "@ CategoryName" ). Valor = "Nueva categora" command.ExecuteNonQuery () Dim categoryID Como Int32 = CInt (command.Parameters ( "@ Identity" ). Value) Dim rowCount Como Int32 = CInt (command.Parameters ( "@ RowCount" ). Value)

Realizar operaciones de catlogo


. NET Framework 2.0
Otras versiones Este tema an no ha sido calificado - Valorar este tema Para ejecutar un comando para modificar una base de datos o un catlogo, como por ejemplo la sentencia CREATE PROCEDURE o CREATE TABLA, cree un comando objeto utilizando las declaraciones apropiadas de SQL y una conexin de objetos. Ejecuta el comando con el ExecuteNonQuery mtodo del Comandoobjeto. En el ejemplo de cdigo siguiente se crea un procedimiento almacenado en una base de datos Microsoft SQL Server. C# VB

"Supone una conexin SqlConnection vlida. Dim queryString Como cadena = "CREATE PROCEDURE InsertCategory" & _ "@ CategoryName nchar (15)," & _

"@ int Identidad OUT" & _ "AS" & _ "INSERT INTO Categoras (CategoryName ) VALUES (@ CategoryName) " & _ "SET @ Identity = @ @ Identity" & _ "RETURN @ @ ROWCOUNT" Dim comando como SqlCommand = New SqlCommand (queryString, conexin) command.ExecuteNonQuery ()

Escribir valores BLOB en un origen de datos


. NET Framework 2.0
Otras versiones 11 de los 11 ha calificado este til - Valorar este tema Usted puede escribir un objeto binario grande (BLOB) en una base de datos en forma de datos binarios o de caracteres, dependiendo del tipo de campo en el origen de datos. Para escribir un valor BLOB en la base de datos, emita el correspondiente INSERT o UPDATE y pasar el valor BLOB como parmetro de entrada (veaTrabajar con parmetros de comandos ). Si el BLOB se almacena como texto, como un SQL Server de texto de campo, se puede pasar el BLOB como un parmetro de cadena. Si el BLOB se almacena en formato binario, tal como SQL Server imagen de campo, puede pasar un array de tipo byte como parmetro binario.

Nota Un BLOB puede ser bastante grande y por lo tanto puede consumir memoria del sistema significativo cuando se escribe como un nico valor, disminuyendo el rendimiento de la aplicacin. Para reducir la cantidad de memoria utilizada para escribir un valor BLOB, puede escribir el BLOB de la base de datos en "fragmentos". El proceso de escribir un BLOB en una base de datos de esta manera depende de la capacidad de la fuente de datos. Para un ejemplo de cmo escribir un valor BLOB en SQL Server en trozos, consulte la conservacin de recursos al escribir valores BLOB en SQL Server .
En el ejemplo de cdigo siguiente se agrega informacin de los empleados al Personal mesa en el Northwind base de datos. Una foto del empleado se lee de un archivo y se aadi a la Foto campo de la tabla, que es una imagen de campo. C# VB

Public Shared Sub AddEmployee (_ lastName como cuerdas , _ firstName como cuerdas , _ ttulo como cuerdas , _ HIREDATE Como DateTime, _ reportsTo Como Integer , _ photoFilePath Como cadena , _ connectionString como cadena ) Dim foto () como Byte = GetPhoto (photoFilePath)

Con conexin Como SqlConnection = New SqlConnection (_ connectionString) Dim comando como SqlCommand = New SqlCommand (_ "INSERT INTO Empleados (Apellido, Ttulo Nombre," & _ "HireDate, Jefe, por foto)" & _ "Values (@ LastName, @ Nombre, @ Title," & _ "@ HireDate, @ Jefe, por @ Foto) " , conexin) command.Parameters.Add ( "@ Apellidos" , _ SqlDbType.NVarChar, 20). Valor = lastName command.Parameters.Add ( "@ Nombre" , _ SqlDbType.NVarChar, 10). Valor = firstName command.Parameters.Add ( "Title @" , _ SqlDbType.NVarChar, 30). Valor = ttulo command.Parameters.Add ( "@ HireDate" , _ SqlDbType.DateTime). Valor = hireDate command.Parameters.Add ( "@ ReportsTo" , _ SqlDbType.Int). Valor = reportsTo command.Parameters.Add ( "@ Foto" , _ SqlDbType.Image, photo.Length). Valor = foto Connection.Open () command.ExecuteNonQuery () Fin Usando End Sub Public Shared Funcin GetPhoto (filePath Como cadena ) Como Byte () Dim stream Como FileStream = nuevo FileStream (_ filePath, FileMode.Open, FileAccess.Read) Dim lector Como BinaryReader = nuevo BinaryReader (stream) Dim foto () Como Byte = reader.ReadBytes (stream.Length) reader.Close () Stream.Close () Volver foto Fin Funcin

Realizar transacciones
. NET Framework 2.0
Otras versiones 1 de 1 puntuado este til - Valorar este tema Las transacciones son grupos de operaciones combinadas en unidades lgicas de trabajo. Se utilizan para controlar y mantener la consistencia e integridad de cada accin en una transaccin, a pesar de los errores que pueden producirse en el sistema.

Por ejemplo, en una aplicacin de banca, donde se transfieren los fondos de una cuenta a otra, de una cuenta se acredita una cantidad en una tabla de base de datos, y otra cuenta se carga la misma cantidad al mismo tiempo en otra tabla de base de datos. Debido a que las computadoras pueden fallar, es posible actualizar una fila en una tabla, pero no actualiza la fila de la otra tabla. Si su base de datos soporta transacciones, se pueden agrupar varias operaciones de base de datos en una sola transaccin de base de datos para evitar inconsistencias. Si se produce un error en un momento de la transaccin, todas las actualizaciones se pueden revertir a su estado previo a la transaccin. Si no se producen errores, las actualizaciones pueden ser ultimado por cometer la transaccin completa. Las transacciones en los servidores de base de datos por lo general deben ajustarse a las propiedades ACID atomicidad, consistencia, aislamiento y durabilidad - con el fin de calificar como transacciones. La mayora de los sistemas de bases de datos relacionales, como Microsoft SQL Server, intrnsecamente admite transacciones, proporcionando bloqueo, extraccin de madera, y las instalaciones de gestin de transacciones para las transacciones implcitas, que se producen cada vez que un cliente realiza una solicitud de actualizacin, insercin o eliminacin. Internamente puede crear transacciones explcitas utilizando el SQL BEGIN TRANSACTION , COMMIT TRANSACTION o ROLLBACK TRANSACTION declaraciones.

Realizacin de una transaccin


. NET Framework 2.0
Otras versiones

9 de cada 23 ha calificado este til - Valorar este tema Las transacciones en ADO.NET se utilizan cuando se desea enlazar varias tareas juntos para que se ejecute como una sola unidad de trabajo. Por ejemplo, imagine que una aplicacin realiza dos tareas. En primer lugar, se actualiza una tabla con la informacin del pedido. En segundo lugar, se actualiza una tabla que contiene informacin de inventario, el adeudo de los artculos pedidos. Si bien la tarea falla, los actualiza ambos se deshacen.

Determinacin del tipo de transaccin


Una transaccin considerada como una transaccin local cuando se trata de una operacin de una sola fase y est a cargo de la base de datos directamente. Las transacciones se considera que las transacciones distribuidas cuando se coordinan por un monitor de transacciones y el uso a prueba de fallas (tales como mediante mecanismos de compromiso en dos fases) para la resolucin de transaccin. Cada uno de los. NET Framework proveedores de datos tiene su propia transaccin objeto de realizar transacciones locales. Si necesita que una transaccin se realiza en una base de datos SQL Server, a continuacin, elija una System.Data.SqlClient transaccin. Para una transaccin de Oracle, utilice elSystem.Data.OracleClient proveedor. Adems, hay un nuevo DbTransaction clase que est disponible para la escritura de cdigo independiente del proveedor que requiere que las transacciones.

Nota

Las transacciones son ms eficientes cuando se realiza en el servidor. Si est trabajando con una base de datos

de SQL Server que hace un uso extensivo de las transacciones explcitas, usted debe considerar escribirlas como procedimientos almacenados mediante la instruccin Transact-SQL BEGIN TRANSACTION. Para obtener ms informacin sobre la realizacin de transacciones en el servidor, vea los Libros en pantalla de SQL Server.

Realizacin de una transaccin Uso de una conexin individual


En ADO.NET, puede controlar las transacciones con la conexin de objeto. Usted puede iniciar una transaccin local con el BeginTransaction mtodo. Una vez que haya iniciado una transaccin, usted puede contar con un comando en la transaccin con la transaccin de una propiedad Comando objeto. A continuacin, puede confirmar o deshacer las modificaciones realizadas en el origen de datos basado en el xito o el fracaso de los componentes de la transaccin.

Nota

El EnlistDistributedTransaction mtodo no se debe utilizar para una transaccin local.


El alcance de la transaccin est limitada a la conexin. El ejemplo siguiente realiza una transaccin explcita que consiste en dos comandos separados en el intentode bloque. Los comandos se ejecutan instrucciones INSERT con la Production.ScrapReason mesa en la AdventureWorks base de datos SQL Server 2005 muestra que se han comprometido si no se producen excepciones. El cdigo de la captura bloque deshace la transaccin si se produce una excepcin. Si la transaccin se cancela o se cierra la conexin antes de que la transaccin se ha completado, automticamente se revierte. Los pasos siguientes se utilizan para realizar una transaccin:

Procedimientos
Para realizar una transaccin
1. 2.
Llame a la BeginTransaction mtodo de la SqlConnection objeto para marcar el inicio de la transaccin. El BeginTransaction mtodo devuelve una referencia a la transaccin. Esta referencia se asigna a los SqlCommand objetos que estn alistados en la transaccin. Asignar la transaccin objeto de la transaccin de la propiedad SqlCommand a ser ejecutado. Si el comando se ejecuta en una conexin con una transaccin activa, y la transaccin objeto no ha sido asignada a la transaccin de la propiedad Comando objeto, se produce una excepcin. Ejecute los comandos necesarios. Llame a la Comi mtodo de la SqlTransaction objeto de completar la transaccin, o llame a la funcin

3.

4.

Desinstalacin del mtodo para abortar la operacin.Si la conexin se cierra o eliminados antes de que cualquiera la Commit o Rollback mtodos han sido ejecutadas, la transaccin se revierte. En el ejemplo de cdigo siguiente se muestra la lgica transaccional utilizando ADO.NET con Microsoft SQL Server. C# VB

Con conexin Como SqlConnection = New SqlConnection (myConnectionString) Connection.Open () 'Iniciar una transaccin local. Dim sqlTran Como SqlTransaction connection.BeginTransaction = () "Conseguir el comando en la transaccin actual. Dim comando como SqlCommand = connection.CreateCommand () command.Transaction = sqlTran

Tratar de command.CommandText = _ "INSERT INTO Production.ScrapReason (nombre) VALUES ('Tamao incorrecto')" command.ExecuteNonQuery () command.CommandText = _ "INSERT INTO Production.ScrapReason (nombre) VALUES ('color Wrong')" command.ExecuteNonQuery () sqlTran.Commit () Console.WriteLine ( "Ambos registros se escriben en la base de datos." ) Catch ex como excepcin Console.WriteLine (ex.Message) Console.WriteLine ( "Ni disco fue escrito a base de datos." ) sqlTran.Rollback () Fin Trate End Uso

Realizacin de una transaccin distribuida


. NET Framework 2.0
Otras versiones 2 de cada 11 ha calificado este til - Valorar este tema Una transaccin es un conjunto de tareas relacionadas que, o bien tiene xito (commit) o no (abortar) como una unidad, entre otras cosas. Una transaccin distribuida es una transaccin que afecta a varios recursos. Para que una transaccin distribuida para cometer, todos los participantes deben garantizar que cualquier cambio en los datos ser permanente. Los cambios deben persistir a pesar de los fallos del sistema u otros imprevistos. Si incluso un solo participante no realiza esta garanta, toda la transaccin falla, y cualquier cambio en los datos dentro del mbito de la transaccin se deshacen.

Nota Una excepcin se produce si se intenta confirmar o deshacer una transaccin si un DataReader se inicia mientras la transaccin est activa.

Trabajar con System.Transactions


En el Marco. NET, las transacciones distribuidas son gestionados a travs de la API en el System.Transactions espacio de nombres. El System.Transactions API delegar el manejo de transacciones distribuidas para un monitor de transacciones como el Coordinador de transacciones distribuidas de Microsoft (MS DTC) cuando varios administradores de recursos persistentes estn involucrados. Para obtener ms informacin, consulte Fundamentos de transaccin . Nuevo en ADO.NET 2.0 es el soporte para inscripcin en una transaccin distribuida utilizando el EnlistTransaction mtodo, que recluta a una conexin en unatransaccin ejemplo. En las versiones anteriores de ADO.NET, alistamiento explcita en transacciones distribuidas se ha realizado mediante laEnlistDistributedTransaction mtodo de conexin a conseguir una conexin en una ITransaction ejemplo, que se admite por compatibilidad hacia atrs. Para obtener ms informacin sobre las transacciones de Enterprise Services, vea Interoperabilidad con Enterprise Services y transacciones COM + .

Cuando se utiliza un System.Transactions transaccin con el proveedor de Marco. NET para SQL Server en un servidor de base de datos SQL Server 2005, un ligero transaccin se utilizar automticamente. La transaccin puede ser promovido a una transaccin distribuida completa sobre una base como-necesaria. Para obtener ms informacin, consulte Aprovechamiento de System.Transactions .

Nota El nmero mximo de transacciones distribuidas que una base de datos Oracle pueden participar al mismo tiempo se establece en 10 de forma predeterminada.Despus de la transaccin 10a cuando se conecta a una base de datos Oracle, se produce una excepcin. Oracle no es compatible con DDL dentro de una transaccin distribuida.

Automticamente inscripcin en una transaccin distribuida


Automatic alistamiento es el valor predeterminado (y recomendado) manera de integrar conexiones ADO.NET con System.Transactions . Un objeto de conexin automtica de alta en una transaccin distribuida existente si determina que hay una transaccin activa, que, en System.Transaction trminos, significa queTransaction.Current no es nulo. Inscripcin automtica de transacciones se produce cuando se abre la conexin. No va a suceder despus de que, incluso si un comando se ejecuta dentro de un mbito de transaccin. Puede deshabilitar la inscripcin automtica en transacciones existentes especificando Aliste = falsecomo parmetro de cadena de conexin para un ConnectionString o servicios OLE DB = -7 como un parmetro de cadena de conexin para unConnectionString . Para obtener ms informacin sobre los parmetros de Oracle y ODBC cadena de conexin, vea ConnectionString y ConnectionString .

Manual de inscripcin en una transaccin distribuida


Si la inscripcin automtica est desactivada o si necesita dar de alta una operacin que se inici despus de la conexin se abre, usted puede dar de alta en una transaccin distribuida existente mediante el EnlistTransaction mtodo de la DbConnection objeto para el proveedor que usted est trabajando. La inscripcin en una transaccin distribuida existente garantiza que, si la transaccin se confirma o se revierte, las modificaciones realizadas por el cdigo en el origen de datos se confirma o se revierte tambin. La inscripcin en las transacciones distribuidas es particularmente aplicable cuando la agrupacin de objetos de negocio. Si un objeto de negocio se combinaron con una conexin abierta, la inscripcin de transaccin automtica que slo se produce cuando se abre la conexin. Si se realizan varias transacciones con el objeto de negocio conjunto, la conexin abierta para ese objeto no automticamente de alta en transacciones iniciadas recientemente. En este caso, puede desactivar la inscripcin automtica de transacciones para la conexin y dar de alta la conexin en las transacciones utilizando EnlistTransaction . EnlistTransaction toma un solo argumento de tipo de transaccin que es una referencia a la transaccin existente. Despus de llamar a la conexin deEnlistTransaction mtodo, todas las modificaciones realizadas en la fuente de datos utilizando la conexin se incluyen en la transaccin. Pasar un valor nulo unenlists la conexin desde su alistamiento actual transaccin distribuida. Tenga en cuenta que la conexin debe ser abierto antes de llamar EnlistTransaction .

Nota Una vez que una conexin se alist explcitamente en una transaccin, no puede ser un-soldado raso o alistado en otra transaccin hasta que finaliza la primera transaccin.

Precaucin EnlistTransaction lanza una excepcin si la conexin ya ha comenzado una transaccin utilizando la conexin de BeginTransaction mtodo. Sin embargo, si la transaccin es una transaccin local iniciada en el origen de datos (por ejemplo, la ejecucin de la instruccin BEGIN TRANSACTION explcita mediante unSqlCommand ), EnlistTransaction deshar la transaccin local y dar de alta en la transaccin distribuida existente a lo solicitado. Usted no recibir un aviso de que la transaccin local se ha revertido, y debe manejar las transacciones locales no iniciadas mediante BeginTransaction . Si usted est utilizando. NET Framework para SQL Server ( SqlClient ) con SQL Server 2005, un intento de conseguir una excepcin. Todos los dems casos no se detectan.

Transacciones promovibles en SQL Server 2005


SQL Server 2005 admite las transacciones promocionables en la que puede ser una transaccin ligera local automticamente promovidos a una transaccin distribuida slo si es necesario. Una transaccin promocionable no invoca la carga aadida de una transaccin distribuida a menos que la carga aadida es necesario. Para obtener ms informacin y un ejemplo de cdigo, vea Aprovechamiento de System.Transactions .

Configuracin de transacciones distribuidas


Es posible que necesite habilitar el MS DTC desde la red con el fin de utilizar transacciones distribuidas si est utilizando un sistema operativo ms nuevo con los ltimos service packs aplicados, como Windows XP o Windows Server 2003. Si tienes el Windows Firewall activado (el valor por defecto para Windows XP Service Pack 2), debe permitir que el servicio MS DTC para usar la red o abrir el MS DTC puerto.

Utilizando el. NET Framework para SQL Server


. NET Framework 2.0
Otras versiones 4 de 6 puntuado este til - Valorar este tema En esta seccin se describen las caractersticas y comportamientos que son especficos para el. NET Framework para SQL Server. El. NET Framework para SQL Server proporciona acceso a un SQL Server versin 7.0 o posterior de base de datos utilizando su protocolo interno. La funcionalidad del proveedor de datos est diseado para ser similar a la de los datos. NET Framework para OLE DB, ODBC y Oracle.

Nota

Para utilizar el. NET Framework para SQL Server, una aplicacin debe hacer referencia al System.Data.SqlClient espacio de nombres.

Enumeracin de instancias de SQL Server


. NET Framework 2.0
Otras versiones 12 de los 19 ha calificado este til - Valorar este tema Tanto SQL Server 2000 y SQL Server 2005 las solicitudes de permisos para encontrar instancias de SQL Server en la red actual. El SqlDataSourceEnumerator clase expone esta informacin para el desarrollador de aplicaciones, proporcionando una DataTable que contiene informacin sobre todos los servidores visibles. Esta tabla devuelta contiene una lista de instancias de servidor disponibles en la red que coincida con la lista proporcionada cuando un usuario intenta crear una nueva conexin, y ampla la lista desplegable que contiene todos los servidores disponibles en la Propiedades de la conexin cuadro de dilogo. Los resultados mostrados no son siempre completa.

Nota Al igual que con la mayora de los servicios de Windows, lo mejor es ejecutar el servicio Explorador de SQL con los privilegios menos posibles. Vea los Libros en pantalla de SQL Server para obtener ms informacin sobre el servicio Explorador de SQL y cmo manejar su comportamiento.

Recuperacin de una instancia del enumerador


Con el fin de recuperar la tabla que contiene informacin acerca de las instancias de SQL Server disponibles, primero debe recuperar un enumerador, utilizando el shared / esttico Instancia propiedad: C# VB

Dim instancia como System.Data.Sql.SqlDatSourceEnumerator = _ System.Data.Sql.SqlDataSourceEnumerator.Instance


Una vez hayas confirmado la instancia esttica, puede llamar a la GetDataSources mtodo, que devuelve un objeto DataTable que contiene informacin acerca de los servidores disponibles: C#

VB

Dim dataTable Como System.Data.DataTable instance.GetDataSources = ()


La tabla que devuelve la llamada al mtodo contiene las columnas siguientes, todos los cuales contienen cadenas valores:

Columna ServerName InstanceName

Descripcin Nombre del servidor. Nombre de la instancia del servidor. En blanco si el servidor se ejecuta como la instancia predeterminada. Indica si el servidor forma parte de un clster. La versin del servidor (8.00.x para SQL Server 2000 y 9.00.x para SQL Server 2005).

IsClustered Versin

Limitaciones de enumeracin
Todos los servidores disponibles pueden o no pueden ser listados. La lista puede variar dependiendo de factores tales como tiempos de espera y trfico de red. Esto puede hacer que la lista sea diferente en dos convocatorias consecutivas. Slo los servidores de la misma red se enumeran. Paquetes de difusin general no atravesar routers, por lo que usted no puede ver a un servidor de la lista, pero va a ser estables a travs de las llamadas. Servidores de la lista puede o no puede tener informacin adicional, como IsClustered y la versin. Esto depende de cmo se obtuvo la lista. Los servidores enumerados por el servicio de explorador de SQL Server tendrn ms detalles que los que se encuentran a travs de la infraestructura de Windows, que ver slo el nombre.

Nota Enumeracin del servidor slo est disponible cuando se ejecuta en plena confianza. Asambleas que se ejecutan en un entorno de confianza parcial no ser capaz de usarlo, incluso si tienen la SqlClientPermission Cdigo de Acceso de Seguridad (CAS) permiso.
SQL Server 2000 proporciona informacin para la SqlDataSourceEnumerator internamente. SQL Server 2005, sin embargo, proporciona la informacin a travs del uso de un servicio externo de Windows denominado Explorador de SQL. Este servicio est activado por defecto, pero los administradores pueden apagarlo o desactivarlo, haciendo que la instancia del servidor invisible a esta clase. Este servicio slo se aplica a SQL Server 2005, y no tiene ningn efecto sobre el comportamiento de SQL Server 2000.

Nota Hardware o software puede limitar la capacidad para buscar instancias de SQL Server. Para obtener ms informacin sobre cmo abrir los puertos para la navegacin, consulte el artculo de Knowledge Base, Cmo utilizar una secuencia de comandos mediante programacin abrir puertos para SQL Server para utilizar en los sistemas que ejecutan Windows XP Service Pack 2 .

Ejemplo
La aplicacin de consola siguiente se recupera la informacin acerca de todas las instancias del servidor SQL visibles y muestra la informacin en la ventana de la consola. C#

VB

Importaciones System.Data.Sql Mdulo Module1 Sub Main () 'Recuperar la instancia del enumerador y luego los datos. Dim instancia como SqlDataSourceEnumerator = _ SqlDataSourceEnumerator.Instance Dim tabla como System.Data.DataTable instance.GetDataSources = () "Mostrar el contenido de la tabla. DisplayData (tabla) Console.WriteLine ( "Presione cualquier tecla para continuar." ) Console.ReadKey () End Sub Private Sub DisplayData(ByVal table As DataTable) For Each row As DataRow In table.Rows For Each col As DataColumn In table.Columns Console.WriteLine ( "{0} = {1}" , col.ColumnName, fila (col)) Siguiente Console.WriteLine ( "===================== ======= " ) Siguiente End Sub End Mdulo

Realizacin de operaciones de copia masiva


. NET Framework 2.0
Otras versiones 5 de 7 puntuado este til - Valorar este tema Microsoft SQL Server incluye una popular utilidad de lnea de comandos denominada bcp para copiar rpidamente archivos de gran tamao a granel en tablas o vistas de bases de datos SQL Server. El SqlBulkCopy clase le permite escribir las soluciones de cdigo administrado que proporcionan una funcionalidad similar. Hay otras formas de cargar datos en una tabla de SQL Server (comandos INSERT, por ejemplo) pero SqlBulkCopy ofrece una ventaja de rendimiento significativa sobre las mismas. El SqlBulkCopy clase se puede utilizar para escribir datos slo a las tablas de SQL Server. Pero la fuente de datos no se limita a SQL Server; cualquier fuente de datos se puede utilizar, siempre y cuando los datos se pueden cargar a un DataTable instancia o leer con un IDataReader ejemplo. Usando el SqlBulkCopy clase, puede realizar: A mayor sola operacin de copia Varias operaciones de copia masiva Una operacin de copia masiva en una transaccin

Nota Al usar. NET Framework versin 1.1 o anterior (que no es compatible con el SqlBulkCopy clase), puede ejecutar el servidor SQL Server Transact-SQL BULK INSERT declaracin utilizando el SqlCommand objeto.

Creacin de tablas para los ejemplos de copia masiva


. NET Framework 2.0
Otras versiones 2 de 8 puntuado este til - Valorar este tema El SqlBulkCopy clase se puede utilizar para escribir datos slo a las tablas de SQL Server. Los ejemplos de cdigo mostrados en este tema se utiliza la base de datos de SQL Server 2005 muestra AdventureWorks . Para evitar la alteracin de las tablas existentes ejemplos de cdigo escribir datos en las tablas que se deben crear en primer lugar. Los BulkCopyDemoMatchingColumns y BulkCopyDemoDifferentColumns tablas estn basados en la AdventureWorks Production.Products mesa. En las muestras de cdigo que usan estas tablas, los datos se aaden a partir de la Production.Products mesa a una de estas tablas de ejemplo. ElBulkCopyDemoDifferentColumns tabla se usa cuando la muestra se ilustra cmo asignar columnas de los datos de origen a la tabla de destino;BulkCopyDemoMatchingColumns se utiliza para la mayora de las otras muestras. Algunos de los ejemplos de cdigo se muestra cmo utilizar un SqlBulkCopy clase para escribir en varias tablas. Para estas muestras, lasBulkCopyDemoOrderHeader y BulkCopyDemoOrderDetail tablas se utilizan como las tablas de destino. Estas tablas se basan en los Sales.SalesOrderHeader ySales.SalesOrderDetail tablas de AdventureWorks .

Nota Los SqlBulkCopy ejemplos de cdigo se proporcionan para demostrar la sintaxis para utilizar SqlBulkCopy solamente. Si las tablas de origen y destino estn situados en la misma instancia de servidor SQL, es ms fcil y rpido de usar una instruccin de Transact-SQL INSERT ... SELECT declaracin a copiar los datos.

Tabla de configuracin de

Para crear las tablas necesarias para los ejemplos de cdigo se ejecute correctamente, debe ejecutar las siguientes instrucciones Transact-SQL en una base de datos SQL Server.

USE AdventureWorks IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id (N '[dbo]. [BulkCopyDemoMatchingColumns]') Y OBJECTPROPERTY (id, N'IsUserTable ') = 1) DROP TABLE [dbo]. [BulkCopyDemoMatchingColumns] CREATE TABLE [dbo]. [BulkCopyDemoMatchingColumns] ( [ProductID] NO [int] IDENTIDAD (1,1) NULL, [Nombre] [nvarchar] (50) NOT NULL, [ProductNumber] NO [nvarchar] (25) NULL, CONSTRAINT [PK_ProductID] PRIMARY KEY CLUSTERED ( [ProductID] ASC ) ON [PRIMARY] ) ON [PRIMARY] IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id (N '[dbo]. [BulkCopyDemoDifferentColumns]') Y OBJECTPROPERTY (id, N'IsUserTable ') = 1) DROP TABLE [dbo]. [BulkCopyDemoDifferentColumns] CREATE TABLE [dbo]. [BulkCopyDemoDifferentColumns] ( [ProdID] NO [int] IDENTIDAD (1,1) NULL, [NUMPROD] NO [nvarchar] (25) NULL, [ProdName] [nvarchar] NO (50) NULL, CONSTRAINT [PK_ProdID] PRIMARY KEY CLUSTERED ( [ProdID] ASC ) ON [PRIMARY] ) ON [PRIMARY] IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id (N '[dbo]. [BulkCopyDemoOrderHeader]') Y OBJECTPROPERTY (id, N'IsUserTable ') = 1) DROP TABLE [dbo]. [BulkCopyDemoOrderHeader] CREATE TABLE [dbo]. [BulkCopyDemoOrderHeader] ( [SalesOrderID] NO [int] IDENTIDAD (1,1) NULL, [OrderDate] [datetime] NOT NULL, [AccountNumber] [nvarchar] (15) NULL, CONSTRAINT [PK_SalesOrderID] PRIMARY KEY CLUSTERED ( [SalesOrderID] ASC ) ON [PRIMARY] ) ON [PRIMARY] IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id (N '[dbo]. [BulkCopyDemoOrderDetail]') Y OBJECTPROPERTY (id, N'IsUserTable ') = 1) DROP TABLE [dbo]. [BulkCopyDemoOrderDetail] CREATE TABLE [dbo]. [BulkCopyDemoOrderDetail] ( [SalesOrderID] [int] NOT NULL, [SalesOrderDetailID] [int] NOT NULL, [OrderQty] [smallint] NOT NULL, [ProductID] [int] NOT NULL, [UnitPrice] [dinero] NOT NULL,

CONSTRAINT [PK_LineNumber] PRIMARY KEY CLUSTERED ( [SalesOrderID] ASC, [SalesOrderDetailID] ASC ) ON [PRIMARY] ) ON [PRIMARY]

Realizacin de una operacin de copia masiva individual


. NET Framework 2.0
Otras versiones 5 de 6 puntuado este til - Valorar este tema El enfoque ms simple para realizar una masiva de SQL Server operacin de copia es llevar a cabo una sola operacin contra una base de datos. De forma predeterminada, una operacin de copia masiva se lleva a cabo como una operacin aislada: la operacin de copia se produce de una manera sin transaccin, sin la oportunidad de rodar de nuevo.

Nota Si usted necesita para hacer retroceder la totalidad o parte de la copia masiva cuando se produce un error, puede utilizar un SqlBulkCopy transaccin gestionada, o realizar la operacin de copia masiva en una transaccin existente. SqlBulkCopy tambin trabajar con System.Transactions si la conexin est dado de alta (implcita o explcitamente) en un System.Transactions transaccin. Para obtener ms informacin, consulte Realizacin de una operacin de copia masiva en una transaccin .
Los pasos generales para realizar una operacin de copia masiva son como sigue: 1. Conectar con el servidor de origen y obtener los datos que desea copiar. Los datos tambin pueden provenir de 2. 3. 4. 5. 6. 7. otras fuentes, si se puede recuperar de unIDataReader o DataTable objeto. Conectar con el servidor de destino (a menos que quieras SqlBulkCopy para establecer una conexin para usted). Crear un SqlBulkCopy objeto, establecer las propiedades necesarias. Ajuste el DestinationTableName propiedad para indicar la tabla de destino para la operacin de insercin masiva. Llame a uno de los WriteToServer mtodos. Opcionalmente, actualice propiedades y llamar WriteToServer de nuevo cuando sea necesario. Llame al Cierre , o envolver las operaciones de copia masiva en una Usando comunicado.

Precaucin Recomendamos que la fuente y los tipos de datos de columna de destino coinciden. Si los tipos de datos no coinciden, SqlBulkCopy los intentos de convertir cada valor de origen al tipo de datos de destino, utilizando las reglas empleadas por precio . Las conversiones pueden afectar al rendimiento, y tambin puede resultar en errores inesperados. Por ejemplo, un doble tipo de datos se puede convertir en un Decimal Tipo de datos la mayor parte del tiempo, pero no siempre.

Ejemplo
La siguiente aplicacin de consola muestra cmo cargar datos mediante la SqlBulkCopy clase. En este ejemplo, un SqlDataReader se utiliza para copiar los datos de la Production.Product tabla en SQL Server 2005 AdventureWorks base de datos a una tabla similar en la misma base de datos.

Importante En este ejemplo no se ejecutar a menos que haya creado las tablas de trabajo como se describe en Creacin de tablas para los ejemplos de copia masiva . Este cdigo se proporciona para mostrar la sintaxis para utilizar SqlBulkCopy solamente. Si las tablas de origen y destino estn situados en la misma instancia de servidor SQL, es ms fcil y rpido de usar una instruccin de Transact-SQL INSERT ... SELECT declaracin a copiar los datos.
C# VB

Imports System.Data.SqlClient Mdulo Module1 Sub Main () Dim connectionString Como cadena GetConnectionString = () 'Abre una conexin a la base de datos AdventureWorks. Usando SourceConnection Como SqlConnection = _ New SqlConnection (connectionString) sourceConnection.Open () 'Realiza un recuento inicial en la tabla de destino. Dim commandRowCount Como Nuevo SqlCommand (_ "SELECT COUNT (*) FROM dbo.BulkCopyDemoMatchingColumns;" , _ SourceConnection) Dim countStart Como Largo = _ System.Convert.ToInt32 (commandRowCount.ExecuteScalar ()) Console.WriteLine ( "recuento de filas inicial = {0}" , countStart) 'Obtener los datos de la tabla de origen como un SqlDataReader. Dim commandSourceData Como SqlCommand = New SqlCommand (_ "SELECT ProductID, Name, ProductNumber" & _ "FROM Production.Product;" , SourceConnection) Dim lector como SqlDataReader = commandSourceData.ExecuteReader "Abrir la conexin de destino. En el mundo real que le 'no utilizar SqlBulkCopy para mover datos de una tabla a otra "en la misma base de datos. Esto es para fines de demostracin solamente. Usando DestinationConnection Como SqlConnection = _ New SqlConnection (connectionString) destinationConnection.Open ()

'Configurar el objeto de copia masiva. " Las posiciones de las columnas del origen de datos lector 'coinciden con las posiciones de columna de la tabla de destino, "lo que no hay necesidad de columnas del mapa. Usando bulkcopy Como SqlBulkCopy = _ New SqlBulkCopy (DestinationConnection) bulkCopy.DestinationTableName = _ "Dbo.BulkCopyDemoMatchingColumns" Intente 'Escribir desde el origen hasta el destino. bulkCopy.WriteToServer (lector) Catch ex como excepcin Console.WriteLine (ex.Message) Finalmente 'Cierra el objeto SqlDataReader. El SqlBulkCopy 'objeto se cierra automticamente al final 'del bloque Using. reader.Close () Fin Trate End Uso 'Realiza un recuento final en la tabla de destino 'para ver cuntas filas se han aadido. Dim countEnd Como Larga = _ System.Convert.ToInt32 (commandRowCount.ExecuteScalar ()) Console.WriteLine ( "conteo final fila = {0}" , countEnd) Console.WriteLine ( "{0}. filas se han aadido" , countEnd - countStart) Console.WriteLine ( "Presione Enter para terminar." ) Console.ReadLine () Fin Usando End Uso End Sub Privado Funcin GetConnectionString () Como Cuerda 'Para evitar el almacenamiento de la cadena SourceConnection en el cdigo, "se puede recuperar de un archivo de configuracin. Return "Data Source = (local);" & _ "Integrated Security = true;" & _ " Initial Catalog = AdventureWorks; " End Funcin Fin del mdulo

Realizando una operacin de copia masiva con Transact-SQL y la clase de comando


Al usar. NET Framework versin 1.1 o anterior (que no es compatible con el SqlBulkCopy clase), tambin puede ejecutar la instruccin BULK INSERT de Transact-SQL mediante el SqlCommand objeto. Tenga en cuenta que con esta tcnica no tiene relacin alguna con el uso de la funcionalidad de copia masiva que proporciona. NET Framework Data Provider para SQL Server.

El siguiente ejemplo muestra cmo utilizar el ExecuteNonQuery mtodo para ejecutar la instruccin BULK INSERT.

Nota La ruta de acceso de archivo de la fuente de datos es relativa al servidor. El proceso de servidor debe tener acceso a la misma a fin de que la operacin de copia masiva para tener xito.
C# VB

Con conexin Como SqlConnection = New SqlConnection (connectionString) Dim queryString Como cadena = _ "BULK INSERT Northwind.dbo [Detalles de pedidos] FROM." & _ "'f: \ mydata \ data.tbl' WITH (FORMATFILE = 'f: \ mydata \ data.fmt ') " Connection.Open () SqlCommand comando = New SqlCommand (queryString, conexin); command.ExecuteNonQuery () Fin Usando

Realizar mltiples operaciones de copia masiva


. NET Framework 2.0
Otras versiones 2 de 5 puntuado este til - Valorar este tema Puede realizar varias operaciones de copia masiva utilizando una nica instancia de un SqlBulkCopy clase. Si los parmetros de operacin de cambio entre las copias (por ejemplo, el nombre de la tabla de destino), deber actualizar antes de todas las llamadas posteriores a cualquiera de los WriteToServer mtodos, como se demuestra en el siguiente ejemplo. A menos que se cambia todos los valores de las propiedades siguen siendo los mismos que en la anterior operacin de copia masiva para una instancia determinada.

Nota Realizar mltiples operaciones de copia masiva utilizando la misma instancia de SqlBulkCopy suele ser ms eficaz que utilizar una instancia independiente para cada operacin.
Si realiza varias operaciones de copia masiva utilizando el mismo SqlBulkCopy objeto, no hay restricciones sobre si la informacin de origen o de destino es igual o diferente en cada operacin. Sin embargo, usted debe asegurarse de que la informacin de asociacin columna est configurada correctamente cada vez que se escribe en el servidor.

Importante En este ejemplo no se ejecutar a menos que haya creado las tablas de trabajo como se describe en Creacin de tablas para los ejemplos de copia masiva . Este cdigo se proporciona para mostrar la sintaxis para utilizar SqlBulkCopy solamente. Si las tablas de origen y destino estn situados en la misma instancia de

servidor SQL, es ms fcil y rpido de usar una instruccin de Transact-SQL INSERT ... SELECT declaracin a copiar los datos.
C# VB

Imports System.Data.SqlClient Mdulo Module1 Sub Main () Dim connectionString Como cadena GetConnectionString = () 'Abre una conexin a la base de datos AdventureWorks. Uso de conexin Como SqlConnection = New SqlConnection (connectionString) Connection.Open () "Vaciar las tablas de destino. Dim deleteHeader Como Nuevo SqlCommand (_ "DELETE FROM dbo.BulkCopyDemoOrderHeader"; , conexin) deleteHeader.ExecuteNonQuery () deleteHeader.Dispose () Dim deleteDetail Como New SqlCommand (_ "DELETE FROM dbo.BulkCopyDemoOrderDetail"; , conexin) deleteDetail.ExecuteNonQuery () 'Realiza un recuento inicial en la tabla de destino 'con columnas coincidentes. Dim countRowHeader Como Nuevo SqlCommand (_ "SELECT COUNT (*) FROM dbo.BulkCopyDemoOrderHeader;" , _ conexin) Dim countStartHeader Como Largo = System.Convert.ToInt32 (_ countRowHeader.ExecuteScalar ()) Console.WriteLine ( "la cuenta de inicio filas para la tabla Encabezado = {0}" , _ countStartHeader) 'Realiza un recuento inicial en la tabla de destino 'con diferentes posiciones de columna. Dim countRowDetail Como Nuevo SqlCommand (_ "SELECT COUNT (*) FROM dbo.BulkCopyDemoOrderDetail;" , _ conexin) Dim countStartDetail Como Largo = System.Convert.ToInt32 (_ countRowDetail.ExecuteScalar ()) Console.WriteLine ( "nmero de filas de partida para la tabla Detalle =" & _ countStartDetail) 'Obtener los datos de la tabla de origen como un SqlDataReader. ' El Sales.SalesOrderHeader y Sales.SalesOrderDetail 'mesas son bastante grandes y fcilmente podra causar un tiempo de espera "si todos los datos de las tablas se agrega al destino. " Para mantener el ejemplo sencillo y rpido, un parmetro es "utilizado para seleccionar las rdenes slo para una cuenta en particular como "la fuente de la insercin masiva. Dim headerData Como SqlCommand = New SqlCommand (_ "SELECT [SalesOrderID], [OrderDate]", & _ "[AccountNumber] FROM [de ventas] [SalesOrderHeader]." & _ "WHERE [AccountNumber] = @ numeroCuenta:" , _ conexin) Dim parameterAccount Como SqlParameter = New SqlParameter () parameterAccount.ParameterName = "@ numeroCuenta"

parameterAccount.SqlDbType = SqlDbType.NVarChar parameterAccount.Direction = ParameterDirection.Input parameterAccount.Value = "10-4020-000034" headerData.Parameters.Add (parameterAccount) Dim readerHeader Como SqlDataReader = _ headerData.ExecuteReader () 'Obtener los datos Detalle de una conexin independiente. Usando Conexin2 Como SqlConnection = New SqlConnection (connectionString) connection2.Open () Dim sourceDetailData Como SqlCommand = New SqlCommand (_ "SELECT [Sales]. [SalesOrderDetail]. [SalesOrderID]," & _ "[SalesOrderDetailID], [], [OrderQty ProductID], [PrecioUnidad]" & _ "FROM [Ventas] . [SalesOrderDetail] INNER JOIN " & _ "[Sales]. [SalesOrderHeader]" & _ "ON [Sales]. [SalesOrderDetail]. [SalesOrderID] =" & _ "[Sales]. [SalesOrderHeader]. [SalesOrderID]" & _ "WHERE [AccountNumber] = @ numeroCuenta;" , Conexin2) Dim accountDetail Como SqlParameter = New SqlParameter () accountDetail.ParameterName = "@ numeroCuenta" accountDetail.SqlDbType = SqlDbType.NVarChar accountDetail.Direction = ParameterDirection.Input accountDetail.Value = "10-4020-000034" sourceDetailData.Parameters.Add (_ accountDetail) Dim readerDetail Como SqlDataReader = _ sourceDetailData.ExecuteReader () 'Crear el objeto SqlBulkCopy. Usando bulkcopy Como SqlBulkCopy = _ New SqlBulkCopy (connectionString) bulkCopy.DestinationTableName = "dbo.BulkCopyDemoOrderHeader" "Garantizar que las columnas se asignan correctamente 'que define las asignaciones de columnas de la orden. bulkCopy.ColumnMappings.Add ( "SalesOrderID" , "SalesOrderID" ) bulkCopy.ColumnMappings.Add ( "OrderDate" , "OrderDate" ) bulkCopy.ColumnMappings.Add ( "AccountNumber" , "AccountNumber" ) 'Escribir readerHeader al destino. Pruebe bulkCopy.WriteToServer (readerHeader) Catch ex como excepcin Console.WriteLine (ex.Message) Finalmente readerHeader.Close () Fin Trata 'Establecer el orden de destino detalles. bulkCopy.DestinationTableName = "dbo.BulkCopyDemoOrderDetail" 'Borrar la ColumnMappingCollection. bulkCopy.ColumnMappings.Clear () "Aadir el orden asignaciones de columnas de detalle. bulkCopy.ColumnMappings.Add ( "SalesOrderID" , "SalesOrderID" )

bulkCopy.ColumnMappings.Add bulkCopy.ColumnMappings.Add bulkCopy.ColumnMappings.Add bulkCopy.ColumnMappings.Add

( ( ( (

"SalesOrderDetailID" , "SalesOrderDetailID" ) "OrderQty" , "OrderQty" ) "ProductID" , "ProductID" ) "UnitPrice" , "UnitPrice" )

'Escribir readerDetail al destino. Pruebe bulkCopy.WriteToServer (readerDetail) Catch ex como excepcin Console.WriteLine (ex.Message) Finalmente readerDetail.Close () Fin Trate End Uso 'Realiza un recuento final de las tablas de destino "para ver cuntas filas se han aadido. Dim countEndHeader como a largo System.Convert.ToInt32 = (_ countRowHeader.ExecuteScalar ()) Console.WriteLine ( "{0} filas se agregan a la tabla Encabezado." , _ countEndHeader - countStartHeader) Dim countEndDetail Como Largo = System.Convert.ToInt32 (_ countRowDetail.ExecuteScalar ()) Console.WriteLine ( "{0} filas se agregan a la tabla de detalles." , _ countEndDetail - countStartDetail) Console.WriteLine ( "Presione Enter para terminar." ) Console.ReadLine () Fin Usando End Uso End Sub Privado Funcin GetConnectionString () Como Cuerda 'Para evitar guardar la cadena de conexin en el cdigo, "se puede recuperar de un archivo de configuracin. Return "Data Source = (local);" & _ "Integrated Security = true;" & _ " Initial Catalog = AdventureWorks; " End Funcin Fin del mdulo

Realizacin de una operacin de copia masiva en una transaccin


. NET Framework 2.0
Otras versiones

9 de 9 puntuado este til - Valorar este tema Operaciones de copia masiva puede realizarse como operaciones aisladas o como parte de una transaccin de paso mltiple. Esta ltima opcin le permite realizar ms de una operacin de copia masiva dentro de la misma transaccin, as como realizar otras operaciones de base de datos (tales como inserciones, actualizaciones y eliminaciones) sin dejar de ser capaz de confirmar o deshacer toda la transaccin. De forma predeterminada, una operacin de copia masiva se lleva a cabo como una operacin aislada. La operacin de copia masiva se produce de una manera sin transaccin, sin la oportunidad de rodar de nuevo. Si usted necesita para hacer retroceder la totalidad o parte de la copia masiva cuando se produce un error, se puede utilizar un SqlBulkCopy transaccin gestionada, realice la operacin de copia masiva en una transaccin existente, o dar de alta en un System.TransactionsTransaction .

Realizacin de una operacin no ejecutada copia masiva


La siguiente aplicacin de consola muestra lo que ocurre cuando una operacin no ejecutada copia masiva se encuentra con un error medio camino a travs de la operacin. En el ejemplo, la tabla de origen y la tabla de destino, disponen de Identidad columna denominada ProductID . El primer cdigo prepara la tabla de destino mediante la supresin de todas las filas y luego insertar una sola fila cuyo ProductID se sabe que existe en la tabla de origen. Por defecto, un nuevo valor para laidentidad columna se genera en la tabla de destino para cada fila agregada. En este ejemplo, una opcin que se activa cuando se abre la conexin que fuerza el proceso de carga a granel para utilizar los Identidad valores de la tabla fuente en su lugar. La operacin de copia masiva se ejecuta con el BatchSize propiedad establecida en 10. Cuando la operacin se encuentra con la fila no vlida, se produce una excepcin. En este primer ejemplo, la operacin de copia masiva no es tramitado. Todos los lotes copiados hasta el punto de que el error se cometi, el lote que contiene la clave duplicada se revierte, y la operacin de copia masiva se detiene antes de procesar cualquier otros lotes.

Nota En este ejemplo no se ejecutar a menos que haya creado las tablas de trabajo como se describe en Creacin de tablas para los ejemplos de copia masiva . Este cdigo se proporciona para mostrar la sintaxis para utilizar SqlBulkCopy solamente. Si las tablas de origen y destino estn situados en la misma instancia de servidor SQL, es ms fcil y rpido de usar una instruccin de Transact-SQL INSERT ... SELECT declaracin a copiar los datos.
C# VB

Imports System.Data.SqlClient Mdulo Module1 Sub Main () Dim connectionString Como cadena GetConnectionString = () 'Abre una SourceConnection a la base de datos AdventureWorks. Usando SourceConnection Como SqlConnection = _ New SqlConnection (connectionString) sourceConnection.Open () 'Eliminar todo desde la tabla de destino. Dim commandDelete Como New SqlCommand commandDelete.Connection = SourceConnection commandDelete.CommandText = _ "DELETE FROM dbo.BulkCopyDemoMatchingColumns" commandDelete.ExecuteNonQuery ()

"Aadir una fila nica que se traducir en clave duplicada "cuando todas las filas de origen son copiados a granel. " Tenga en cuenta que esta tcnica slo tendr xito en 'ilustra el punto, si una fila con ProductID = 446 'existe en la tabla AdventureWorks Production.Products. ' Si ha realizado cambios en los datos de esta tabla, cambie "la instruccin SQL en el cdigo para agregar una ProductID que 'no existe en la versin de los Production.Products mesa. Elija cualquier ProductID en el centro de la mesa "(no la primera o ltima fila) para ilustrar mejor el resultado. Dim commandInsert Como New SqlCommand commandInsert.Connection = SourceConnection commandInsert.CommandText = _ "SET IDENTITY_INSERT ON dbo.BulkCopyDemoMatchingColumns," & _ "INSERT INTO dbo.BulkCopyDemoMatchingColumns" & _ "([ProductID], [Nombre], [ProductNumber])" & _ "VALUES (446, 'Lock Nut 23', 'LN -3416 '); " & _ "SET IDENTITY_INSERT dbo.BulkCopyDemoMatchingColumns OFF" commandInsert.ExecuteNonQuery () 'Realiza un recuento inicial en la tabla de destino. Dim commandRowCount Como Nuevo SqlCommand (_ "SELECT COUNT (*) FROM dbo.BulkCopyDemoMatchingColumns;" , _ SourceConnection) Dim countStart Como Largo = _ System.Convert.ToInt32 (commandRowCount.ExecuteScalar ()) Console.WriteLine ( "recuento de filas inicial = {0}" , countStart) 'Obtener los datos de la tabla de origen como un SqlDataReader. Dim commandSourceData Como SqlCommand = New SqlCommand (_ "SELECT ProductID, Name, ProductNumber" & _ "FROM Production.Product;" , SourceConnection) Dim lector como SqlDataReader = _ commandSourceData.ExecuteReader () 'Configurar el objeto de copia masiva con la opcin KeepIdentity. Usando bulkcopy Como SqlBulkCopy = New SqlBulkCopy (connectionString, _ SqlBulkCopyOptions.KeepIdentity) bulkCopy.BatchSize = 10 bulkCopy.DestinationTableName = "dbo.BulkCopyDemoMatchingColumns" 'Escribir desde el origen hasta el destino. " Se producir un error de clave duplicada "despus de algunos de los lotes ya han sido copiados. Pruebe bulkCopy.WriteToServer (lector) Catch ex como excepcin Console.WriteLine (ex.Message) Finalmente reader.Close () Fin Trate End Uso 'Realiza un recuento final en la tabla de destino 'para ver cuntas filas se han aadido. Dim countEnd Como Larga = _ System.Convert.ToInt32 (commandRowCount.ExecuteScalar ()) Console.WriteLine ( "conteo final fila = {0}" , countEnd)

Console.WriteLine ( "{0}. filas se han aadido" , countEnd - countStart) Console.WriteLine ( "Presione Enter para terminar." ) Console.ReadLine () Fin Usando End Sub Privado Funcin GetConnectionString () Como Cuerda 'Para evitar el almacenamiento de la cadena SourceConnection en el cdigo, "se puede recuperar de un archivo de configuracin. Return "Data Source = (local);" & _ "Integrated Security = true;" & _ " Initial Catalog = AdventureWorks; " End Funcin Fin del mdulo

Realizacin de una operacin de copia masiva en una transaccin Dedicado


De forma predeterminada, una operacin de copia masiva es su propia transaccin. Si desea realizar una operacin de copia masiva dedicada, crear una nueva instancia de SqlBulkCopy con una cadena de conexin, o usar una existente SqlConnection objeto sin una transaccin activa. En cada escenario, la operacin de copia masiva crea, y luego confirma o revierte la transaccin. Puede especificar explcitamente el UseInternalTransaction opcin en el SqlBulkCopy constructor de la clase para hacer explcitamente una operacin de copia masiva para ejecutar su propia transaccin, haciendo que cada lote de la operacin de copia masiva para ejecutar dentro de una transaccin independiente.

Nota Dado que los diferentes lotes se ejecutan en diferentes transacciones, si se produce un error durante la operacin de copia masiva, todas las filas del lote actual se revertir, pero las filas de lotes anteriores permanecern en la base de datos.
La siguiente aplicacin de consola es similar al ejemplo anterior, con una excepcin: En este ejemplo, la operacin de copia masiva gestiona sus propias transacciones. Todos los lotes copiados hasta el punto de que el error se cometi, el lote que contiene la clave duplicada se revierte, y la operacin de copia masiva se detiene antes de procesar cualquier otros lotes.

Importante En este ejemplo no se ejecutar a menos que haya creado las tablas de trabajo como se describe en Creacin de tablas para los ejemplos de copia masiva . Este cdigo se proporciona para mostrar la sintaxis para utilizar SqlBulkCopy solamente. Si las tablas de origen y destino estn situados en la misma instancia de servidor SQL, es ms fcil y rpido de usar una instruccin de Transact-SQL INSERT ... SELECT declaracin a copiar los datos.
C# VB

Imports System.Data.SqlClient Mdulo Module1 Sub Main () Dim connectionString Como cadena GetConnectionString = ()

'Abre una SourceConnection a la base de datos AdventureWorks. Usando SourceConnection Como SqlConnection = _ New SqlConnection (connectionString) sourceConnection.Open () 'Eliminar todo desde la tabla de destino. Dim commandDelete Como New SqlCommand commandDelete.Connection = SourceConnection commandDelete.CommandText = _ "DELETE FROM dbo.BulkCopyDemoMatchingColumns" commandDelete.ExecuteNonQuery () "Aadir una fila nica que se traducir en clave duplicada "cuando todas las filas de origen son copiados a granel. " Tenga en cuenta que esta tcnica slo tendr xito en 'ilustra el punto, si una fila con ProductID = 446 'existe en la tabla AdventureWorks Production.Products. ' Si ha realizado cambios en los datos de esta tabla, cambie "la instruccin SQL en el cdigo para agregar una ProductID que 'no existe en la versin de los Production.Products mesa. Elija cualquier ProductID en el centro de la mesa "(no la primera o ltima fila) para ilustrar mejor el resultado. Dim commandInsert Como New SqlCommand commandInsert.Connection = SourceConnection commandInsert.CommandText = _ "SET IDENTITY_INSERT ON dbo.BulkCopyDemoMatchingColumns," & _ "INSERT INTO dbo.BulkCopyDemoMatchingColumns" & _ "([ProductID], [Nombre], [ProductNumber])" & _ "VALUES (446, 'Lock Nut 23', 'LN -3416 '); " & _ "SET IDENTITY_INSERT dbo.BulkCopyDemoMatchingColumns OFF" commandInsert.ExecuteNonQuery () 'Realiza un recuento inicial en la tabla de destino. Dim commandRowCount Como Nuevo SqlCommand (_ "SELECT COUNT (*) FROM dbo.BulkCopyDemoMatchingColumns;" , _ SourceConnection) Dim countStart Como Largo = _ System.Convert.ToInt32 (commandRowCount.ExecuteScalar ()) Console.WriteLine ( "recuento de filas inicial = {0}" , countStart) 'Obtener los datos de la tabla de origen como un SqlDataReader. Dim commandSourceData Como SqlCommand = New SqlCommand (_ "SELECT ProductID, Name, ProductNumber" & _ "FROM Production.Product;" , SourceConnection) Dim lector como SqlDataReader = _ commandSourceData.ExecuteReader () 'Configurar el objeto de copia masiva. " Tenga en cuenta que al especificar la opcin UseInternalTransaction, "no se puede especificar una transaccin externa. Por lo tanto, 'hay que usar el constructo SqlBulkCopy que requiere una cadena 'para la conexin, en lugar de un objeto SqlConnection existente. Usando bulkcopy Como SqlBulkCopy = New SqlBulkCopy (connectionString, _ SqlBulkCopyOptions.UseInternalTransaction O _ SqlBulkCopyOptions.KeepIdentity) bulkCopy.BatchSize = 10 bulkCopy.DestinationTableName = "dbo.BulkCopyDemoMatchingColumns" 'Escribir desde el origen hasta el destino. " Se producir un error de clave duplicada

"despus de algunos de los lotes ya han sido copiados. Pruebe bulkCopy.WriteToServer (lector) Catch ex como excepcin Console.WriteLine (ex.Message) Finalmente reader.Close () Fin Trate End Uso 'Realiza un recuento final en la tabla de destino 'para ver cuntas filas se han aadido. Dim countEnd Como Larga = _ System.Convert.ToInt32 (commandRowCount.ExecuteScalar ()) Console.WriteLine ( "conteo final fila = {0}" , countEnd) Console.WriteLine ( "{0}. filas se han aadido" , countEnd - countStart) Console.WriteLine ( "Presione Enter para terminar." ) Console.ReadLine () Fin Usando End Sub Privado Funcin GetConnectionString () Como Cuerda 'Para evitar el almacenamiento de la cadena SourceConnection en el cdigo, "se puede recuperar de un archivo de configuracin. Return "Data Source = (local);" & _ "Integrated Security = true;" & _ " Initial Catalog = AdventureWorks; " End Funcin Fin del mdulo

Uso de transacciones existentes


Puede especificar una existente SqlTransaction objeto como un parmetro en un SqlBulkCopy constructor. En esta situacin, la operacin de copia masiva se realiza en una transaccin existente, y no se hacen cambios al estado de transaccin (es decir, que est comprometido ni abortado). Esto permite que una aplicacin incluyen la operacin de copia masiva en una transaccin con las operaciones de base de datos. Sin embargo, si no se especifica un SqlTransaction objeto y pasa una referencia nula, y la conexin tiene una transaccin activa, se produce una excepcin. Si necesita deshacer la operacin de copia masiva de todo porque se produce un error, o si la copia masiva se debe ejecutar como parte de un proceso ms amplio que se puede revertir, puede proporcionar una SqlTransaction al objeto SqlBulkCopy constructor. La siguiente aplicacin de consola es similar a la primera (sin transaccin) ejemplo, con una excepcin: en este ejemplo, la operacin de copia masiva se incluye en una ms grande, transaccin externa. Cuando el error se produce violacin de clave primaria, toda la transaccin se retrotrae y no hay filas se agregan a la tabla de destino.

Importante En este ejemplo no se ejecutar a menos que haya creado las tablas de trabajo como se describe en Creacin de tablas para los ejemplos de copia masiva . Este cdigo se proporciona para mostrar la sintaxis para utilizar SqlBulkCopy solamente. Si las tablas de origen y destino estn situados en la misma instancia de servidor SQL, es ms fcil y rpido de usar una instruccin de Transact-SQL INSERT ... SELECT declaracin a copiar los datos.

C# VB

Imports System.Data.SqlClient Mdulo Module1 Sub Main () Dim connectionString Como cadena GetConnectionString = () 'Abre una SourceConnection a la base de datos AdventureWorks. Usando SourceConnection Como SqlConnection = _ New SqlConnection (connectionString) sourceConnection.Open () 'Eliminar todo desde la tabla de destino. Dim commandDelete Como New SqlCommand commandDelete.Connection = SourceConnection commandDelete.CommandText = _ "DELETE FROM dbo.BulkCopyDemoMatchingColumns" commandDelete.ExecuteNonQuery () "Aadir una fila nica que se traducir en clave duplicada "cuando todas las filas de origen son copiados a granel. " Tenga en cuenta que esta tcnica slo tendr xito en 'ilustra el punto, si una fila con ProductID = 446 'existe en la tabla AdventureWorks Production.Products. ' Si ha realizado cambios en los datos de esta tabla, cambie "la instruccin SQL en el cdigo para agregar una ProductID que 'no existe en la versin de los Production.Products mesa. Elija cualquier ProductID en el centro de la mesa "(no la primera o ltima fila) para ilustrar mejor el resultado. Dim commandInsert Como New SqlCommand commandInsert.Connection = SourceConnection commandInsert.CommandText = _ "SET IDENTITY_INSERT ON dbo.BulkCopyDemoMatchingColumns," & _ "INSERT INTO dbo.BulkCopyDemoMatchingColumns" & _ "([ProductID], [Nombre], [ProductNumber])" & _ "VALUES (446, 'Lock Nut 23', 'LN -3416 '); " & _ "SET IDENTITY_INSERT dbo.BulkCopyDemoMatchingColumns OFF" commandInsert.ExecuteNonQuery () 'Realiza un recuento inicial en la tabla de destino. Dim commandRowCount Como Nuevo SqlCommand (_ "SELECT COUNT (*) FROM dbo.BulkCopyDemoMatchingColumns;" , _ SourceConnection) Dim countStart Como Largo = _ System.Convert.ToInt32 (commandRowCount.ExecuteScalar ()) Console.WriteLine ( "recuento de filas inicial = {0}" , countStart) 'Obtener los datos de la tabla de origen como un SqlDataReader. Dim commandSourceData Como SqlCommand = New SqlCommand (_ "SELECT ProductID, Name, ProductNumber" & _ "FROM Production.Product;" , SourceConnection) Dim lector como SqlDataReader = _ commandSourceData.ExecuteReader () 'Configurar el objeto de copia masiva dentro de la transaccin. Usando DestinationConnection Como SqlConnection = _ New SqlConnection (connectionString) destinationConnection.Open ()

Usando transaccin como SqlTransaction = _ destinationConnection.BeginTransaction () Usando bulkcopy Como SqlBulkCopy = New _ SqlBulkCopy (DestinationConnection, _ SqlBulkCopyOptions.KeepIdentity, transaccin) bulkCopy.BatchSize = 10 bulkCopy.DestinationTableName = _ "Dbo.BulkCopyDemoMatchingColumns" 'Escribir desde el origen hasta el destino. " Se producir un error de clave duplicada. Pruebe bulkCopy.WriteToServer (lector) transaction.Commit () Catch ex como excepcin Console.WriteLine (ex.Message) Transaction.Rollback () Finalmente reader.Close () Fin Trate End Uso Final Usando End Uso 'Realiza un recuento final en la tabla de destino 'para ver cuntas filas se han aadido. Dim countEnd Como Larga = _ System.Convert.ToInt32 (commandRowCount.ExecuteScalar ()) Console.WriteLine ( "conteo final fila = {0}" , countEnd) Console.WriteLine ( "{0}. filas se han aadido" , countEnd - countStart) Console.WriteLine ( "Presione Enter para terminar." ) Console.ReadLine () Fin Usando End Sub Privado Funcin GetConnectionString () Como Cuerda 'Para evitar el almacenamiento de la cadena SourceConnection en el cdigo, "se puede recuperar de un archivo de configuracin. Return "Data Source = (local);" & _ "Integrated Security = true;" & _ " Initial Catalog = AdventureWorks; " End Funcin Fin del mdulo

Aprovechamiento de System.Transactions
. NET Framework 2.0
Otras versiones

3 de 6 puntuado este til - Valorar este tema El. NET Framework versin 2.0 incluye un nuevo marco de transacciones, accesible a travs de la System.Transactions espacio de nombres. Este marco expone las transacciones de una forma que est completamente integrado en el Marco. NET, incluyendo ADO.NET. Adems de las mejoras de programabilidad, System.Transactions y ADO.NET pueden trabajar juntos para coordinar las optimizaciones al trabajar con transacciones. Una transaccin promocionable es un peso ligero (local) de transacciones que pueden ser promovidos automticamente a una transaccin completamente distribuida sobre una base como-necesaria. En ADO.NET 2.0, System.Data.SqlClient aade soporte para las transacciones promocionables al trabajar con SQL Server 2005. Una transaccin promocionable no invoca la carga aadida de una transaccin distribuida a menos que la carga aadida es necesario. Transacciones promovibles son automticos no requieren la intervencin de los desarrolladores. Transacciones promovibles slo estn disponibles cuando se usa el. NET Framework para SQL Server ( SqlClient ) con SQL Server 2005.

Creacin de Transacciones promovibles


El Proveedor. NET Framework para SQL Server ofrece soporte para transacciones promocionables, que se manejan a travs de las clases de. NET FrameworkSystem.Transactions espacio de nombres. Transacciones promovibles optimizar las transacciones distribuidas mediante el aplazamiento de la creacin de una transaccin distribuida hasta que se necesite. Si slo hay un administrador de recursos se requiere ninguna transaccin distribuida se produce.

Nota En un escenario de confianza parcial, el System.Transactions.DistributedTransactionPermission es necesario cuando una transaccin se promueve a una transaccin distribuida. Para obtener ms informacin, consulte Administracin de transacciones escalada .

Escenarios promovibles transaccin


Las transacciones distribuidas normalmente consumen muchos recursos del sistema, siendo administrados por el Coordinador de transacciones distribuidas de Microsoft (MS DTC), que integra a todos los administradores de recursos accesibles en la transaccin. Una transaccin promocionable es una forma especial de unSystem.Transactions transaccin que efectivamente delega el trabajo a un simple servidor SQL 2005 transaccin. System.Transactions , System.Data.SqlClient y SQL Server 2005 coordinan el trabajo involucrado en el manejo de la transaccin, la promocin de a una transaccin distribuida completa, segn sea necesario. La ventaja de usar transacciones promocionables es que cuando se abre una conexin con un activo TransactionScope transaccin, y sin ninguna otra conexin se abri, se confirma la transaccin como una transaccin ligera, en lugar de incurrir en la sobrecarga adicional de una transaccin distribuida completa.

Nota El ConnectionString propiedad es compatible con una palabra clave, Aliste , que indica si System.Data.SqlClient detectar automticamente y contextos transaccionales de alta la conexin en una transaccin distribuida. Si Aliste = true , la conexin de forma automtica se alist en el contexto del subproceso apertura de transaccin actual. Si Aliste = false , el SqlClient conexin no interacta con una transaccin distribuida. El valor predeterminado de Aliste es verdad. Si Enlist no se especifica en la cadena de conexin, la conexin es automticamente alta en una transaccin distribuida si se detecta en el momento en que se abre la conexin.

Usando TransactionScope

El TransactionScope clase hace que un bloque de cdigo transaccional implcitamente alistar conexiones en una transaccin distribuida. Debe llamar al completomtodo al final de la TransactionScope bloque antes de abandonarlo. Dejando el bloque invoca el Dispose mtodo. Si una excepcin se ha lanzado que hace que el cdigo para salir de su alcance, la transaccin se considera anulada. Le recomendamos que emplean un uso de bloques para asegurar que Dispose se llama en el TransactionScope objeto cuando el bloque using se sale. La falta de confirmar o deshacer las transacciones pendientes puede daar gravemente el rendimiento porque el valor predeterminado de tiempo de espera para laTransactionScope es 1 minuto. Si usted no utiliza un uso declaracin, debe realizar todo el trabajo en un Try bloque y llamar explcitamente al Dispose mtodo en el ltimo bloque. Si se produce una excepcin en el TransactionScope , la transaccin se marca como incoherente y se abandona. Se revierte cuando el TransactionScope se dispone. Si no se produce una excepcin, las transacciones participantes se comprometen.

Nota El TransactionScope clase crea una transaccin con un IsolationLevel de Serializable por defecto. Dependiendo de la aplicacin, es posible que desee considerar la disminucin del nivel de aislamiento para evitar la contencin de alta en la aplicacin. Nota Le recomendamos que realice slo las actualizaciones, inserciones y eliminaciones en transacciones distribuidas debido a que consumen importantes recursos de bases de datos. Sentencias SELECT pueden bloquear los recursos de base de datos sin necesidad, y en algunos casos puede ser necesario el uso de las transacciones para las selecciones. Cualquier trabajo de base de datos no debe hacerse fuera del mbito de la transaccin, a menos que involucra a otros gestores de recursos transados. Aunque una excepcin dentro del mbito de la transaccin impide la operacin de cometer, el TransactionScope clase no permite deshacer cualquier cambio de su cdigo se ha hecho fuera del mbito de la propia transaccin. Si necesita realizar alguna accin cuando la transaccin se deshace, debe escribir su propia implementacin de la IEnlistmentNotification interfaz explcita y dar de alta en la transaccin.

Ejemplo
Trabajar con System.Transactions requiere que usted tenga una referencia a System.Transactions.dll . La funcin siguiente muestra cmo crear una transaccin promocionable contra dos instancias distintas de SQL Server, representada por dos diferentesSqlConnection objetos, que se envuelven en un TransactionScope bloque. El cdigo crea el TransactionScope bloque con un uso de la declaracin y abre la primera conexin, que automticamente le da de alta en el TransactionScope . La transaccin se alistaron inicialmente como una transaccin ligera, no una transaccin distribuida completa. La segunda conexin se alist en el TransactionScope slo si el comando en la primera conexin no es una excepcin. Cuando la conexin se abre el segundo, la transaccin se promueve automticamente a una transaccin distribuida completa. La completa es llamado, el cual confirma la transaccin slo si no hay excepciones han sido lanzados. Si una excepcin se ha lanzado en cualquier punto de la TransactionScope bloque completo no se llamar, y la transaccin distribuida se deshar cuando el TransactionScope est dispuesto en el extremo de su uso de bloque. C# VB

'Esta funcin toma argumentos de las 2 cadenas de conexin y los comandos con el fin de "crear una transaccin que involucra a dos servidores SQL Server. Devuelve un valor> 0 si la operacin 'comprometido, 0 si la transaccin se deshace. Para probar este cdigo, se puede "conectar a dos bases de datos diferentes en el mismo servidor mediante la alteracin de la cadena de conexin 'o a otro RDBMS, como Oracle, alterando el cdigo en el bloque de cdigo Conexin2.

Public Funcin CreateTransactionScope (_ ByVal connectString1 Como cadena , ByVal connectString2 Como cadena , _ ByVal commandText1 Como cadena , ByVal commandText2 como cadena ) como Integer 'Inicializa el valor de retorno a cero y crear un StringWriter para mostrar los resultados. Dim returnValue Como Integer = 0 Dim escritor como System.IO.StringWriter = New System.IO.StringWriter 'Crear el TransactionScope en que para ejecutar los comandos, lo que garantiza 'que ambos comandos confirmar o deshacer como una sola unidad de trabajo. Utilizando alcance Como Nuevo TransactionScope () Usando conexin1 Como New SqlConnection (connectString1) Trate de "Activacin de la conexin se inscribe automticamente en el TransactionScope "como una transaccin ligera. connection1.Open () 'Crear el objeto SqlCommand y ejecutar el primer comando. Dim comando1 Como SqlCommand = New SqlCommand (commandText1, conexin1) returnValue = command1.ExecuteNonQuery () writer.WriteLine ( "Filas a ser afectados por Command1: {0}" , returnValue) "Si has llegado hasta aqu, significa que comando1 xito. Al anidar 'el uso de bloques para el interior Conexin2 de conexin1, que 'conservar los recursos del servidor y de la red mediante la apertura de Conexin2 'slo cuando existe la posibilidad de que la transaccin pueda cometer. Usando Conexin2 Como New SqlConnection (connectString2) Trate de "La transaccin se promueve a un completo distribuida 'Conexin2 transaccin cuando se abre. connection2.Open () 'Ejecuta el comando en segundo lugar en la segunda base de datos. returnValue = 0 Dim comando2 Como SqlCommand = New SqlCommand (commandText2, Conexin2) returnValue = command2.ExecuteNonQuery () writer.WriteLine ( "Filas a ser afectados por comando2: {0}" , returnValue) Catch ex como excepcin Mostrar informacin de que comando2 fallado. writer.WriteLine ( "returnValue para comando2: {0}" , returnValue) writer.WriteLine ( "Exception Message2: {0}" , ex.Message) End Pruebe End Uso Catch ex como excepcin Mostrar informacin de que comando1 fallado. writer.WriteLine ( "returnValue de Command1: {0}" , returnValue) writer.WriteLine ( "Exception Message1: {0}" , ex.Message) End Pruebe End Uso 'El mtodo Complete confirma la transaccin. Si una excepcin se ha lanzado, "completa no ser llamado y la transaccin se revierte. scope.Complete () Fin Usando "El returnValue es mayor que 0 si la transaccin comprometida. Si returnValue> 0 Entonces writer.WriteLine ( "Transaccin se cometi". )

Otras ventas 'Se puede escribir la lgica de negocio adicional aqu, notificar a la persona que llama lanzar un TransactionAbortedException, o visite el el fracaso. writer.WriteLine ( "Transaccin deshace." ) End Si 'Mostrar mensajes. Console.WriteLine (writer.ToString ()) Volver returnValue End Funcin

Trabajo con SqlTypes


. NET Framework 2.0
Otras versiones 0 de 2 puntuado este til - Valorar este tema ADO.NET 2.0 incluye soporte mejorado para el tipo DataSet mediante SqlTypes . SqlTypes estn diseados para proporcionar tipos de datos con la misma semntica y precisin que los tipos de datos en una base de datos SQL Server. Cada tipo de datos en SqlTypes tiene un tipo de datos equivalente en SQL Server 2005, con la misma representacin de datos subyacente.

SqlTypes y el DataSet
. NET Framework 2.0
Otras versiones

1 de 1 puntuado este til - Valorar este tema ADO.NET 2.0 incluye soporte mejorado para System.Data.SqlTypes en el DataSet . Adems de utilizar el Common Language Runtime (CLR) Tipos de datos en el Sistema deespacio de nombres, el tipo de datos de un objeto DataColumn se puede establecer en uno de los System.Data.SqlTypes .

Trabajo con SqlTypes


Usando System.Data.SqlTypes directamente en un DataSet otorga varios beneficios al trabajar de datos de SQL Server diferentes. System.Data.SqlTypes apoya la misma semntica que los tipos de datos nativos de SQL Server. Usando System.Data.SqlTypes tambin elimina la prdida de precisin que puede ocurrir al convertir tipos de datos decimal o numrico.

Ejemplo
El cdigo siguiente se crea un DataTable objeto, define explcitamente los DataColumn tipos de datos mediante System.Data.SqlTypes en lugar de tipos CLR. El cdigo rellena la DataTable con los datos de la Sales.SalesOrderDetail tabla en la AdventureWorks base de datos en SQL Server 2005. C# VB

Private Sub GetSqlTypesAW ( ByVal connectionString como cadena ) 'Crear un DataTable y especifique el 'SqlType para cada columna. Dim tabla como New DataTable () Dim icolumnolumn Como DataColumn = _ table.Columns.Add ( "SalesOrderID" , GetType (SqlInt32)) Dim priceColumn Como DataColumn = _ table.Columns.Add ( "UnitPrice" , GetType (SqlMoney)) Dim totalColumn Como DataColumn = _ table.Columns.Add ( "LineTotal" , GetType (SqlDecimal)) Dim columnModifiedDate Como DataColumn = _ table.Columns.Add ( "ModifiedDate" , GetType (SqlDateTime)) 'Abre una conexin a SQL Server y llenar el DataTable 'con datos de la tabla Sales.SalesOrderDetail 'en la base de datos de ejemplo AdventureWorks. Uso de conexin como New SqlConnection (connectionString) Dim queryString Como cadena = _ "SELECT TOP 5 SalesOrderID, Precio por unidad LineTotal, ModifiedDate" _ Y "DE DONDE Sales.SalesOrderDetail LineTotal <@ LineTotal" 'Crear el SqlCommand. Dim comando como SqlCommand = New SqlCommand (queryString, conexin) 'Crear el SqlParameter y asignar un valor. Dim parmetro como SqlParameter = _ New SqlParameter ( "@ LineTotal" , SqlDbType. Decimal ) parameter.Value = 1,5 command.Parameters.Add (parmetro) 'Abre la conexin y cargar los datos. Connection.Open () Dim lector como SqlDataReader = _ Command.ExecuteReader (CommandBehavior.CloseConnection) table.Load (lector) 'Cierra el objeto SqlDataReader reader.Close () Fin Usando 'Mostrar el SqlType de cada columna. Dim columna como DataColumn Console.WriteLine ( "Tipos de datos:" ) Para cada columna En table.Columns Console.WriteLine ( "{0} - {1}" , _ column.ColumnName, column.DataType.UnderlyingSystemType) Siguiente columna 'Muestra el valor para cada fila. Dim fila como DataRow

Console.WriteLine ( "Valores:" ) Para cada fila En table.Rows Console.Write ( "{0}" , row ( "SalesOrderID" )) Console.Write ( "{0}" , row ( "UnitPrice" )) Console.Write ( "{0}" , row ( "LineTotal" )) Console.Write ( "{0}" , row ( "ModifiedDate" )) Console.WriteLine () Siguiente fila End Sub
El resultado se muestra en la ventana de consola muestra el tipo de datos de cada columna y los valores recuperados de SQL Server.

Tratamiento de valores NULL


. NET Framework 2.0
Otras versiones

9 de cada 21 ha calificado este til - Valorar este tema Un valor nulo en una base de datos relacional se utiliza cuando el valor de una columna es desconocido o ausente. Un valor nulo no es ni una cadena vaca (para el personaje o los tipos de datos de fecha y hora) ni un valor cero (para los tipos de datos numricos). Los ANSI SQL-92 especificacin establece que un valor nulo debe ser el mismo para todos los tipos de datos, por lo que todos los valores nulos se tratan de forma coherente. El System.Data.SqlTypes espacio de nombres proporciona semntica de nulos mediante la aplicacin del INullable interfaz. Cada uno de los tipos de datos System.Data.SqlTypes tiene su propio IsNull propiedad y un nulo valor que se puede asignar a una instancia de ese tipo de datos.

Nota

Nuevo de. NET Framework versin 2.0 es el soporte para los tipos que aceptan valores NULL, que permiten a los programadores a extender un tipo de valor para representar todos los valores del tipo de subyacente y tambin una nula referencia en C # ( Nada en Visual Basic). Estos tipos CLR que aceptan valores NULL representa una instancia de la Nullable estructura. Esta capacidad es especialmente til cuando los tipos de valor estn en caja y sin caja, proporcionando una mejor compatibilidad con tipos de objetos. Tipos CLR que aceptan valores NULL no estn destinados para el almacenamiento de base de datos nulos, ya que un ANSI SQL nula no se comporta de la misma manera que una nula referencia (o Nada en Visual Basic). Para trabajar con la base de datos de SQL ANSI valores nulos, utilice System.Data.SqlTypes en lugar de valores nulos anulables . Para obtener ms informacin sobre cmo trabajar con tipos que aceptan valores NULL de CLR en Visual Basic ver Tipos de valores que tal vez no tengan un valor definido , y para C #, vea Utilizar tipos que aceptan valores NULL (Gua de programacin de C #) .

Nulos y lgica de tres valores


Permitir valores nulos en definiciones de columna introduce lgica de tres valores en su aplicacin. Una comparacin puede evaluarse como una de las tres condiciones siguientes: Verdadero

Falso Desconocido

Debido nulo se considera que es desconocido, dos valores nulos comparados entre s no se consideran iguales. En expresiones que utilizan operadores aritmticos, si alguno de los operandos es nulo, el resultado es nulo tambin.

Nulos y SqlBoolean
Comparacin entre las System.Data.SqlTypes devolver un SqlBoolean . El IsNull funcin para cada SqlType devuelve un SqlBoolean y se puede utilizar para comprobar si los valores nulos. En las tablas siguientes se muestra cmo la verdad del AND, OR y NOT funcin de los operadores de la presencia de un valor nulo. (T = true, F = falso, y U = desconocido o nulo.)

Comprender la opcin ANSI_NULLS


System.Data.SqlTypes proporciona la misma semntica que cuando la opcin ANSI_NULLS se establece en SQL Server. Todos los operadores aritmticos (+, -, *, /,%), operadores bit a bit (~, &, |), y la mayora de las funciones devuelven NULL si alguno de los operandos o argumentos es nulo, a excepcin de la propiedad IsNull . El estndar ANSI SQL-92 estndar no es compatible con columnName = NULL en una clusula WHERE. En SQL Server, la opcin ANSI_NULLS controla tanto la nulabilidad predeterminada en la base de datos y la evaluacin de las comparaciones con valores nulos. Si ANSI_NULLS est activado (por defecto), el operador IS NULL debe ser utilizado en las expresiones en las pruebas para los valores nulos. Por ejemplo, la siguiente comparacin siempre produce desconocido cuando ANSI_NULLS est en:

colname> NULL
Comparacin con una variable que contiene un valor NULL tambin produce desconocido:

colname> @ MiVariable
Utilice el IS NULL o IS NOT NULL predicados para probar un valor nulo. Esto puede aadir complejidad a la clusula WHERE. Por ejemplo, el TerritoryID columna en laAdventureWorks Cliente tabla permite valores nulos. Si una sentencia SELECT es para comprobar valores nulos, adems de otros, debe incluir un predicado IS NULL:

SELECT CustomerID, AccountNumber, TerritoryID DE AdventureWorks.Sales.Customer DONDE TerritoryID (1, 2, 3) O TerritoryID IS NULL
Si establece ANSI_NULLS off en SQL Server, puede crear expresiones que utilizan el operador de igualdad para comparar un valor nulo. Sin embargo, no se puede evitar que las conexiones desde diferentes opciones de

configuracin nulos para esa conexin. Utilizando IS NULL para comprobar valores nulos cualquier momento, independientemente de la configuracin de ANSI_NULLS para una conexin. ANSI_NULLS ajuste OFF no se admite en un conjunto de datos , que siempre sigue el estndar ANSI SQL-92 estndar para el manejo de valores nulos enSystem.Data.SqlTypes .

Asignacin de valores nulos


Los valores NULL son especiales, y su almacenamiento y semntica de asignacin difieren entre los diferentes tipos de sistemas y sistemas de almacenamiento. Un conjunto de datos est diseado para ser usado con diferentes tipos y sistemas de almacenamiento. En esta seccin se describe la semntica de nulos para asignar valores NULL a una DataColumn en una DataRow a travs de los sistemas de tipos diferentes. DBNull . Valor Esta asignacin es vlida por un DataColumn de cualquier tipo. Si el tipo implementa INullable , DBNull . Valor se fuerza en el valor apropiado Null inflexible de tipos. SqlType . Null Todos System.Data.SqlTypes implementar tipos de datos INullable . Si el valor nulo inflexible de tipos se pueden convertir en tipo de datos de la columna usando operadores implcitos del reparto, la cesin debe pasar. De lo contrario una excepcin de difusin no vlida. nulo Si 'null' es un valor vlido para el dado DataColumn tipo de datos, es obligada a la adecuada DbNull . Valor o nulo asociado a la INullable tipo ( SqlType . Null ) derivedUdt . Null Para las columnas UDT, los nulos se almacenan siempre en funcin del tipo asociado con la DataColumn . Consideremos el caso de una UDT asociado con unaDataColumn que no implementa INullable mientras que su sub-clase s. En este caso, si un valor nulo inflexible de tipos asociada a la clase derivada se asigna, se almacena como sin tipo DbNull . Valor , porque el almacenamiento nulo siempre es coherente con el tipo de datos DataColumn.

Nota

El Nullable <T> o Nullable estructura no se admite actualmente en el DataSet .

Columna de Mltiples (fila) Asignacin


DataTable . Aadir , DataTable . LoadDataRow , u otras API que aceptar una ItemArray que se asigna a una fila, 'null' mapa para el valor predeterminado de DataColumn. Si un objeto en la matriz contiene DbNull . Valor o su equivalente inflexible de tipos, las mismas reglas descritas anteriormente se aplican. Adems, las siguientes reglas se aplican para una instancia de DataRow ["ColumnName"]. asignaciones nulas: 1. El valor predeterminado por defecto el valor es DbNull . Valor para todos, excepto las columnas nulas 2. inflexible de tipos en los que es el valor apropiado nulo inflexible de tipos. Los valores nulos no se escriben durante la serializacin a archivos XML (como en "xsi: nil"). Todos los valores que no son nulos, incluidos por defecto, siempre se escriben al serializar a XML. Esto es a diferencia semntica XSD / XML en un valor nulo (xsi: nil) es explcito y el valor predeterminado es implcito (si no est presente en XML, un analizador de validacin puede obtener de un esquema XSD asociado). Lo contrario es cierto para un DataTable : un valor nulo es implcito y el valor predeterminado es explcita. Todos los valores de las columnas que faltan para filas ledas de entrada XML se asignan NULL. Filas creado usando NewRow mtodos o similares se les asigna el valor predeterminado de DataColumn. El IsNull mtodo devuelve verdadero para ambos DbNull . Valor y INullable . Null .

3.

4.
5.

Asignacin de valores nulos


El valor por defecto para cualquier System.Data.SqlTypes instancia es null.

Nulos en System.Data.SqlTypes son de tipo especfico y no puede ser representado por un valor nico, como DbNull . Utilice el IsNull propiedad para comprobar si hay valores nulos. Los valores nulos se pueden asignar a un DataColumn , como se muestra en el ejemplo de cdigo siguiente. Puede asignar directamente los valores nulos a SqlTypes las variables sin provocar una excepcin.

Ejemplo
En el ejemplo de cdigo siguiente se crea un DataTable con dos columnas definidas como SqlInt32 y SqlString . El cdigo agrega una fila de valores conocidos, una fila de valores nulos y luego recorre el DataTable , asignar los valores a las variables y mostrar el resultado en la ventana de la consola. C# VB

Private Sub WorkWithSqlNulls () Dim tabla como New DataTable () "Especificar el SqlType para cada columna. Dim idColumn Como DataColumn = _ table.Columns.Add ( "ID" , GetType (SqlInt32)) Dim descColumn Como DataColumn = _ table.Columns.Add ( "Descripcin" , GetType (SqlString)) 'Aadir algunos datos. Dim fila como DataRow = table.NewRow () fila ( "ID" ) = 123 fila ( "Descripcin" ) = "Side Mirror" table.Rows.Add (fila) 'Aadir valores nulos. table.NewRow fila = () fila ( "ID" ) = SqlInt32.Null fila ( "Descripcin" ) = SqlString.Null table.Rows.Add (fila) 'Inicializar variables a utilizar cuando "la extraccin de los datos. Dim isColumnNull Como SqlBoolean = False Dim idValue Como SqlInt32 = SqlInt32.Zero Dim descriptionValue Como SqlString = SqlString.Null 'Iterar a travs de la DataTable y mostrar los valores. Para cada fila En table.Rows 'Asignar valores a las variables. Tenga en cuenta que 'no tienen que comprobar valores nulos. idValue = CType (fila ( "ID" ), SqlInt32) descriptionValue = CType (fila ( "Descripcin" ), SqlString) 'Test de valor nulo con columna ID isColumnNull = idValue.IsNull 'Muestra valores de las variables en la ventana de la consola. Console.Write ( "isColumnNull = {0}, ID = {1}, Descripcin = {2}" , _ isColumnNull, idValue, descriptionValue) Console.WriteLine () Siguiente fila End Sub
Este ejemplo muestra los siguientes resultados:

isColumnNull = False, ID = 123, Descripcin = Side Mirror isColumnNull = True, ID = Null, Null Descripcin =

Al comparar valores NULL con SqlTypes y tipos CLR


Al comparar los valores nulos, es importante entender la diferencia entre la forma en la Equals mtodo evala los valores nulos en System.Data.SqlTypes en comparacin con la forma en que trabaja con tipos CLR. Todas las System.Data.SqlTypes Equals mtodos de uso de la semntica de base de datos para la evaluacin de los valores nulos: si uno o ambos de los valores es nulo, la comparacin produce nulo. Por otra parte, usando el CLR Equals mtodo en dos System.Data.SqlTypes producir cierto si ambos son null. Esto refleja la diferencia entre el uso de un mtodo de instancia, tales como el CLR String.Equals mtodo, y utilizando el mtodo esttico / compartida, SqlString.Equals . El ejemplo siguiente muestra la diferencia en los resultados entre el SqlString.Equals mtodo y el String.Equals mtodo cuando cada uno se pasa un par de valores nulos y luego un par de cadenas vacas. C# VB

Private Sub CompareNulls () 'Crear dos nuevas cadenas nulas. Dim una medida nueva SqlString Dim b Como Nuevo SqlString 'Comparar nulos utilizando SqlString.Equals estticas / shared. Console.WriteLine ( "SqlString.Equals compartido / mtodo esttico:" ) Console.WriteLine ( "Dos nulos = {0}" , SqlStringEquals (a, b)) 'Comparar nulos String.Equals utilizando mtodos de instancias. Console.WriteLine () Console.WriteLine ( "mtodo String.Equals ejemplo:" ) Console.WriteLine ( "Dos nulos = {0}" , StringEquals (a, b)) "Hacer las cadenas vacas. a = "" b = "" "Cuando se comparan dos cadenas vacas (" "), tanto los comunes / static y "mtodos Equals la instancia se evalan como true. Console.WriteLine () Console.WriteLine ( "SqlString.Equals shared / mtodo esttico:" ) Console.WriteLine ( "Dos cadenas vacas = {0}" , SqlStringEquals (a, b)) Console.WriteLine () Console.WriteLine ( "mtodo String.Equals ejemplo:" ) Console.WriteLine ( "Dos cadenas vacas = {0}" , StringEquals (a, b)) End Sub Private Function SqlStringEquals ( ByVal cadena1 Como SqlString, _ ByVal cadena2 Como SqlString) Como cadena 'SqlString.Equals utiliza semntica de base de datos para la evaluacin de valores nulos. Dim returnValue Como cadena = SqlString. Equals (cadena1, cadena2). ToString () Return returnValue End Funcin Private Function StringEquals ( ByVal cadena1 Como SqlString, _ ByVal cadena2 Como SqlString) Como cadena 'String.Equals utiliza semntica de CLR de tipo para la evaluacin de valores nulos.

Dim returnValue Como cadena = cadena1. Equals (cadena2). ToString () Return returnValue End Funcin
El cdigo genera el siguiente resultado:

SqlString.Equals compartido mtodo / esttica: Dos nulos = Null String.Equals mtodo de instancia: Dos nulos = True SqlString.Equals compartido mtodo / esttica: Dos cadenas vacas = True String.Equals mtodo de instancia: Dos cadenas vacas = True

Trabajar con GUID


. NET Framework 2.0
Otras versiones

2 de 8 puntuado este til - Valorar este tema El identificador nico global (GUID) tipo de datos de SQL Server est representado por la uniqueidentifier tipo de datos, que almacena un valor binario de 16-byte. Un GUID es un nmero binario, y su uso principal es como un identificador que debe ser nico en la red que tiene muchas computadoras en muchos sitios. GUID se pueden generar llamando a la funcin Transact-SQL NEWID, y se garantiza que sea nico en todo el mundo. Para obtener ms informacin, consulte "Uso de los datos uniqueidentifier" en los Libros en pantalla de SQL Server.

Trabajar con valores SqlGuid


Dado que los valores GUID son largas y oscuras, no son significativos para los usuarios. Si GUID generados al azar se utilizan para los valores fundamentales y se inserta un montn de registros, se obtiene E / S aleatoria en sus ndices, que pueden afectar negativamente el rendimiento. GUID son tambin relativamente grande en comparacin con otros tipos de datos. En general se recomienda el uso de GUID slo para escenarios muy estrechos para que no otro tipo de datos es adecuado.

Comparacin de valores GUID


Los operadores de comparacin se puede utilizar con uniqueidentifier valores. Sin embargo, pedido no est implementado mediante la comparacin de los patrones de bits de los dos valores. Las nicas operaciones que se permiten en contra de un uniqueidentifier valor son las comparaciones (=, <>, <,>, <=,> =) y la comprobacin de NULL (IS NULL e IS NOT NULL). No hay otros operadores aritmticos son permitidos. Tanto Guid y SqlGuid tener un CompareTo mtodo para comparar diferentes valores GUID. Sin embargo, System.Guid.CompareTo y SqlTypes.SqlGuid.CompareTo se llevan a cabo de manera diferente. SqlGuid implementa CompareTo comportamiento de uso de SQL Server, en el que slo los ltimos 6 bytes de un valor se evalan. Guid evala los 16 bytes. El siguiente ejemplo muestra esta diferencia de comportamiento. La primera seccin de cdigo muestra sin clasificar Guid valores, y la segunda seccin muestra los ordenados Guid valores. La tercera seccin muestra los ordenados SqlGuid valores. La salida se muestra debajo de la lista de cdigo.

C# VB

Private Sub WorkWithGuids () 'Crear un objeto ArrayList y rellenar con los valores GUID. Dim guidList Como New ArrayList () guidList.Add ( New Guid ( "3AAAAAAA-bbbb-cccc-dddd-2EEEEEEEEEEE" )) guidList.Add ( New Guid ( "2AAAAAAA-bbbb-cccc-dddd-1EEEEEEEEEEE" )) guidList.Add ( New Guid ( "1AAAAAAA-bbbb-cccc-dddd-3EEEEEEEEEEE" )) 'Muestra los valores no clasificados Guid. Console.WriteLine ( "GUID Sin Clasificar:" ) Para cada guidValue Como Guid En guidList Console.WriteLine ( "{0}" , guidValue) Siguiente Console.WriteLine () 'Clasificar los GUID. guidList.Sort () 'Muestra los valores ordenados Guid. Console.WriteLine ( "GUID Ordenado:" ) Para cada guidSorted Como Guid En guidList Console.WriteLine ( "{0}" , guidSorted) Siguiente Console.WriteLine () 'Crear un objeto ArrayList de SqlGuids. Dim sqlGuidList Como Nuevo ArrayList () sqlGuidList.Add ( Nueva SqlGuid ( "3AAAAAAA-bbbb-cccc-dddd-2EEEEEEEEEEE" )) sqlGuidList.Add ( Nueva SqlGuid ( "2AAAAAAA-bbbb-cccc-dddd-1EEEEEEEEEEE" )) sqlGuidList.Add ( Nueva SqlGuid ( "1AAAAAAA-bbbb-cccc-dddd-3EEEEEEEEEEE" )) 'Ordenar las SqlGuids. Los SqlGuids sin clasificar estn en el mismo orden "como los no clasificados valores Guid. sqlGuidList.Sort () 'Mostrar los SqlGuids ordenados. Los valores ordenados SqlGuid se 'orden diferente a los valores GUID. Console.WriteLine ( "SqlGuids Ordenado:" ) Para cada sqlGuidValue Como SqlGuid En sqlGuidList Console.WriteLine ( "{0}" , sqlGuidValue) Next End Sub
Este ejemplo genera el siguiente resultado.

Guids Unsorted: 3aaaaaaa-bbbb-cccc-dddd-2eeeeeeeeeee 2aaaaaaa-bbbb-cccc-dddd-1eeeeeeeeeee 1aaaaaaa-bbbb-cccc-dddd-3eeeeeeeeeee Guids Ordenado: 1aaaaaaa-bbbb-cccc-dddd-3eeeeeeeeeee 2aaaaaaa-bbbb-cccc-dddd-1eeeeeeeeeee 3aaaaaaa-bbbb-cccc-dddd-2eeeeeeeeeee SqlGuids Ordenado:

2aaaaaaa-bbbb-cccc-dddd-1eeeeeeeeeee 3aaaaaaa-bbbb-cccc-dddd-2eeeeeeeeeee 1aaaaaaa-bbbb-cccc-dddd-3eeeeeeeeeee

Usar notificaciones de consulta


. NET Framework 2.0
Otras versiones

2 de 5 puntuado este til - Valorar este tema Las notificaciones de consulta son una nueva caracterstica disponible en Microsoft SQL Server 2005 y el System.Data.SqlClient espacio de nombres en ADO.NET 2.0.Construida sobre la infraestructura de Service Broker introdujo en SQL Server 2005, las notificaciones de consulta permiten a las aplicaciones que se le notifique cuando los datos han cambiado. Esta caracterstica es particularmente til para aplicaciones que proporcionan una cach de informacin de una base de datos, tal como una aplicacin de web, y necesitan ser notificado cuando los datos de origen se cambia.

Implementar notificaciones de consulta


Hay tres maneras en que usted puede poner en prctica las notificaciones de consulta utilizando ADO.NET: 1. La implementacin de bajo nivel es proporcionada por el SqlNotificationRequest clase que expone la

2.

funcionalidad del lado del servidor, lo que le permite ejecutar un comando con una solicitud de notificacin. La puesta en prctica de alto nivel es proporcionada por el SqlDependency clase, que es una clase que proporciona una abstraccin de alto nivel de funcionalidad de notificacin entre la aplicacin de origen y SQL Server, lo que le permite utilizar una dependencia para detectar cambios en el servidor. En la mayora de los casos, esta es la manera ms sencilla y eficaz para aprovechar la capacidad de SQL Server 2005 notificaciones por aplicaciones cliente administradas mediante. NET Framework para SQL Server. Adems, las aplicaciones Web creados con ASP.NET 2.0 puede utilizar los SqlCacheDependency clases de

3.

ayuda. Las notificaciones de consulta son tiles para aplicaciones que necesitan actualizar pantallas o cachs (por ejemplo, en un DataGrid control o la pgina Web) en respuesta a los cambios en los datos subyacentes. Microsoft SQL Server 2005 permite a las aplicaciones. NET Framework para enviar un comando a SQL Server y notificacin de solicitud si la ejecucin del mismo comando producir conjuntos de resultados diferentes de los inicialmente recuperados.

Notificaciones Arquitectura de consultas y Service Broker


La infraestructura de comunicaciones se basa en la parte superior de una nueva funcin de cola incluye en SQL Server 2005. En general, las notificaciones se generan en el servidor se envan a travs de estas colas para ser procesados posteriormente. Para obtener ms informacin, consulte la seccin "Service Broker Architecture" en la seccin libros en pantalla.

Habilitacin de notificaciones de consulta


. NET Framework 2.0
Otras versiones

3 de 8 puntuado este til - Valorar este tema Las aplicaciones que consumen las notificaciones de consulta tienen un conjunto comn de requisitos. Adems, el origen de datos debe estar correctamente configurado para admitir notificaciones de consulta SQL, y el usuario debe tener la correcta lado del cliente y los permisos de servidor. Para utilizar notificaciones de consulta es necesario: Utilice SQL Server 2005. Habilitar las notificaciones de consulta para la base de datos. Asegrese de que el ID de usuario utilizado para conectarse a la base de datos tiene los permisos necesarios. Utilice un SqlCommand objeto de ejecutar una instruccin SELECT vlida una notificacin asociada a objetos ya

sea SqlDependency o SqlNotificationRequest . Proporcionar cdigo para procesar la notificacin si los datos que se supervisan los cambios.

Habilitacin de notificaciones de consulta


Por razones de seguridad, bases de datos de SQL Server 2005 no tiene Service Broker habilitado por defecto. Debe habilitar Service Broker para cada base de datos utilizando el comando ALTER DATABASE. Para habilitar Service Broker en la AdventureWorks base de datos mediante SQL Server Management Studio, ejecute la siguiente instruccin Transact-SQL:

ALTER DATABASE AdventureWorks SET ENABLE_BROKER;


Para obtener ms informacin, consulte "Programacin de Service Broker" en SQL Server 2005 Books Online.

Base de datos de configuracin para ejecutar cdigo de ejemplo


Para las muestras de notificacin de consulta para funcionar correctamente, las siguientes instrucciones Transact-SQL se debe ejecutar en el servidor de base de datos.

CREATE QUEUE ContactChangeMessages; CREAR ContactChangeNotifications SERVICIO EN COLA ContactChangeMessages ([Http://schemas.microsoft.com/SQL/Notifications/PostQueryNotification]);


Para obtener ms informacin acerca de cmo configurar colas de Service Broker, vea "Programacin de Service Broker", "CREATE QUEUE," y "CREATE SERVICE" en SQL Server 2005 Books Online.

Permisos de notificaciones de consulta


Los usuarios que ejecutan comandos solicitando notificacin debe tener permiso SUBSCRIBE QUERY NOTIFICACIONES base de datos en el servidor. Cdigo de cliente que se ejecuta en una situacin de confianza parcial requiere la SqlClientPermission .

El siguiente cdigo crea un SqlClientPermission objeto, estableciendo el PermissionState a restricciones . La demanda forzar una SecurityException en tiempo de ejecucin si todos los llamadores situados en la pila de llamadas no se haya concedido el permiso. C# VB

'Cdigo exige a directivas 'System.Security.Permissions y System.Data.SqlClient ' Private Function CanRequestNotifications () As Boolean Dim permiso Como Nuevo SqlClientPermission (_ ) PermissionState.Unrestricted Tratar de permission.Demand () Volver verdadero Catch ex como excepcin Return False End Pruebe Fin Funcin

La eleccin de un objeto de notificacin


La consulta de las notificaciones API proporciona dos objetos a las notificaciones de proceso: SqlDependency y SqlNotificationRequest . En general, la mayora de las aplicaciones ASP.NET no debe utilizar el SqlDependency objeto. Las aplicaciones ASP.NET deben utilizar el nivel superior SqlCacheDependency , que envuelveSqlDependency y proporciona un marco para la administracin de la notificacin y objetos de cach.

Usando SqlDependency
Para utilizar SqlDependency , Service Broker debe estar habilitado para la base de datos de SQL Server 2005 se utiliza, y los usuarios deben tener permisos para recibir notificaciones. Objetos de Service Broker, como la cola de notificaciones, estn predefinidos. Adems, SqlDependency se inicia automticamente un subproceso de trabajo para procesar las notificaciones ya que son enviados a la cola, sino que tambin analiza el mensaje de Service Broker, la exposicin de la informacin como datos de argumento de evento. SqlDependency se debe inicializar llamando al Start mtodo para establecer una dependencia de la base de datos. Este es un mtodo esttico que debe ser llamado slo una vez durante la inicializacin de la aplicacin para cada conexin de base de datos necesaria. La parada de mtodo debe ser llamado al cierre de la aplicacin para cada conexin de dependencia que se hizo.

Usar SqlNotificationRequest
Por el contrario, SqlNotificationRequest requiere para implementar la infraestructura escucha todo usted mismo. Adems, todos los objetos de Service Broker de apoyo, como la cola, el servicio y los tipos de mensajes soportados por la cola debe ser definido. Este enfoque manual es til si su aplicacin requiere un mensaje especial de notificacin o comportamientos de notificacin, o si su solicitud es parte de una aplicacin de Service Broker grande. Para obtener ms informacin acerca de Service Broker, vea "SQL Server Service Broker" en los Libros en pantalla de SQL Server.

Consideraciones especiales al utilizar notificaciones de consulta


. NET Framework 2.0
7 de 7 puntuado este til - Valorar este tema Las aplicaciones que utilizan las funciones de notificacin de consulta deben tener en cuenta las siguientes consideraciones especiales.

Consideracin Cuenta de servicio de SQL Server

Descripcin Una aplicacin no recibir notificaciones de una instancia de SQL Server que utiliza la cuenta de sistema local como cuenta de servicio. Para obtener ms informacin, consulte "Configuracin de las cuentas de servicio de Windows" en los Libros en pantalla de SQL Server. Las notificaciones no se pueden recibir en equipos que ejecutan Windows 95 o Windows 98. Si se realizan varias modificaciones en el interior de una transaccin que afecta a un conjunto de datos con una peticin de notificacin registrada, slo un nico evento de notificacin ser enviado. Una aplicacin que utiliza las notificaciones de consulta debe tener en cuenta los casos en que la notificacin se produce inmediatamente. Cuando se modifican los datos en el servidor, un mensaje de notificacin se enva a la cola de Service Broker apropiado. Las aplicaciones deben volver a registrarse para recibir notificaciones adicionales. Por lo tanto, si un conjunto de datos se actualiza rpidamente por varias aplicaciones, una aplicacin podra recibir una notificacin, recuperar los datos y, a continuacin, obtener otra notificacin de actualizacin casi inmediatamente despus de la cach se ha actualizado. Las aplicaciones que utilizan notificaciones de consulta debe ser escrito para tener en cuenta este caso. Si una aplicacin utiliza los datos que se actualiza constantemente, una estrategia diferente para el almacenamiento en cach de datos puede ser ms apropiado. Cuando una instruccin SELECT se ejecuta en una solicitud de notificacin, la conexin que enva la solicitud debe tener el conjunto de las siguientes opciones: ANSI_NULLS ON ANSI_PADDING ON ANSI_WARNINGS ON CONCAT_NULL_YIELDS_NULL EN Quoted_identifier NUMERIC_ROUNDABORT APAGADO

Recepcin de notificaciones Notificaciones de consulta y transacciones Actualizaciones rpidas y notificaciones de consulta

Valores de la opcin SET

ARITHABORT EN

Escribir consultas de notificacin


Puede configurar las notificaciones de SELECT y EXECUTE. Cuando se utiliza una instruccin EXECUTE, SQL Server registra una notificacin para el comando ejecutado en lugar de la instruccin EXECUTE s mismo. El comando debe cumplir con los requisitos y limitaciones para una instruccin SELECT. Cuando un comando que registra una notificacin contiene ms de una declaracin, el motor de base de datos crea una notificacin para cada sentencia del lote. Las notificaciones de consulta son compatibles con las sentencias SELECT que cumplan con los siguientes requisitos: Las columnas proyectadas en la instruccin SELECT debe ser explcitamente declarado, y los nombres de tabla deben calificarse con nombres de dos partes. Observe que esto significa que todas las tablas de referencia en la sentencia debe estar en la misma base de datos. La instruccin no puede utilizar el asterisco (*) o table_name. * Sintaxis para especificar las columnas. La declaracin no puede usar columnas sin nombre o nombres de columna duplicados. La declaracin debe hacer referencia a una tabla base. Las columnas proyectadas en la instruccin SELECT no puede contener expresiones agregadas a menos que la sentencia utiliza una expresin GROUP BY. Cuando una expresin GROUP BY se proporciona la lista de seleccin puede contener el COUNT_BIG funciones de agregado () o SUM (). Sin embargo, SUM () no se puede especificar para una columna anulable. La instruccin no puede especificar HAVING, CUBE, ROLLUP o. Una columna proyecta en la instruccin SELECT que se utiliza como una simple expresin no debe aparecer ms de una vez. La instruccin no La instruccin no La instruccin no La instruccin no La instruccin no La instruccin no La instruccin no La instruccin no La instruccin no La instruccin no La instruccin no La instruccin no debe debe debe debe debe debe debe debe debe debe debe debe incluir los operadores PIVOT o UNPIVOT. incluir la INTERSECT o EXCEPT. hacer referencia a una vista. contener cualquiera de los siguientes: COMPUTE DISTINCT o COMPUTE BY, o INTO. hacer referencia a variables de servidor globales (@ variable_name @). hacer referencia a tablas derivadas, tablas temporales o variables de tabla. hacer referencia a tablas o vistas de otras bases de datos o servidores. contener subconsultas, combinaciones externas o por cuenta propia se une. hacer referencia a los tipos de objetos grandes: text, ntext e image. utilizar los predicados CONTAINS o FREETEXT de texto completo. utilizar las funciones de conjunto de filas, incluidas OPENROWSET y OPENQUERY. utilizar cualquiera de las siguientes funciones de agregado: AVG, COUNT (*), MAX, MIN,

STDEV DESVESTP, VAR o VARP. La instruccin no debe utilizar cualquiera de las funciones no deterministas, incluidas las funciones de clasificacin y ventanas. La instruccin no debe contener agregados definidos por el usuario. La instruccin no debe hacer referencia a tablas o vistas del sistema, incluidas las vistas de catlogo y vistas de administracin dinmica. La instruccin no debe incluir informacin FOR BROWSE. La instruccin no debe hacer referencia a una cola. La instruccin no debe contener instrucciones condicionales que no puedo cambiar y no puede devolver los

resultados (por ejemplo, WHERE 1 = 0). Para obtener ms informacin, consulte "Creacin de una consulta de notificacin" en los Libros en pantalla de SQL Server.

Usar SqlNotificationRequest y deteccin de notificaciones


. NET Framework 2.0
5 de 16 ha calificado este til - Valorar este tema En esta seccin se muestra cmo utilizar el SqlNotificationRequest desde una aplicacin de Windows Forms. Para demostrar cmo funcionan las notificaciones, esta aplicacin de ejemplo utiliza un subproceso de trabajo para monitorear una cola de Service Broker para las notificaciones de mensajes.

Acerca del ejemplo


La aplicacin de ejemplo es una aplicacin de Windows Forms que carga datos en un conjunto de datos de SQL Server 2005 AdventureWorks base de datos de la muestra. UnSqlDataAdapter llena el objeto DataSet y se une a un DataGridView control. A SqlNotificationRequest objeto para recibir notificaciones se crea y se enlaza a un SqlCommandobjeto utilizado por los SqlDataAdapter . Con el fin de recibir notificaciones, la aplicacin crea un subproceso de trabajo que se conecta a la cola de Service Broker predefinido y relojes para los mensajes. Si una notificacin llega, el mensaje se tira de la cola y el hilo de interfaz de usuario es notificado.

Nota

El cdigo de ejemplo se supone que ha activado las notificaciones de consulta mediante la ejecucin de los scripts en Habilitacin de notificaciones de consulta .

La construccin de la aplicacin de ejemplo


La muestra de aplicaciones de Windows Forms contiene un nico formulario. Siga estos pasos para crear el formulario. 1. Crear una nueva aplicacin para Windows en Visual Studio. 2. Seleccione el formulario predeterminado en el Diseador de formularios. En la cuadrcula de propiedades,

3. 4. 5. 6.
7.

cambie el texto a la propiedad de contactos. Aadir una Etiqueta de control al formulario. Acople el control de etiqueta en la parte inferior del formulario. Agregar un botn de control al formulario. Cambie el texto a la propiedad "Get contactos". Aadir un CheckBox control al formulario. Cambie el texto propiedad de "volver a registrar". Aadir un DataGridView al formulario. Abra el archivo de cdigo del formulario y agregue las siguientes instrucciones al principio del archivo, sobre la definicin de clase. VB

Opcin Explcita En Opcin estricta en Importaciones System.Data Imports System.Data.Sql Imports System.Data.SqlClient Imports System.Threading utilizando System.Data; utilizando System.Data.Sql,

utilizando System.Data.SqlClient; utilizando System.Threading;


8. En la seccin de declaracin de la clase, agregue los siguientes elementos. C# VB

Private changeCount Como Integer = 0 Private Const tableName Como cadena = "Contactos" Private Const StatusMessage Como cadena = _ "{0} se han producido cambios." Private exitRequested Como Boolean = False Private waitInProgress Como Boolean = False 'Los siguientes objetos se vuelven a utilizar "para la vida de la aplicacin. Privado dataToWatch Como DataSet = Nada Privado conexin Como SqlConnection = Nada Privado comando como SqlCommand = Nada 'El nombre del servicio es necesario para la correcta 'registrarse para notificaciones. ' El nombre del servicio debe estar ya definido con 'el Service Broker para la base de datos que se est consultando. Private Const ServiceName Como cadena = _ "Servicio = ContactChangeNotifications" 'El nombre de la base de datos es necesario tanto para la conexin 'cadena y la propiedad SqlNotificationRequest.Options. Private Const DatabaseName Como cadena = "AdventureWorks" 'Especifique el tiempo que la solicitud de notificacin "debera esperar antes de tiempo de espera. " Este valor espera 30 segundos. privada NotificationTimeout Como Integer = 30

9.

Agregue tres mtodos auxiliares, GetConnectionString, GetSQL y GetListenerSQL . La cadena de conexin definida utiliza seguridad integrada. Por lo tanto, se debe verificar que la cuenta que est utilizando tiene los permisos de base de datos necesarios y que el de AdventureWorks base de datos de ejemplo tiene habilitadas las notificaciones. Adems, la base de datos debe tener una cola de ratn definido.Para obtener ms informacin sobre la configuracin de las notificaciones de consulta para esta muestra, consulte Habilitacin de notificaciones de consulta . C# VB

Privado Funcin GetConnectionString () Como Cuerda 'Para evitar guardar la cadena de conexin en el cdigo, "usted puede retrive de un archivo de configuracin. "En las aplicaciones de cliente generales no es necesario incurrir en "gastos generales de la agrupacin de conexiones. Return cadena de formato (. "Data Source = (local); Integrated Security = true;" & _ "Initial Catalog = {0}; Pooling = false; procesamiento asincrnico = true; " , _ DatabaseName)

Fin Funcin Privado Funcin GetSQL () Como cadena Return "SELECT ContactID, FirstName, LastName," & _ "EmailAddress, EmailPromotion" & _ "FROM Person.Contact" & _ "WHERE IS NOT NULL EmailPromotion," End Funcin Privado Funcin GetListenerSQL () Como Cuerda 'Tenga en cuenta que ContactChangeMessages es el nombre "de la cola de Service Broker que deben "estar ya definido. Esta consulta suprime todos los mensajes. En una aplicacin real, "usted quiere mirar slo para sus mensajes. Return "WAITFOR (RECEIVE * FROM ContactChangeMessages)," End Funcin
10. Para recibir notificaciones cuando los datos sobre los cambios en el servidor, la aplicacin debe iniciar un subproceso secundario que observa la cola de Service Broker para nuevos mensajes. Una vez que un mensaje llega, el subproceso de trabajo debe recibir el mensaje y cambiar al hilo de interfaz de usuario. Agregue el cdigo siguiente al mdulo del formulario. C# VB

Private Sub Listen () Uso de comando como New SqlCommand (GetListenerSQL (), conexin) "Asegrese de que no tienen tiempo de espera antes de que los "tiempos de solicitud de notificacin a cabo. Si no connection.State = ConnectionState.Open Entonces Connection.Open () Fin Si command.CommandTimeout = NotificationTimeout + 120 Dim callBack Como Nuevo AsyncCallback ( AddressOf m . OnReaderComplete) Dim asynResult Como IAsyncResult = command.BeginExecuteReader (callback, comando) Si No asynResult.IsCompleted Entonces waitInProgress = Verdadero Final Si Final Usando End Sub Private Sub OnReaderComplete ( ByVal asynResult Como IAsyncResult) 'Usted no puede interactuar con la forma y el contenido 'de un hilo diferente, y este procedimiento de devolucin de llamada "es casi garantizado que se ejecuta desde un subproceso diferente "que la forma. Por lo tanto, no se puede simplemente llamar al cdigo que "actualiza la interfaz de usuario. ' En su lugar, se debe llamar al procedimiento desde el hilo de la forma. " Este cdigo se utiliza la recursividad para cambiar de grupo de subprocesos "a la interfaz de usuario {} AsynResult m . BeginInvoke (switchThreads, args) Exit Sub Fin Si

"En este momento, este cdigo se ejecutar en el subproceso de interfaz de usuario. Intente waitInProgress = False Dim lector como SqlDataReader = CType (_ asynResult.AsyncState, SqlCommand). EndExecuteReader (asynResult) Es bien reader.Read () 'cola vaca de mensajes. " Lgica de la aplicacin se puede reconocer "los datos de la cola para determinar por qu las cosas. Para i Como Integer = 0 Para reader.FieldCount - 1 Debug.WriteLine (lector (i). ToString ()) Siguiente Loop reader.Close () changeCount + = 1 Me . = Label1.Text cadena . Format (StatusMessage, changeCount) 'El usuario puede optar por solicitar "una nueva notificacin por 'marcando la casilla de verificacin en el formulario. " Sin embargo, si el usuario ha solicitado a 'salir, tenemos que hacerlo en su lugar. Si exitRequested Entonces me . Close () Otras ventas GetData (CheckBox1.Checked) Fin Si Catch ex como excepcin MessageBox.Show (ex.Message, ex.Fuente, _ MessageBoxButtons.OK, MessageBoxIcon.Warning) Fin Trate End Sub

11. A continuacin, pon el cdigo siguiente en el Click controlador de eventos para el botn del formulario.
C# VB

Private Sub Button1_Click ( ByVal remitente como System.Object, _ ByVal e como System.EventArgs) Handles Button1.Click changeCount = 0 Me . = Label1.Text cadena . Format (StatusMessage, changeCount) Si la conexin es Nada Entonces conexin = New SqlConnection (GetConnectionString ()) End Si Si el comando Es Nada Entonces 'GetSQL es un procedimiento local cadena SQL. ' Es posible que desee utilizar un procedimiento almacenado "en su aplicacin. command = New SqlCommand (GetSQL (), conexin) Fin Si

Si dataToWatch Es Nada Entonces dataToWatch = New DataSet () End Si GetData (CheckBox1.Checked) End Sub
Este cdigo inicializa el SqlConnection y SqlCommand objetos necesarios para ejecutar un comando para registrar una solicitud de notificacin. Aadir la GetData mtodo siguiente, que crea el SqlNotificationRequest objeto, llena la cuadrcula con datos e inicia un oyente fondo si el usuario lo solicita. C# VB

12.

Private Sub GetData ( ByVal Registrarse como Boolean ) 'Vaciar el conjunto de datos de modo que slo hay "una pena lote de datos que se muestran. dataToWatch.Clear () 'Asegrese de que el objeto de comando no tiene ya "un objeto de notificacin asociada. command.Notification = Nada Si Regstrese Entonces 'Crear y enlazar el objeto SqlNotificationRequest "para el objeto de comando. Dim peticin Como Nuevo SqlNotificationRequest () request.UserData = New Guid (). ToString () request.Options = cadena . Format (_ "Service = {0}; base de datos local = {1}" , ServiceName, _ DatabaseName) "Si un tiempo de espera, una notifcation 'ocurrir lo que indica que es la razn "de la notificacin. request.Timeout = NotificationTimeout command.Notification = solicitud Fin Si Usando adaptador Como Nuevos SqlDataAdapter (comando) adapter.Fill (dataToWatch, tableName) Me . DataGridView1.DataSource = dataToWatch m . DataGridView1.DataMember = tableName End Uso Si Regstrese Entonces 'Inicio del oyente fondo. Me . Listen () End Si End Sub

13. Crear un FormClosed controlador de eventos y agregue el cdigo siguiente a la misma:

C# VB

Private Sub Form1_FormClosed ( ByVal remitente como System.Object, _ ByVal e como System.Windows.Forms.FormClosedEventArgs) _ Handles MyBase . FormClosed Si la conexin IsNot Nada Entonces Connection.close () Fin Si Fin Sub

Prueba de la aplicacin de ejemplo


La aplicacin carga el DataGridView de control con los datos de la AdventureWorks base de datos cuando los datos Get botn es pulsado. Si el Re-register casilla de verificacin est activada, la aplicacin sigue registrando las notificaciones de cambios despus de cada notificacin. Si el Re-register casilla de verificacin no est activada, la aplicacin en s anula el registro despus de una notificacin y no recibe ninguna notificacin hasta que dicho Reregister casilla de verificacin est seleccionada y elDataGridView se actualiza haciendo clic en el Obtener datos . botn 1. Ejecutar la aplicacin, comprobar la Re-register casilla de verificacin y haga clic en el Data Consigue botn. La DataGridView de control debe ser llenado con los datos de la AdventureWorks base de datos. Para probar la aplicacin, actualizar una de las columnas recuperadas por la aplicacin mediante el siguiente comando Transact-SQL: Para restaurar los datos, ejecute el comando siguiente:

2.

ACTUALIZACIN Person.Contact SET LastName = 'Smith' DONDE ContactID = 1


1.

ACTUALIZACIN Person.Contact SET LastName = 'Achong "DONDE ContactID = 1


Cada vez que se modifican los datos, el correspondiente cambio se refleja en el DataGridView control y el indicador de estado Etiqueta de control en la parte inferior de la forma, que indica el nmero de cambios a la base de datos desde el DataGridView se ha cargado.

Usando SqlDependency en una aplicacin de Windows


. NET Framework 2.0
11 de los 25 ha calificado este til - Valorar este tema El siguiente escenario muestra cmo utilizar el SqlDependency clase en una aplicacin de Windows Forms. Para demostrar cmo funcionan las notificaciones, crear dos aplicaciones: un vigilante para procesar las notificaciones de consulta, y un actualizador para modificar los datos que el observador est monitoreando.

Nota

El cdigo de ejemplo se supone que ha activado las notificaciones de consulta mediante la ejecucin de los scripts en Habilitacin de notificaciones de consulta .

Crear la aplicacin Watcher


La aplicacin de observador es una aplicacin de Windows Forms que carga los datos del producto en un conjunto de datos de la AdventureWorks base de datos de SQL Server muestra de 2005. El conjunto de datos se llena con un SqlDataAdapter objeto que est enlazado a un control DataGridView control. Con el fin de recibir notificaciones, una SqlDependency objeto se crea y se enlaza al SqlCommand objeto utilizado por los SqlDataAdapter . El SqlDependency objeto expone un solo evento, OnChange . El controlador que est registrado para procesar las notificaciones a cabo las acciones necesarias para cambiar el hilo de rosca piscina notificar al hilo de interfaz de usuario y luego vuelve a registrar para recibir notificaciones.

Para crear la aplicacin de observador


1.

2. 3. 4. 5. 6.
7.

Crear un nuevo proyecto de aplicacin para Windows llamado "Vigilante de datos". En el Diseador de formularios , seleccione el formato por omisin. Cambie el texto a la propiedad de la Viga . Aadir una Etiqueta de control al formulario. Acople el control de etiqueta en la parte inferior del formulario. Aadir un ListBox control en la parte superior izquierda del formulario. Dimensionar durante aproximadamente tres lneas de texto. Aadir un DataGridView debajo del ListBox control. Agregar un botn de control al formulario y colquelo a la derecha del ListBox control. Cambie el texto propiedad para obtener datos . Abre mdulo de clase del formulario y agregue el cdigo siguiente al principio del archivo, por encima de la definicin de clase. VB

Opcin Estricta En Opcin explcita en Imports System.ComponentModel Imports System.Data.SqlClient Imports System.Security.Permissions mediante System.Data.SqlClient; utilizando System.Security.Permissions;
8. En la seccin de declaracin de la clase, agregue los siguientes elementos: C# VB

Private changeCount Como Integer = 0 Private Const tableName Como cadena = "Inventario" Private Const StatusMessage Como cadena = _ "{0} se han producido cambios". 'Los siguientes objetos se vuelven a utilizar "para la vida de la aplicacin. Privado conexin Como SqlConnection = Nada Privado comando como SqlCommand = Nada Privado dataToWatch Como DataSet = Nada

9.

En el formulario, cree un nuevo mtodo llamado CanRequestNotifications . Este mtodo de verificar la aplicacin tiene permisos para solicitar notificaciones del servidor. C#

VB

Private Function CanRequestNotifications () As Boolean 'Para utilizar la funcin de devolucin de llamada de la 'SqlDependency, la aplicacin debe tener "el permiso SqlClientPermission. Trate Dim perm Como Nuevo SqlClientPermission (_ ) PermissionState.Unrestricted perm.Demand () Volver Verdadero Catch ex como excepcin Return False End Pruebe End Funcin

10. En el formulario de carga de eventos, utilice el valor de retorno de CanRequestNotifications para


establecer la Enabled propiedad de slo botn del formulario. C# VB

Private Sub Form1_Load ( ByVal remitente como System.Object, _ ByVal e como System.EventArgs) Handles MyBase . Carga Button1.Enabled = CanRequestNotifications () End Sub

11. Aadir dos mtodos auxiliares, GetConnectionString y GetSQL . La cadena de conexin definida utiliza
seguridad integrada. Usted tendr que comprobar que la cuenta que est utilizando tiene los permisos de base de datos necesarios y que la base de datos de ejemplo, AdventureWorks , tiene habilitadas las notificaciones.Para obtener ms informacin, consulte Habilitacin de notificaciones de consulta . C# VB

Privado Funcin GetConnectionString () Como Cuerda 'Para evitar guardar la cadena de conexin en el cdigo, "usted puede retrive de un archivo de configuracin. Return "Data Source = (local); Integrated Security = true;" & _ "Initial Catalog = AdventureWorks , " End Funcin Privado Funcin GetSQL () Como cadena Return "SELECT Production.Product.ProductID," & _ "Production.Product.Name, Production.Location.Name como la ubicacin," & _ "Production.ProductInventory.Quantity DE Production.Product" & _ "INNER JOIN Production.ProductInventory" & _ "ON Production.Product.ProductID =" & _ "Production.ProductInventory.ProductID" & _ "INNER JOIN Production.Location" & _ "ON Production.ProductInventory.LocationID =" & _ " Production.Location.LocationID " & _ "WHERE (Production.ProductInventory.Quantity <= @ Cantidad)" & _

"ORDER BY Production.ProductInventory.Quantity, Production.Product.Name," End Funcin


12. Para recibir notificaciones cuando los datos sobre los cambios en el servidor, la aplicacin necesita un controlador de eventos que coincida con la firma de laOnChangeEventHandler delegado. El procedimiento es necesario para capturar el evento y el interruptor del subproceso de trabajo para el hilo de interfaz de usuario.Agregue el cdigo siguiente al mdulo del formulario: C# VB

Private Sub dependency_OnChange (_ ByVal remitente como objeto , ByVal e como SqlNotificationEventArgs) "Este evento tendr lugar en un subproceso del grupo de subprocesos. ' Es ilegal para actualizar la interfaz de usuario desde un subproceso de trabajo 'El siguiente cdigo comprueba para ver si es seguro 'actualizar la interfaz de usuario. Dim i como ISynchronizeInvoke = CType ( Me , ISynchronizeInvoke) "Si se vuelve a InvokeRequired Es cierto que el cdigo 'se ejecuta en un subproceso de trabajo. Si i.InvokeRequired Entonces 'Crear un delegado para realizar el cambio de subproceso Dim tempDelegate Como Nuevo OnChangeEventHandler (_ AddressOf dependency_OnChange) Dim args () As objeto = {sender, e} 'Reunir los datos del subproceso de trabajo 'para el hilo de interfaz de usuario. i.BeginInvoke (tempDelegate, args) Volver Fin Si "Quitar el controlador, ya que es slo bueno "para una sola notificacin Dim dependencia Como SqlDependency = _ CType (sender, SqlDependency) RemoveHandler dependency.OnChange, _ AddressOf dependency_OnChange "En este punto, el cdigo se ejecuta en el "hilo de interfaz de usuario, lo que es seguro para actualizar la interfaz de usuario. changeCount + = 1 Me . = Label1.Text cadena . Format (StatusMessage, changeCount) "Aadir informacin de los argumentos del evento para el cuadro de lista "para propsitos de depuracin solamente. Con M . ListBox1.Items . Clear () . Aadir ( "Informacin:" Y e.Info.ToString ()) . Aadir ( "Source:" Y e.Source.ToString ()) . Aadir ( "Tipo:" y e.Type.ToString ()) End Con

'Actualizar el conjunto de datos que est destinado a la red. GetData () End Sub

13. Con el fin de recibir notificaciones, la aplicacin debe registrar un SqlDependency con el
objeto SqlCommand objeto que se utiliza para obtener datos de la aplicacin. Aadir un mtodo llamado GetData como sigue: C# VB

Private Sub GetData () 'Vaciar el conjunto de datos de modo que slo hay 'un valor de lote de datos mostrados. dataToWatch.Clear () 'Asegrese de que el objeto de comando no tiene ya "un objeto de notificacin asociada. command.Notification = Nada 'Crear y enlazar el objeto SqlDependency 'al comando Usando adaptador Como Nuevos SqlDataAdapter (comando) adapter.Fill (dataToWatch, tableName) Me . DataGridView1.DataSource = dataToWatch m . DataGridView1.DataMember = tableName End Uso End Sub

14. Agregue un controlador de eventos para el click en el botn de evento slo el formulario y coloque el cdigo
siguiente en el cuerpo del controlador: C# VB

Private Sub Button1_Click ( ByVal remitente como System.Object, _ ByVal e como System.EventArgs) Handles Button1.Click changeCount = 0 Me . = Label1.Text cadena . Format (StatusMessage, changeCount) "Eliminar la dependencia de cualquier conexin existente y crear uno nuevo. SqlDependency. Detener (GetConnectionString ()) SqlDependency.Start (GetConnectionString ()) Si la conexin es Nada Entonces conexin = New SqlConnection (GetConnectionString ()) End Si Si comando Es Nada Entonces 'GetSQL es un procedimiento local que devuelve 'a paramaterized cadena SQL. Es posible que desee 'para utilizar un procedimiento almacenado en su aplicacin. command = New SqlCommand (GetSQL (), conexin)

Dim prm Como New SqlParameter ( "Cantidad @" , SqlDbType.Int) prm.Direction = ParameterDirection.Input prm.DbType = DbType.Int32 prm.Value = 100 command.Parameters.Add (PRM) Fin Si Si dataToWatch Es Nada Entonces dataToWatch = New DataSet () End Si GetData () End Sub

15. En la forma de FormClosed evento, agregue el cdigo siguiente para limpiar la dependencia y las conexiones
de base de datos: C# VB

Private Sub Form1_FormClosed ( ByVal remitente como System.Object, _ ByVal e como System.Windows.Forms.FormClosedEventArgs) _ Handles MyBase . FormClosed SqlDependency. Detener (GetConnectionString ()) Si la conexin IsNot Nada Entonces Connection.close () Fin Si Fin Sub
Con la aplicacin de observador completado, usted tendr que crear la aplicacin de actualizacin y vuelva a ejecutar juntos.

Crear la aplicacin Updater


La aplicacin de actualizacin proporciona una interfaz sencilla para modificar el conjunto de datos que est siendo supervisado por la aplicacin de observador. El actualizador en este ejemplo es tambin una aplicacin para Windows, pero cualquier tipo de aplicacin se puede utilizar para actualizar los datos. Siga estos pasos para crear la aplicacin de actualizacin: 1. Crear un nuevo proyecto de aplicacin para Windows llamado "Data Updater". 2. En el Diseador de formularios , seleccione el formato por omisin. En la cuadrcula de propiedades, cambie

3. 4. 5.
6.

el texto a la propiedad "Inventario Updater". Aadir una Etiqueta de control y un TextBox control para formarse. Cambiar el texto de la etiqueta de propiedad para identificacin del producto y el nombre de la propiedad del cuadro de texto a "txtProductID". Aadir otra etiqueta y cuadro de texto. Cambiar el texto de la etiqueta de propiedad a la cantidad y el nombre de la propiedad del cuadro de texto a "txtQuantity". Agregar un botn de control y establezca su Texto propiedad en "Actualizar". Agregue las siguientes directivas a la clase de formulario: VB

Opcin Estricta En Opcin explcita en Imports System.Data Imports System.Data.SqlClient

utilizando System.Data mediante System.Data.SqlClient;


7. En la seccin de declaracin de la clase, agregue los siguientes elementos: C# VB

'Los siguientes objetos se vuelven a utilizar "para la vida de la aplicacin. Privado conexin Como SqlConnection = Nada Privado comando como SqlCommand = Nada

8.

Aadir dos mtodos auxiliares, GetConnectionString y GetSQL , a la forma. Deben tener el siguiente aspecto: C# VB

Privado Funcin GetConnectionString () Como Cuerda 'Para evitar guardar la cadena de conexin en el cdigo, "usted puede retrive de un archivo de configuracin. Return "Data Source = (local); Integrated Security = true;" & _ "Initial Catalog = AdventureWorks , " End Funcin Privado Funcin GetSQL () Como cadena Return "Production.ProductInventory UPDATE" & _ "Production.ProductInventory.Quantity SET Cantidad = @" & _ "WHERE ProductID = @ Production.ProductInventory.ProductID," End Funcin

9.

En el click del evento Get Data botn, agregue el siguiente cdigo: C# VB

Private Sub Button1_Click ( ByVal remitente como System.Object, _ ByVal e como System.EventArgs) Handles Button1.Click Dim productID As Integer = CInt (txtProductID.Text) Dim cantidad como Integer = CInt (txtQuantity.Text) Si la conexin es Nada Entonces conexin = New SqlConnection (GetConnectionString ()) Connection.Open () Fin Si Si el comando Es Nada Entonces 'GetSQL es un procedimiento local que devuelve 'a paramaterized cadena SQL. Es posible que desee 'para utilizar un procedimiento almacenado en la applicaiton. command = New SqlCommand (GetSQL (), conexin) Dim param Como New SqlParameter ( "Cantidad @" , SqlDbType.Int) param.Direction = ParameterDirection.Input

param.DbType = DbType.Int32 command.Parameters.Add (param) param = New SqlParameter ( "@ ProductID" , SqlDbType.Int) param.Direction = ParameterDirection.Input param.DbType = DbType.Int32 command.Parameters.Add (param) Fin Si command.Parameters ( "Cantidad @" ). Valor = cantidad command.Parameters ( "@ ProductID" ). Valor = productID Dim rowsAffected Como Integer = command.ExecuteNonQuery () MessageBox.Show (rowsAffected y "actualizados los registros." , "Update" ) End Sub
10. Por ltimo, agregue el cdigo siguiente al formulario FormClosed controlador de eventos: C# VB

Private Sub Form1_FormClosed ( ByVal remitente como System.Object, _ ByVal e como System.Windows.Forms.FormClosedEventArgs) _ Handles MyBase . FormClosed Si la conexin IsNot Nada Entonces Connection.close () Fin Si Fin Sub

Probar la aplicacin
Compilar y ejecutar aplicaciones. Haga clic en Obtener datos sobre la aplicacin de observador para rellenar la cuadrcula de la aplicacin con los datos y registrar una solicitud de notificacin. Examinar los datos en la red para encontrar un identificador de producto con una cantidad de inventario de cero. Cambie a la aplicacin de actualizacin, introduzca el ID de producto y una nueva cantidad de uno, y haga clic en Update . Usted debe ver la aplicacin de observador se actualizar automticamente momentos despus de la actualizacin cambia los datos en el servidor. Observe que el ListBox control muestra informacin acerca de la actualizacin.

Usando SqlDependency en una aplicacin ASP.NET


. NET Framework 2.0
Otras versiones

5 de 12 ha calificado este til - Valorar este tema El ejemplo de esta seccin muestra cmo utilizar SqlDependency indirectamente mediante el aprovechamiento de ASP.NET SqlCacheDependency objeto. ElSqlCacheDependency utiliza un objeto SqlDependency para escuchar las notificaciones correctamente y actualizar la memoria cach.

Nota

El cdigo de ejemplo se supone que ha activado las notificaciones de consulta mediante la ejecucin de los scripts en Habilitacin de notificaciones de consulta .

Acerca de la aplicacin de ejemplo


La aplicacin de ejemplo utiliza una nica pgina Web ASP.NET para mostrar informacin sobre los productos de la AdventureWorks de SQL Server 2005 de base de datos en un GridView control. Cuando se carga la pgina, el cdigo escribe la hora actual en una etiqueta de control. A continuacin, define un SqlCacheDependency objeto y define las propiedades de la cach de objetos para almacenar los datos de la cach para un mximo de tres minutos. El cdigo se conecta a la base de datos y recupera los datos.Cuando la pgina se carga y se ejecuta la aplicacin ASP.NET recuperar los datos de la cach, que se puede verificar observando que el tiempo en la pgina no cambia. Si los datos que se supervisan los cambios, ASP.NET invalida la cach y volver a llenar el GridView control con nuevos datos, la actualizacin de la hora que se muestra en laEtiqueta de control.

Crear la aplicacin de ejemplo


Siga estos pasos para crear y ejecutar la aplicacin de ejemplo: 1. Crear un nuevo sitio web de ASP.NET. 2. Agregar una etiqueta y un GridView control a la pgina Default.aspx. 3. Abra el mdulo de la pgina de la clase y agregue las siguientes directivas: VB

Opcin Estricta En Opcin explcita en Imports System.Data.SqlClient mediante System.Data.SqlClient; utilizando System.Web.Caching;

4.

Agregue el siguiente cdigo en la pgina Page_Load evento: C# VB

Protected Sub Page_Load ( ByVal remitente como objeto , _ ByVal e como System.EventArgs) Handles m . Carga Label1.Text = "Refresh Cache:" & _ Fecha . Now.ToLongTimeString () 'Crear una conexin a la base de datos de la dependencia SqlDependency.Start (GetConnectionString ()) Con conexin Como Nuevo SqlConnection (GetConnectionString ()) Usando el comando Como Nuevo SqlCommand (GetSQL (), conexin) Dim dependencia Como Nuevo SqlCacheDependency (comando)

'Actualizar la cach despus de que el nmero de minutos 'se indican a continuacin si el cambio no se produce. " Este valor puede ser almacenada en un archivo de configuracin. Dim numberOfMinutes Como Integer = 3 Dim expira Como Fecha = _ DateTime.Now.AddMinutes (numberOfMinutes) Response.Cache.SetExpires (caduca) Response.Cache.SetCacheability (HttpCacheability. Pblica ) Response.Cache.SetValidUntilExpires ( Verdadero ) Response.AddCacheDependency (dependencia) Connection.Open () GridView1.DataSource Command.ExecuteReader = () GridView1.DataBind () Fin Usando End Uso End Sub

5.

Aadir dos mtodos auxiliares, GetConnectionString y GetSQL . La cadena de conexin definida utiliza seguridad integrada. Usted tendr que comprobar que la cuenta que est utilizando tiene los permisos de base de datos necesarios y que la base de datos de ejemplo, AdventureWorks , tiene habilitadas las notificaciones.Para obtener ms informacin, vea Consideraciones especiales al utilizar notificaciones de consulta . C# VB

Privado Funcin GetConnectionString () Como Cuerda 'Para evitar guardar la cadena de conexin en el cdigo, "usted puede retrive de un archivo de configuracin. Volver "Data Source = (local); Integrated Security = true;" & _ "Initial Catalog = AdventureWorks;" End Funcin Privado Funcin GetSQL () Como cadena Return "SELECT Production.Product.ProductID," & _ "Production.Product.Name," & _ "Production.Location.Name como la ubicacin," & _ "Production.ProductInventory.Quantity" & _ "DESDE Production.Product INNER JOIN" & _ "Production.ProductInventory" & _ "ON Production.Product.ProductID =" & _ "Production.ProductInventory.ProductID" & _ "INNER JOIN Production.Location" & _ "en la produccin. ProductInventory.LocationID = " & _ "Production.Location.LocationID" & _ "WHERE (Production.ProductInventory.Quantity <= 100)" & _ "ORDER BY Production.ProductInventory.Quantity," & _ "Production.Product.Name; " End Funcin

Probar la aplicacin
La aplicacin almacena en cach los datos que aparecen en el formulario Web y refresca cada tres minutos si no hay actividad. Si se produce un cambio de la base de datos, la cach se actualiza inmediatamente. Ejecute la aplicacin desde Visual Studio, que carga la pgina en el navegador. El tiempo de actualizacin de la cach que aparece indica cuando la cach se actualiz por ltima vez. Espere tres minutos y, a continuacin, actualice la pgina, provocando un evento de devolucin de ocurrir. Tenga en cuenta que el tiempo que aparece en la pgina ha cambiado. Si actualiza la pgina en menos de tres minutos, el tiempo que aparece en la pgina seguir siendo el mismo. Ahora actualizar los datos en la base de datos utilizando un comando de Transact-SQL UPDATE, o utilizando el programa actualizador de datos creado en el Uso de SqlDependency en una aplicacin de Windows , y actualice la pgina. La hora que se muestra ahora indica que la memoria cach se actualiza con los nuevos datos de la base de datos. Tenga en cuenta que aunque el cach se actualiza, la hora que aparecen en la pgina no cambia hasta que se produce un evento de devolucin.

Usando SqlDependency para detectar cambios en el servidor


. NET Framework 2.0
Otras versiones

0 de 9 puntuado este til - Valorar este tema Un SqlDependency objeto puede estar asociada con un SqlCommand con el fin de detectar cuando los resultados de consulta difieren de las originalmente recuperados. Si la aplicacin mantiene el estado, como una aplicacin de formularios Windows, entonces usted puede crear una SqlDependency objeto y mantener una referencia a la misma.Tambin puede asignar un delegado a la OnChange evento, que se activar cuando los resultados cambian de un comando asociado. Debe asociar el SqlDependency con el comando antes de ejecutar el comando. El HasChanges caracterstica de la SqlDependency tambin se puede utilizar para determinar si los resultados de la consulta han cambiado desde que se recuperaron los datos primero.

Consideraciones de seguridad
La infraestructura de la dependencia se basa en una SqlConnection que se abre al inicio se denomina con el fin de recibir notificaciones que los datos subyacentes han cambiado para una orden dada. La capacidad de un cliente para iniciar la llamada a SqlDependency.Start se controla mediante el uso de SqlClientPermission y atributos de cdigo de acceso de seguridad. Para obtener ms informacin, consulte Habilitacin de notificaciones de consulta y de seguridad de acceso del cdigo y ADO.NET .

Ejemplo
Los pasos siguientes ilustran cmo declarar una dependencia, ejecutar un comando y recibir una notificacin cuando el conjunto de resultados de los cambios: 1. Iniciar una SqlDependency conexin con el servidor.

2. 3.

Crear SqlConnection y SqlCommand objetos para conectarse al servidor y definir una instruccin TransactSQL. Crear una nueva SqlDependency objeto, o utilizar una ya existente, y enlazarlo al SqlCommand objeto. Internamente, esto crea un SqlNotificationRequest objeto y la enlaza con el objeto de comando segn sea necesario. Esta solicitud de notificacin contiene un identificador interno que identifica de forma nica estaSqlDependency objeto. Tambin se inicia la escucha de cliente si no est ya activa. Suscribir un controlador de eventos para el OnChange caso de SqlDependency objeto. Ejecuta el comando con cualquiera de las Ejecutar mtodos de la SqlCommand objeto. Debido a que el comando est enlazado al objeto de notificacin, el servidor reconoce que se debe generar una notificacin, y la informacin de la cola se apuntan a la cola de dependencias. Detener la SqlDependency conexin con el servidor.

4. 5. 6.

Si algn usuario posteriormente cambia los datos subyacentes, Microsoft SQL Server detecta que hay una notificacin pendiente para ese cambio, y publica una notificacin que se procesa y reenva al cliente a travs de la subyacente SqlConnection que se crea llamando SqlDependency.Start . El oyente cliente recibe el mensaje de invalidacin.La escucha de cliente localiza el correspondiente SqlDependency objeto y dispara la OnChange evento. El fragmento de cdigo siguiente se muestra el patrn de diseo que se utiliza para crear una aplicacin de ejemplo. C# VB

Sub inicializacin () 'Crear una conexin de dependencia. SqlDependency.Start (connectionString, queueName) End Sub Sub SomeMethod () 'se supone la conexin es una conexin SqlConnection abierta. " Crear un nuevo objeto SqlCommand. Dim comando Como Nuevo SqlCommand (_ "SELECT ShipperID, CompanyName telfono desde dbo.Shippers" , _ conexin) 'Crear una dependencia y asociarlo con el SqlCommand. Dim dependencia Como Nuevo SqlDependency (comando) "mantener el refence en un miembro de la clase. " Suscrbase al evento SqlDependency. AddHandler dependency.OnChange, AddressOf OnDependencyChange 'Ejecuta el comando. Command.ExecuteReader () 'Procesar el DataReader. End Sub 'Manejador mtodo Sub OnDependencyChange ( ByVal remitente como objeto , ByVal e como SqlNotificationsEventArgs) End Sub 'Controle el evento (por ejemplo, la nulidad de la entrada de la cach). Sub Terminacin () 'liberacin de la dependencia SqlDependency. Detener (connectionString, queueName)

End Sub

La ejecucin de un SqlCommand con una SqlNotificationRequest


. NET Framework 2.0
Otras versiones

0 de 1 puntuado este til - Valorar este tema Un SqlCommand se puede configurar para generar una notificacin cuando cambian los datos despus de que se ha obtenido del servidor y en el resultado sera diferente si la consulta se ejecuta de nuevo. Esto es til para situaciones en las que desee utilizar colas personalizadas de notificacin en el servidor o si no desea mantener los objetos activos.

Creacin de la solicitud de notificacin


Puede utilizar un SqlNotificationRequest objeto para crear la solicitud de notificacin mediante la unin a un SqlCommand objeto. Una vez que la solicitud es creado, usted ya no tendr la SqlNotificationRequest objeto. Puede consultar la cola de las notificaciones y responder apropiadamente. Las notificaciones pueden ocurrir incluso si la aplicacin se cierra y se reinicia posteriormente. Cuando el comando con la notificacin asociada se ejecuta, cualquier cambio en la activacin del conjunto de resultados original que enva un mensaje a la cola de SQL Server 2005 que se configur en la solicitud de notificacin. Cmo sondear la cola de SQL Server 2005 e interpretar el mensaje es especfico para su aplicacin. La aplicacin es responsable para el sondeo de la cola y hacer reaccionar basado en el contenido del mensaje.

Nota

Cuando se utiliza SQL Server solicitudes de notificacin con SqlDependency , crear su propio nombre de la cola en lugar de utilizar el nombre de servicio por defecto.
No hay nuevos del lado del cliente elementos de seguridad para SqlNotificationRequest . Esto es principalmente una funcin de servidor, y el servidor se ha creado privilegios especiales que los usuarios deben tener para solicitar una notificacin. Para obtener ms informacin, consulte Habilitacin de notificaciones de consulta y "Creacin de aplicaciones de Notification Services" en los Libros en pantalla de SQL Server.

Ejemplo
El fragmento de cdigo siguiente se muestra el patrn de diseo para la creacin de la aplicacin. C# VB

'Supongamos conexin es una SqlConnection abierta. " Crear un nuevo objeto SqlCommand. Dim comando Como Nuevo SqlCommand (_

"SELECT ShipperID, CompanyName telfono desde dbo.Shippers" , conexin) 'Crear un objeto SqlNotificationRequest. Dim notficationRequest Como Nuevo SqlNotificationRequest () notficationRequest.id = "NotificationID" notficationRequest.Service = "mySSBQueue" "Asociar la solicitud de notificacin con el comando. command.Notification = notficationRequest 'Ejecuta el comando. Command.ExecuteReader () 'Procesar el DataReader. ' Puede utilizar la sintaxis T-SQL para sondear peridicamente la cola de SQL Server para ver si usted tiene un nuevo mensaje.

Uso de varios conjuntos de resultados activos


. NET Framework 2.0
Otras versiones 5 de 8 puntuado este til - Valorar este tema Varios conjuntos de resultados activos (MARS) es una nueva funcin con el apoyo de ADO.NET 2.0, que permite la ejecucin de varios lotes en una sola conexin. En versiones anteriores, slo un lote podra ser ejecutado en un tiempo en contra de una nica conexin. Ejecucin de varios lotes con MARS no implica la ejecucin simultnea de las operaciones.

Habilitacin de varios conjuntos de resultados activos


. NET Framework 2.0
Otras versiones

7 de cada 18 ha calificado este til - Valorar este tema Varios conjuntos de resultados activos (MARS) es una nueva caracterstica que funciona con SQL Server 2005 para permitir la ejecucin de varios lotes en una sola conexin.Para tener acceso a varios conjuntos de resultados en versiones anteriores de SQL Server utilizando SqlDataReader objetos, un independiente SqlConnection objeto debe ser utilizado con cada SqlCommand objeto. Sin embargo, cuando MARS est habilitado para su uso con SQL Server 2005, cada objeto de comando que se usa aade una sesin a la conexin.

Nota

Una sola sesin de MARS abre una conexin lgica para MARS usar y luego una conexin lgica para cada comando activo.

Activacin y desactivacin de MARS en la cadena de conexin


Nota

Las cadenas de conexin siguientes utilizan el ejemplo AdventureWorks incluida en la base de datos SQL Server 2005. Las cadenas de conexin previstos suponer que la base de datos se instala en un servidor llamado MSSQL1. Modifique la cadena de conexin segn sea necesario para su entorno.
La caracterstica MARS est desactivado por defecto. Se puede activar mediante la adicin de la "MultipleActiveResultSets = True" par de palabras clave para la cadena de conexin. "True" es el nico valor vlido para habilitar MARS. El siguiente ejemplo muestra cmo conectarse a una instancia de SQL Server y cmo especificar que Marte debe estar habilitado. C# VB

Dim connectionString Como cadena = "Data Source = MSSQL1," & _ "Initial Catalog = AdventureWorks; Integrated Security = SSPI" & _ "MultipleActiveResultSets = True"

Puede desactivar MARS aadiendo el "MultipleActiveResultSets = False" par de palabras clave para la cadena de conexin. "Falso", es el nico valor vlido para deshabilitar MARS. La cadena de conexin siguiente muestra cmo deshabilitar MARS. C# VB

Dim connectionString Como cadena = "Data Source = MSSQL1," & _ "Initial Catalog = AdventureWorks; Integrated Security = SSPI" & _ "MultipleActiveResultSets = False"

Consideraciones especiales al utilizar MARS


En general, las aplicaciones existentes no deben requerir modificaciones para utilizar una conexin habilitada para MARS. Sin embargo, si desea utilizar las caractersticas de Marte en sus aplicaciones, debe comprender las siguientes consideraciones especiales.

Declaracin Interleaving
Operaciones MARS ejecutar de forma sincrnica en el servidor. Intercalado Declaracin de instrucciones INSERT SELECT y BULK est permitido. Sin embargo, el lenguaje de manipulacin de datos (DML) y los datos de lenguaje de definicin (DDL) ejecutar atmicamente. Todas las declaraciones que intentan ejecutarse mientras un lote atmico est ejecutando se bloquean. La ejecucin en paralelo en el servidor no es una caracterstica MARS. Si dos lotes se presentan bajo una conexin MARS, una de ellas contiene una instruccin SELECT, y el otro que contiene una instruccin DML, el DML puede comenzar su ejecucin en ejecucin de la sentencia SELECT. Sin embargo, la sentencia DML debe ejecutarse hasta su finalizacin antes de la instruccin SELECT puede avanzar. Si ambas declaraciones se ejecuta en la misma transaccin, los cambios realizados por una sentencia DML despus de la instruccin SELECT se ha iniciado la ejecucin no son visibles para la operacin de lectura. Una declaracin WAITFOR dentro de una instruccin SELECT no produce la transaccin mientras que se espera, es decir, hasta la primera fila se produce. Esto implica que no hay otros lotes puede ejecutar dentro de la misma conexin, mientras que una instruccin WAITFOR est esperando.

MARS cach de sesin


Cuando se abre una conexin con MARS habilitado, una sesin lgica se crea, lo que implica una sobrecarga adicional. Para reducir al mnimo los gastos generales y mejorar el rendimiento, SqlClient almacena en cach la sesin de MARS dentro de una conexin. El cach contiene como mximo 10 sesiones de MARS. Este valor no es ajustable por el usuario. Si el lmite de la sesin se alcanza una nueva sesin es creada, un error no se genera. La memoria cach y sesiones contenida en el mismo son cada conexin, ya que no se comparten en las conexiones. Cuando una sesin se libera, se devuelve a la piscina a menos lmite superior de la piscina se ha alcanzado. Si el grupo de cach est llena, se cierra la sesin. Sesiones de MARS no caducan. Slo se limpian cuando el objeto de conexin est dispuesto. La cach de sesin de MARS no est preinstalado. Se carga como la aplicacin requiere ms sesiones.

Seguridad para subprocesos


Operaciones MARS no son thread-safe.

Agrupacin de conexiones
Conexiones habilitadas para MARS se agrupan como cualquier otra conexin. Si una aplicacin abre dos conexiones, una con MARS habilitado y con una discapacidad MARS, las dos conexiones se encuentran en piscinas separadas. Para obtener ms informacin, consulte Uso de la agrupacin de conexiones con SQL Server .

SQL Server Entorno de ejecucin de lotes


Cuando se abre una conexin, un entorno por defecto est definido. Este entorno se copia en una lgica sesin MARS. El entorno de ejecucin de lotes incluye los siguientes componentes: Configure las opciones (por ejemplo, ANSI_NULLS, DATE_FORMAT, IDIOMA, TEXTSIZE) Contexto de seguridad (usuario / aplicacin de rol) Base de datos de contexto (base de datos actual) Variables de Ejecucin del Estado (por ejemplo, @ @ ERROR, @ @ ROWCOUNT, @ @ @ @ IDENTITY FETCH_STATUS)

De nivel superior las tablas temporales

En SQL Server 2000 y versiones anteriores, todos los lotes que se ejecutan bajo la accin misma conexin del entorno mismo lote. Los cambios realizados en el entorno de proceso por lotes por un lote son visibles para todos los lotes posteriores. Con MARS, un entorno de ejecucin predeterminado est asociado a una conexin. Cada lote nuevo que comienza a ejecutarse bajo una conexin determinada recibe una copia del entorno por defecto. Cada vez que el cdigo se ejecuta en un lote determinado, todos los cambios realizados en el entorno pertenecen al mbito de la partida especfica. Una vez que finaliza la ejecucin, los parmetros de ejecucin se copian en el entorno por defecto. En el caso de un nico lote que emite varios comandos para ser ejecutadas de forma secuencial en la misma transaccin, la semntica son los mismos que los expuestos por las conexiones que anteriores clientes o servidores.

Ejecucin en paralelo
MARS no est diseado para eliminar todos los requisitos para varias conexiones en una aplicacin. Si una aplicacin necesita cierto ejecucin paralela de comandos en un servidor, conexiones mltiples se debe utilizar. Por ejemplo, considere la situacin siguiente. Dos objetos de comando se crean, uno para procesar un conjunto de resultados y otro para la actualizacin de datos, que comparten una conexin comn a travs de MARS. En este escenario, la Transaccin . Cometer un error en la actualizacin hasta que todos los resultados han sido ledos en el objeto de primer comando, dando la siguiente excepcin: Mensaje: Contexto de transaccin en uso por otra sesin. Hay tres opciones para el manejo de este escenario: 1. Iniciar la transaccin despus de que el lector se crea, por lo que no es parte de la transaccin. Cada

2.
3.

actualizacin se convierte en su propia transaccin. Comprometerse todo el trabajo despus de que el lector est cerrado. Esto tiene el potencial para un lote sustancial de cambios. No utilizar MARS, en lugar de utilizar una conexin separada para cada objeto de comando como te gustara que antes de MARS.

Deteccin de Apoyo MARS


Una aplicacin puede comprobar la compatibilidad MARS leyendo la SqlConnection.ServerVersion valor. El nmero principal debe ser de 9 para SQL Server 2005.

Trabajo con varios conjuntos de resultados activos


. NET Framework 2.0
Otras versiones

7 de cada 15 ha calificado este til - Valorar este tema Antes de la introduccin de varios conjuntos de resultados activos (MARS), los desarrolladores tuvieron que utilizar tanto conexiones mltiples o cursores del lado del servidor para resolver ciertos escenarios. Adems, cuando las conexiones mltiples se utiliza en una situacin transaccional, conexiones enlazadas (con sp_getbindtoken ysp_bindsession ) fueron requeridos. Los escenarios siguientes muestran cmo utilizar una conexin habilitada para MARS en lugar de conexiones mltiples.

Encadenar comandos mltiples con MARS


La aplicacin de consola siguiente se muestra cmo utilizar dos SqlDataReader con dos objetos SqlCommand y un solo objeto SqlConnection objeto con MARS habilitado.

Ejemplo
El ejemplo se abre una nica conexin a la AdventureWorks base de datos. El uso de un SqlCommand objeto, un SqlDataReader se crea. A medida que el lector se utiliza un segundo SqlDataReader se abre, a partir de datos de la primera SqlDataReader como entrada a la clusula WHERE para el segundo lector.

Nota

En el ejemplo siguiente, se utiliza la muestra AdventureWorks incluida en la base de datos SQL Server 2005. La cadena de conexin previsto en el cdigo de ejemplo se supone que la base de datos est instalado y disponible en el equipo local. Modifique la cadena de conexin segn sea necesario para su entorno.
C# VB

Opcin Estricta En Opcin explcita en Imports System Imports System.Data Imports System.Data.SqlClient mdulo Module1 Sub Main () 'Por defecto, MARS se desactiva cuando se conecta 'a un host MARS habilitado como SQL Server 2005. " Debe estar habilitado en la cadena de conexin. Dim connectionString Como cadena GetConnectionString = () Dim VendorID Como Integer Dim vendorCmd Como SqlCommand Dim productCmd Como SqlCommand Dim productReader Como SqlDataReader Dim vendorSQL Como cadena = & _ "SELECT VendorID, nombre de Purchasing.Vendor" Dim productSQL Como cadena = _ "SELECT FROM Production.Product.Name Production.Product" & _ "INNER JOIN Purchasing.ProductVendor" & _ "en la produccin. Product.ProductID = " & _ "Purchasing.ProductVendor.ProductID" & _ "WHERE Purchasing.ProductVendor.VendorID = @ VendorID" Usando awConnection Como Nuevo SqlConnection (connectionString) vendorCmd = New SqlCommand (vendorSQL, awConnection) productCmd = New SqlCommand (productSQL, awConnection) productCmd.Parameters.Add ( "@ VendorID" , SqlDbType.Int) awConnection.Open () Usando vendorReader Como SqlDataReader = vendorCmd.ExecuteReader () Mientras vendorReader.Read ()

Console.WriteLine (vendorReader ( "Nombre" )) VendorID = CInt (vendorReader ( "VendorID" )) productCmd.Parameters ( "@ VendorID" ). Valor = VendorID 'La siguiente lnea de cdigo requiere 'una conexin MARS habilitado. productReader = productCmd.ExecuteReader () Uso de productReader Mientras productReader.Read () Console.WriteLine ( "" + CStr (productReader ( "Nombre" ))) End Mientras End Usando Fin Mientras Fin Usando End Uso Console.WriteLine ( "Presione cualquier tecla para continuar" ) Console.ReadLine () End Sub Funcin GetConnectionString () Como Cuerda 'Para evitar guardar la cadena de conexin en el cdigo, "usted puede retrive de un archivo de configuracin. Return "Data Source = (local); Integrated Security = SSPI;" & _ "Initial Catalog = AdventureWorks; MultipleActiveResultSets = True " End Funcin Fin del mdulo

Lectura y actualizacin de datos con MARS


MARS permite una conexin que se utilizar para las operaciones de lectura y el lenguaje de manipulacin de datos (DML) con ms de una operacin pendiente. Esta caracterstica elimina la necesidad de una aplicacin para tratar con transitadas conexin-errores. Adems, MARS puede sustituir el usuario de los cursores del lado del servidor, que en general consumen ms recursos. Finalmente, debido a mltiples operaciones pueden operar en una nica conexin, pueden compartir el mismo contexto de transaccin, lo que elimina la necesidad de utilizar sp_getbindtoken y sp_bindsession procedimientos almacenados del sistema.

Ejemplo
La aplicacin de consola siguiente se muestra cmo utilizar dos SqlDataReader con tres objetos SqlCommand y un solo objeto SqlConnection objeto con MARS habilitado.El objeto primer comando recupera una lista de los proveedores cuya calificacin de riesgo es 5. El objeto segundo comando usa el ID de proveedor siempre a partir de unSqlDataReader para cargar el segundo SqlDataReader con todos los productos para el proveedor en particular. Cada registro del producto es visitado por el segundo SqlDataReader . Un clculo se realiza para determinar lo que el nuevo OnOrderQty debe ser. El objeto de comando tercero se utiliza para actualizar la ProductVendor tabla con el nuevo valor. Todo este proceso se lleva a cabo en una sola transaccin, que se retrotrae al final.

Nota

En el ejemplo siguiente, se utiliza la muestra AdventureWorks incluida en la base de datos SQL Server 2005. La cadena de conexin previsto en el cdigo de ejemplo se supone que la base de datos est instalado y disponible en el equipo local. Modifique la cadena de conexin segn sea necesario para su entorno.

C# VB

Opcin Estricta En Opcin explcita en Imports System Imports System.Data Imports System.Data.SqlClient Mdulo Module1 Sub Main () 'Por defecto, MARS se desactiva cuando se conecta 'a un host MARS habilitado como SQL Server 2005. " Debe estar habilitado en la cadena de conexin. Dim connectionString Como cadena GetConnectionString = () Dim Dim Dim Dim updateTx As SqlTransaction vendorCmd As SqlCommand prodVendCmd As SqlCommand updateCmd As SqlCommand

Dim prodVendReader Como SqlDataReader Dim Dim Dim Dim Dim Dim Dim vendorID As Integer productID As Integer minOrderQty As Integer maxOrderQty As Integer onOrderQty As Integer recordsUpdated As Integer totalRecordsUpdated As Integer

Dim vendorSQL Como cadena = _ "SELECT VendorID, nombre de Purchasing.Vendor" & _ "WHERE CreditRating = 5" Dim prodVendSQL Como cadena = _ "SELECT ProductID, MaxOrderQty, MinOrderQty, OnOrderQty" & _ "FROM Purchasing.ProductVendor" & _ "DONDE VendorID = @ VendorID" Dim updateSQL Como cadena = _ "UPDATE Purchasing.ProductVendor" & _ "SET OnOrderQty = @ OrderQty" & _ "WHERE ProductID = @ ProductID y VendorID = @ VendorID" Usando awConnection Como Nuevo SqlConnection (connectionString) awConnection.Open () updateTx = awConnection.BeginTransaction () vendorCmd = New SqlCommand (vendorSQL, awConnection) vendorCmd.Transaction = updateTx prodVendCmd = New SqlCommand (prodVendSQL, awConnection) prodVendCmd.Transaction = updateTx prodVendCmd.Parameters.Add ( "@ VendorID" , SqlDbType.Int) updateCmd = New SqlCommand (updateSQL, awConnection) updateCmd.Transaction = updateTx updateCmd.Parameters.Add ( "@ OrderQty" , SqlDbType.Int)

updateCmd.Parameters.Add ( "@ ProductID" , SqlDbType.Int) updateCmd.Parameters.Add ( "@ VendorID" , SqlDbType.Int) Usando vendorReader Como SqlDataReader = vendorCmd.ExecuteReader () Mientras vendorReader.Read () Console.WriteLine (vendorReader ( "Nombre" )) VendorID = CInt (vendorReader ( "VendorID" )) prodVendCmd.Parameters ( "@ VendorID" ). Valor = VendorID prodVendReader = prodVendCmd.ExecuteReader () Usando prodVendReader Mientras (prodVendReader.Read) ProductID = CInt (prodVendReader ( "ProductID" )) Si IsDBNull (prodVendReader ( "OnOrderQty" )) Entonces minOrderQty = CInt (prodVendReader ( "MinOrderQty" )) onOrderQty = minOrderQty Otras ventas maxOrderQty = CInt (prodVendReader ( "MaxOrderQty" )) onOrderQty = CInt (maxOrderQty / 2) Fin Si updateCmd.Parameters ( "@ OrderQty" ). Valor = onOrderQty updateCmd.Parameters ( "@ ProductID" ). Valor = productID updateCmd.Parameters ( "@ VendorID" ). Valor = VendorID updateCmd.ExecuteNonQuery recordsUpdated = () totalRecordsUpdated + = recordsUpdated Fin Mientras Fin Usando Fin Mientras Fin Uso Console.WriteLine ( "Total de Registros Actualizado:" & _ CStr (totalRecordsUpdated)) updateTx.Rollback () Console.WriteLine ( "Transaccin deshechas" ) End Uso Console.WriteLine ( "Presione cualquier tecla para continuar" ) Console.ReadLine () End Sub Funcin GetConnectionString () Como Cuerda 'Para evitar guardar la cadena de conexin en el cdigo, "usted puede retrive de un archivo de configuracin. Return "Data Source = (local); Integrated Security = SSPI;" & _ "Initial Catalog = AdventureWorks; MultipleActiveResultSets = True " End Funcin Fin del mdulo

Creacin y uso de tipos definidos por el usuario


. NET Framework 2.0
1 de 2 puntuado este til - Valorar este tema SQL Server 2005 le ofrece la posibilidad de crear objetos de base de datos que se programan en contra de un ensamblado creado en Microsoft. NET Framework Common Language Runtime (CLR). Objetos de base de datos que pueden tomar ventaja del modelo de programacin que proporciona CLR incluyen los factores desencadenantes, procedimientos almacenados, funciones, funciones de agregado y tipos.

Nota La capacidad de ejecutar cdigo CLR est desactivada de forma predeterminada en SQL Server 2005. El CLR puede habilitarse mediante el sp_configure procedimiento almacenado del sistema.
La introduccin de tipos definidos por el usuario (UDT) en Microsoft SQL Server 2005 le permite ampliar el sistema del servidor escalar tipo, permitiendo el almacenamiento de objetos CLR en una base de datos SQL Server. Los UDT pueden contener varios elementos y pueden tener comportamientos, diferencindolos de los datos tradicionales de alias tipos que consisten en un nico Servidor SQL sistema de tipo de datos. Desde UDT son accesibles por el sistema como un todo, su utilizacin para tipos de datos complejos puede influir negativamente en el rendimiento. Los datos complejos es generalmente mejor modelado usando filas tradicionales y tablas. UDT en SQL Server 2005 se adapta bien a lo siguiente: Fecha, hora, moneda y tipos numricos extendidos Aplicaciones geoespaciales Los datos codificados o cifrados El proceso de desarrollar los UDT en SQL Server 2005 consta de los siguientes pasos: 1. Cdigo y generar el ensamblado que define los UDT Los UDT se definen mediante cualquiera de los idiomas soportados por Microsoft. NET Framework Common Language Runtime (CLR) que generen cdigo comprobable. Esto incluye Microsoft Visual C # y Microsoft Visual Basic NET.. Los datos se exponen como campos y propiedades de una clase. NET o estructura, y comportamientos estn definidos por los mtodos de la clase o estructura. 2. Registrar el ensamblado UDT se puede implementar a travs de la interfaz de usuario de Visual Studio en un proyecto de base de datos, o mediante la instruccin Transact-SQL CREATE ASSEMBLY, que copia el ensamblado que contiene la clase o estructura en una base de datos. 3. Cree la UDT en SQL Server Una vez que se carga un ensamblado en una base local, utilice la instruccin Transact-SQL CREATE TYPE para crear un UDT y exponer a los miembros de la clase o estructura como miembros de la UDT. UDT slo existen en el contexto de una nica base de datos y, una vez registrado, no tienen dependencias en los archivos externos de los que fueron creados.

Nota UDT creados a partir de asambleas. NET Framework no son compatibles con versiones anteriores de SQL Server. Sin embargo, SQL Server alias de los tipos de datos son an compatibles con SQL Server 2005 mediante sp_addtype . La sintaxis CREATE TYPE puede utilizarse para crear tanto nativos de SQL Server definido por el usuario y tipos de datos UDT.
4. Crear tablas, variables o parmetros mediante el UDT en SQL Server 2005, un usuario definido por el tipo se puede utilizar como definicin de columna de una tabla, como una variable en un lote de Transact-SQL o

como un argumento de una instruccin de Transact-SQL funcin o procedimiento almacenado. Para obtener informacin adicional, consulte "Tipos CLR definidos por el usuario" y "Trabajar con tipos CLR definidos por el usuario" en SQL Server 2005 Books Online.

Das könnte Ihnen auch gefallen