Red de conocimiento informático - Computadora portátil - hoja de ruta técnica de ado.net

hoja de ruta técnica de ado.net

En el pasado, la forma en que operamos en la base de datos era conectarnos primero a la base de datos y luego realizar varias operaciones con los datos mientras manteníamos la conexión, como agregar, eliminar, cambiar y verificar. Esta situación tendrá dos desventajas: en primer lugar, mantener siempre una conexión provocará un desperdicio de recursos. En segundo lugar, varios factores inestables en la red provocarán la pérdida de la conexión y también se perderán los datos operados.

En vista de las dos o más razones mencionadas anteriormente, Microsoft ha propuesto otro modo de funcionamiento, es decir, la operación de datos en modo no conectado. Por supuesto, no ha abandonado las operaciones de datos ADO típicas anteriores en modo de conexión. Dio origen a ado.net y sus dos modos típicos de operación de datos, a saber, el modo de conexión y el modo sin conexión.

Por supuesto, Microsoft no abandonó las operaciones de datos típicas en modo de conexión en ADO, por lo que nacieron ado.net y sus dos modos de operación de datos típicos, a saber, el modo de conexión y el modo sin conexión.

Por supuesto, no importa qué modo se utilice para operar los datos, el primer paso es obtener una conexión de datos y luego operar en la fuente de datos o en la copia de la fuente de datos. Entonces la conexión es el primer paso que se debe completar. El método de conexión no es muy diferente de la era ADO, pero es diferente de crear primero el objeto de conexión (o crear una instancia del objeto de conexión. Para completar la conexión, debe conocer la dirección de origen de datos de la conexión, y en algunos casos). En estos casos, también es necesario saber quién proporcionó la fuente de datos.

La siguiente es una columna típica:

string connString = "Data Source=localhost; Integrated Security=SSPI; Initial Catalog=Northwind;"

string connstring = "Provider=SQLOLEDB; Data Source=localhost;Initial Catalog=Northwind;"ConnectionString=connstring;

A continuación, puede abrir la conexión utilizando el método open() de la conexión

myconn.open()< / p>

¡Conexión completada! A continuación, ingrese a la etapa de operación de datos más importante (los estudiantes que necesiten saber más sobre el método para establecer objetos de conexión pueden verificar más información por sí mismos)

Modo de conexión

En conexión. mode El objeto principal responsable del modo de conexión es DataReader (sin embargo, cuando hablamos de DataReader, debemos mencionar el método ExcuteReader(), porque DataReader es una clase sin constructor, y DataReader solo se puede crear una instancia a través del método excutereader() de la clase de comando. ), Datareader tiene las siguientes características:

1. Creación de instancias de método,

Por ejemplo: sqlcommand sqlcm=new sqlcommand(); );

2. La conexión de la base de datos debe permanecer abierta cuando usa la base de datos (las operaciones relacionadas con la conexión no se pueden realizar en este estado y estas operaciones no se pueden realizar en este estado)

3. Solo puede reenviar desde Después de recorrer la información sin detenerse para modificar los datos a mitad de camino

4. No puede realizar ninguna operación en la base de datos

5. en la base de datos

6. No puede realizar ninguna operación en la base de datos

7. No puede realizar ninguna operación en la base de datos. Según lo que dije antes, mantener la conexión abierta. desperdiciar recursos, más el segundo punto anterior, debemos cerrar la conexión inmediatamente después de usarla, por ejemplo:

dr.close() O, si nos preocupa olvidarnos de cerrar la conexión, podemos darle un parámetro al crear una instancia de Commanderreader(), por ejemplo:

dr.close() o

dr.close(). Por ejemplo:

dr.close();

5. Asigne un parámetro commandbehavior.closeconnection al crear una instancia

sqldatarader dr = cmd.executereader(commandbehavior. closeconnection). );

DataReader es más flexible de usar y generalmente se implementa mediante juicio condicional, por ejemplo:

while(dr.reader())

{

............

}

También hay algunas personas que utilizan DataReader para leer datos con ciertos fines operativos. sáquelo y luego guárdelo en un nuevo DataTable vacío, de modo que DataReader se convierta en un DataTable. Si este enfoque es aconsejable o no es una cuestión de opinión.

Las responsabilidades de estos dos objetos son DataAdapter y DataSet respectivamente.

En modo no conectado, DataAdapter desempeña el papel de puente. Algunas personas pueden pensar en adaptadores de red o adaptadores de corriente al ver esto. Sí, sus funciones. Todos son iguales, integrando varios tipos de fuentes de alimentación de red en un tipo unificado, que puede cumplir con los requisitos. El DataAdapter aquí es este tipo de adaptador de red o adaptador de corriente. El DataAdapter aquí es el adaptador de datos, que puede adaptar varios tipos de fuentes de datos en datos de conjuntos de datos llenos de datos.

El uso de objetos DataAdatper generalmente tiene dos funciones. Una es ejecutar declaraciones SQL a través de objetos de comando (como sqlcommand), detectar datos de la fuente de datos y completar los resultados de la recuperación en el DataSet; actualizar usuarios Cambios en la fuente de datos en el objeto DataSet.

Algunas personas no pueden evitar preguntar: ¿por qué no es necesario realizar este paso en modo no conectado?

De hecho, el modo de conexión actualiza directamente todas las operaciones de un solo paso en el objeto de datos a la base de datos a través del objeto de comando, lo que se denomina operación única.

En el modo de conexión, dado que el conjunto de datos está desconectado del servidor de datos, la operación única no tiene la oportunidad de actualizar la base de datos en ningún momento. Esto también requiere que dicho objeto realice operaciones de datos (como. como agregar, eliminar, modificar, etc.) se actualizan en la base de datos utilizando varios comandos SQL correspondientes, y este objeto es DataAdapterle. Se puede decir que DataAdapterle usa su conjunto de comandos SQL incorporado para realizar operaciones SQL por lotes.

Primero veamos la creación de instancias de adaptadores de datos y comandos. Generalmente, podemos crear instancias de esta manera:

OleDbcommand olecmd=new OleDbcommand(sqlString, connObj);

p>

OleDataAdapter oledpt=new OleDataAdapter(sqlString, connObj);

Ambos reciben una cadena SQL y un objeto de conexión, entonces, ¿cuál es la diferencia entre adaptadores de comando y de datos?

Cuando se trata de declaraciones SQL, sus diferencias son:

El comando se utiliza principalmente para ejecutar comandos SQL puros e implementar directamente la operación de declaraciones SQL.

DataAdapter incorpora un conjunto de comandos SQL (es decir, sus cuatro atributos), como seleccionar, eliminar, insertar, actualizar, etc. Cuando es necesario ejecutar uno de los comandos, el objeto Comando aún necesita estar involucrado, es decir Crear una instancia del objeto de comando incrustado Si lo llama sin crear una instancia, a menudo se informará un error y no se podrá compilar (muchas personas cometen errores al usar el método de actualización de dataadpter), por lo que a menudo lo usamos así. :

oledpt .selectcomand=new olecommand ();

Para obtener datos

comando en combinación con excutereader() usando Datareader

DataAdapter se puede implementar usando Fill (), pero no debería ser necesario que uses fill.

Aquí queremos hablar sobre el método Fill() Después de abrir DataAdapter. Encontrará que el método Fill () proviene de la implementación de la clase principal, donde Fill El método llama al método FillFromCommand o FillFromReader. Estos dos métodos también llaman al objeto de comando excutereader respectivamente. Entonces, lo siguiente no es difícil de entender. Los amigos interesados ​​pueden verificar la implementación del método de llenado por sí mismos.

El objeto DataAdapter oculta los detalles de la comunicación con los objetos Conexión y Comando. El objeto DataAdapter crea e inicializa una DataTable, que se puede usar con un objeto DataSet para almacenar una copia de la tabla de datos en la memoria, lo que permite operaciones de bases de datos sin conexión. El objeto DataAdapter le permite guardar datos en un objeto DataSet en una fuente de datos, leer datos de una fuente de datos y realizar adición, eliminación, actualización y otras operaciones de datos en el protector de datos subyacente.

El objeto DataAdapter contiene cuatro comandos de operación diferentes, que son:

(1), SelectCommand: utilizado para o para ir a registros en la fuente de datos;

(2), InsertCommand: se utiliza para insertar un nuevo registro en la fuente de datos;

(3), UpdateCommand: se utiliza para actualizar los datos en la fuente de datos;

(4) , DeleteCommand: se utiliza para eliminar registros en la fuente de datos.

Vale la pena mencionar que después de crear una instancia del objeto DataAdapter, DataAdapter sigue siendo un DataAdapter sin ningún efecto real, porque sus operaciones en la base de datos y los conjuntos de datos se realizan en realidad a través de sus cuatro objetos de comando (SelectCommand, InsertCommand UpdateCommand). , Eliminar comando).

DeleteCommand = new SqlCommand();

Estas cuatro referencias de SqlCommand en realidad apuntan a instancias del objeto SqlCommand. Además, se pueden crear instancias automáticas de tres comandos (Insertcommand, DeleteCommand, Updatecommand), pero por favor. Nota Para generar automáticamente estos tres comandos, debe usar el SelectCommand instanciado para recuperar los elementos requeridos. En este momento, debe prestar atención al método de creación de instancias de DataAdapter. debe configurar el atributo SelectCommand por separado. Puede utilizar el generador de comandos, etc.:

Adaptador SqlDataAdapter = new SqlDataAdapter();

adapter.SelectCommand = new SqlCommand(queryString, conexión);

SqlCommandBuilder builder = new SqlCommandBuilder (adapter);

En el caso de la creación de instancias parametrizada, no es necesario declarar específicamente el atributo selectCommand, porque dichos DataAdapters de creación de instancias parametrizadas han completado automáticamente el atributo selectcommand cuando se crea una instancia, como

Adaptador SqlDataAdapter = new SqlDataAdapter("Select * from table", sqlconn);

Constructor SqlCommandBuilder = new SqlCommandBuilder(adapter);

Por lo tanto, en general, use vacío El parámetro dataadapter instanciado establece el atributo selectcommand. La creación de instancias de Dataadapter con parámetros se puede realizar directamente utilizando CommandBuilder.

El modo de desconexión de DataSet es relativo a la desconexión del servidor de datos. No es necesario conectarse al servidor de datos cada vez, y los datos del DataSet realmente existen en la caché del servicio (algunas personas lo consideran erróneamente). Es un gran error pensar que existe en el lado del cliente. Si lo piensa detenidamente, sabrá que los datos definitivamente no son seguros), lo que significa que si la cantidad de datos es grande, esto también es una deficiencia del no. -modo de conexión Comparado con DataReader El método de leer una línea y guardar una línea ahorra mucha memoria.

3. Revisa la relación entre los dos modelos

Estos dos modelos parecen seguir dos rutas, pero en realidad tienen muchos puntos similares, el más destacado son dos aspectos. :

1. El formulario inicial es el mismo. Todos deben conectarse a los datos que comienzan a conectarse en el mismo formulario. La conexión se completa estableciendo un objeto de conexión. p> 2. La forma final es la misma: todos deben cooperar para implementar la operación de declaraciones SQL en el objeto sqlcommand y, finalmente, cooperar para implementar las operaciones de agregar, eliminar, modificar y verificar datos en el objeto sqlcommand.

Operaciones SQL como modo de conexión:

sqlcommand sqlcm=new sqlcommand(); // Obviamente se usa el objeto de instancia de sqlcommand

sqldatarader dr =sqlcm .excutereader (); si (dr.HasRow) {

mientras(dr.read())

{

dr[""]... .....//obtener el valor del campo

}

}

Operaciones SQL en modo no conectado:

sqlDataAdapter slqad=new sqlDataAdapter();

sqlad.selectcommand=new sqlcommand (sqlstring, conn); //obviamente, sqlcommand también se usa aquí