Ejemplos de consultas SQL a la base de datos MySQL. Conceptos básicos de T-SQL. Consulta DML Sql para insertar registros desde un archivo

La instrucción INSERT inserta nuevos registros en una tabla. En este caso, los valores de las columnas pueden ser constantes literales o ser el resultado de ejecutar una subconsulta. En el primer caso, se utiliza una instrucción INSERT separada para insertar cada fila; en el segundo caso, se insertarán tantas filas como devuelva la subconsulta.

La sintaxis del operador es la siguiente:

    INSERTAR EN [ (,...) ]

    (VALORES(,…))

  1. | (VALOR POR DEFECTO)

Como puede ver en la sintaxis presentada, la lista de columnas es opcional (los corchetes en la descripción de la sintaxis lo indican). Si falta, la lista de valores insertados debe estar completa, es decir, proporcionar valores para todas las columnas de la tabla. En este caso, el orden de los valores debe corresponder al orden especificado por la instrucción CREATE TABLE para la tabla en la que se insertan las filas. Además, estos valores deben ser del mismo tipo de datos que las columnas en las que se ingresan. Como ejemplo, considere insertar una fila en la tabla Producto creada por la siguiente instrucción CREATE TABLE:

    CREAR TABLA producto

    fabricante de caracteres (1) NO NULO,

    modelo varchar(4) NO NULO,

    escriba varchar(7) NO NULO

Supongamos que desea agregar la PC modelo 1157 del fabricante B a esta tabla. Esto se puede hacer con la siguiente declaración:

    INSERTAR EN EL PRODUCTO

    VALORES ("B", 1157, "PC");

Si especifica una lista de columnas, puede cambiar su orden "natural":

    INSERTAR EN Producto (tipo, modelo, fabricante)

    VALORES ("PC", 1157, "B");

Parecería que esta es una característica completamente innecesaria, lo que sólo hace que el diseño sea más engorroso. Sin embargo, gana si las columnas tienen valores predeterminados. Considere la siguiente estructura de tabla:

    CREAR TABLA producto_D

    fabricante char (1) NULL,

    modelo varchar(4) NULO,

    escriba varchar (7) NO NULO POR DEFECTO "PC"

Tenga en cuenta que aquí los valores de todas las columnas tienen valores predeterminados (las dos primeras son NULL y la última columna es de tipo PC). Ahora podríamos escribir:

    INSERTAR EN Product_D (modelo, fabricante)

    VALORES(1157, "B");

En este caso, el valor que falta al insertar una fila será reemplazado por el valor predeterminado: PC. Tenga en cuenta que si a una columna no se le asigna un valor predeterminado en una instrucción CREATE TABLE y se especifica una restricción NOT NULL para prohibir el uso de NULL en esa columna de la tabla, entonces se asume el valor predeterminado de NULL.

Surge la pregunta: ¿es posible no especificar una lista de columnas y, sin embargo, utilizar los valores predeterminados? La respuesta es sí. Para hacer esto, en lugar de especificar explícitamente el valor, use la palabra reservada DEFAULT:

    INSERTAR EN Producto_D

    VALORES ("B", 1158, PREDETERMINADO);

Dado que todas las columnas tienen valores predeterminados, para insertar una fila con valores predeterminados podrías escribir:

    INSERTAR EN Producto_D

    VALORES (POR DEFECTO, POR DEFECTO, POR DEFECTO);

Sin embargo, para este caso existe una construcción especial VALORES POR DEFECTO (ver sintaxis del operador), con la que el operador anterior se puede reescribir en el formulario

    INSERTAR EN Product_D VALORES POR DEFECTO;

Tenga en cuenta que al insertar una fila en una tabla, se verifican todas las restricciones impuestas a esta tabla. Estas podrían ser restricciones de clave primaria o de índice único, restricciones CHECK o restricciones de integridad referencial. Si se viola alguna restricción, se rechazará la inserción de la fila. Consideremos ahora el caso del uso de una subconsulta. Supongamos que necesitamos insertar en la tabla Producto_D todas las filas de la tabla Producto relacionadas con los modelos de computadoras personales (tipo = 'PC'). Dado que los valores que necesitamos ya están en alguna tabla, generar manualmente filas insertadas es, en primer lugar, ineficaz y, en segundo lugar, puede permitir errores de entrada. El uso de una subconsulta resuelve estos problemas:

El uso del símbolo “*” en la subconsulta está justificado en este caso, ya que el orden de las columnas es el mismo para ambas tablas. Si este no fuera el caso, se tendría que aplicar una lista de columnas en la instrucción INSERT, en la subconsulta o en ambas, que coincidiría con el orden de las columnas:

Aquí, como antes, no puede especificar todas las columnas si desea utilizar los valores predeterminados existentes, por ejemplo:

En este caso, la columna de tipo de la tabla Product_D se sustituirá por el valor predeterminado PC para todas las filas insertadas.

Tenga en cuenta que cuando se utiliza una subconsulta que contiene un predicado, solo se insertarán aquellas filas cuyo valor del predicado sea VERDADERO (¡no DESCONOCIDO!). En otras palabras, si la columna de tipo en la tabla Producto fuera NULLable y ese valor estuviera presente en varias filas, esas filas no se insertarían en la tabla Producto_D.

La técnica artificial de utilizar una subconsulta que forma una fila con la cláusula UNION ALL le permite superar la limitación de insertar una fila en la instrucción INSERT cuando se utiliza el constructor de filas en la cláusula VALUES. Entonces, si necesitamos insertar varias filas usando una instrucción INSERT, podemos escribir:

    INSERTAR EN Producto_D

    SELECCIONE el fabricante "B" AS, modelo 1158 AS, tipo "PC" AS

    UNIÓN TODOS

    SELECCIONE "C", 2190, "Portátil"

    UNIÓN TODOS

    SELECCIONE "D", 3219, "Impresora";

Es preferible utilizar UNION ALL que UNION incluso si se garantiza la ausencia de filas duplicadas, ya que en este caso no se realizará ninguna comprobación para eliminar duplicados.

Cabe señalar que la inserción de múltiples tuplas utilizando el constructor de filas ya está implementada en Sistema de gestión de bases de datos relacionales (DBMS), desarrollado por Microsoft Corporation.Lenguaje de consulta estructurado) es un lenguaje informático universal utilizado para crear, modificar y manipular datos en bases de datos relacionales. Servidor SQL 2008. Dada esta posibilidad, la última consulta se puede reescribir como:

    INSERTAR EN VALORES Product_D

    ("B", 1158, "PC"),

    ("C", 2190, "Computadora portátil"),

Eliminar entradas

Para eliminar registros de una tabla, utilice el operador DELETE:

ELIMINAR DE Nombre de tabla DONDE condición;

Este operador elimina registros (no valores de columnas individuales) de la tabla especificada que satisfacen la condición especificada. Una condición es una expresión lógica, cuyas diversas construcciones se han analizado en prácticas de laboratorio anteriores.

La siguiente consulta elimina registros de la tabla Cliente donde el valor de la columna LName es "Ivanov":

ELIMINAR DEL Cliente

DONDE LNombre = "Ivanov"

Si la tabla contiene información sobre varios clientes con el apellido Ivanov, se eliminarán todos.

La declaración WHERE puede contener una subconsulta para seleccionar datos (declaración SELECT). Las subconsultas en una declaración DELETE funcionan exactamente igual que en una declaración SELECT. La siguiente consulta elimina todos los clientes de la ciudad de Moscú, mientras que el identificador único de la ciudad se devuelve mediante una subconsulta.

ELIMINAR DEL Cliente

DONDE IdCity EN (SELECCIONE IdCity DESDE Ciudad DONDE CityName = "Moscú")

Transact-SQL extiende SQL estándar al permitirle usar una cláusula FROM adicional en una declaración DELETE. Esta extensión, que especifica una combinación, se puede utilizar en lugar de una subconsulta en la cláusula WHERE para especificar las filas que se eliminarán. Le permite especificar datos del segundo FROM y eliminar las filas correspondientes de la tabla en la primera cláusula FROM. En particular, la consulta anterior se puede reescribir de la siguiente manera

ELIMINAR DEL Cliente

DEL Cliente k UNIÓN INTERNA

La operación de eliminar registros de una tabla es peligrosa en el sentido de que está asociada al riesgo de pérdida irreversible de datos en caso de errores semánticos (pero no sintácticos) en la formulación de la expresión SQL. Para evitar problemas, antes de eliminar registros, se recomienda que primero ejecute la consulta de selección adecuada para ver qué registros se eliminarán. Entonces, por ejemplo, antes de ejecutar la consulta de eliminación discutida anteriormente, no estaría de más ejecutar la consulta de selección correspondiente.

SELECCIONAR *

DEL Cliente k UNIÓN INTERNA

Ciudad c ON k.IdCity = c.IdCity AND c.CityName = "Moscú"

Para eliminar todos los registros de una tabla, simplemente use la declaración DELETE sin la palabra clave WHERE. En este caso, la tabla con todas las columnas definidas en ella se guarda y está lista para insertar nuevos registros. Por ejemplo, la siguiente consulta elimina registros de todos los productos.

ELIMINAR DEL Producto

Asignación para trabajo independiente: Formule una consulta en SQL para eliminar todos los pedidos que no contengan un solo producto (es decir, todos los pedidos vacíos).

Además de la declaración SELECT analizada anteriormente, el lenguaje de manipulación de datos (DML) contiene otras tres declaraciones: INSERT, UPDATE y DELETE. Al igual que la declaración SELECT, estas tres declaraciones operan en tablas o vistas. Este artículo cubre la declaración INSERT y las otras dos declaraciones se tratan en el siguiente artículo.

INSERTAR declaración inserta filas (o partes de filas) en una tabla. Hay dos formas diferentes de esta instrucción:

INSERTAR tab_name [(col_list)] VALORES PREDETERMINADOS | VALORES (( DEFAULT | NULL | expresión ) [ ,...n]) INSERTAR EN nombre_pestaña | view_name [(col_list)] (select_statement | ejecutar_statement) Convenciones de sintaxis

La primera forma de instrucción le permite insertar una fila (o parte de ella) en la tabla. Y la segunda forma de la instrucción INSERT le permite insertar en una tabla el conjunto de resultados de una instrucción SELECT o un procedimiento almacenado ejecutado por una instrucción EXECUTE. El procedimiento almacenado debe devolver datos para insertarlos en la tabla. Cuando se usa con una instrucción INSERT, una instrucción SELECT puede seleccionar valores de una tabla diferente o la misma en la que se insertan los datos, siempre que los tipos de datos de las columnas correspondientes sean compatibles.

Para ambos formularios, el tipo de datos de cada valor insertado debe ser compatible con el tipo de datos de la columna de la tabla correspondiente. Todas las cadenas y datos temporales deben estar entre comillas; No es necesario encerrar los valores numéricos entre comillas.

Insertar una sola fila

Para ambas formas de la instrucción INSERT, especificar explícitamente la lista de columnas es opcional. No enumerar columnas es lo mismo que especificar todas las columnas de la tabla.

Parámetro VALORES POR DEFECTO inserta valores predeterminados para todas las columnas. Las columnas con el tipo de datos TIMESTAMP o propiedad IDENTITY se insertan de forma predeterminada con valores que genera automáticamente el sistema. Para columnas de otros tipos de datos, se inserta el valor predeterminado no nulo correspondiente si está disponible, o NULL en caso contrario. Si una columna no permite valores nulos y no tiene definido un valor predeterminado, la instrucción INSERT falla y se muestra un mensaje.

El siguiente ejemplo inserta filas en la tabla Empleado en la base de datos SampleDb, lo que demuestra el uso de una instrucción INSERT para insertar una pequeña cantidad de datos en la base de datos:

UTILICE SampleDb; INSERTAR EN VALORES del empleado (34990, "Andrey", "Batonov", "d1"); INSERTAR EN VALORES del empleado (38640, "Alexey", "Vasin", "d3");

Hay dos formas diferentes de insertar valores en una nueva fila. La declaración INSERT en el siguiente ejemplo usa explícitamente la palabra clave NULL e inserta un valor NULL en la columna correspondiente:

UTILICE SampleDb; INSERT INTO Employee VALUES (34991, "Andrey", "Batonov", NULL);

Para insertar valores en algunas (pero no en todas) las columnas de una tabla, normalmente es necesario especificar explícitamente esas columnas. Las columnas no especificadas deben permitir valores nulos o tener definido un valor predeterminado.

UTILICE SampleDb; INSERT INTO Empleado(Id, Nombre, Apellido) VALORES (34992, "Andrey", "Batonov");

Los dos ejemplos anteriores son equivalentes. En la tabla Empleado, la única columna que permite valores NULL es la columna DepartmentNumber, y todas las demás columnas fueron deshabilitadas por la cláusula NOT NULL en la declaración CREATE TABLE.

Orden de valores en Oferta de VALORES Las declaraciones INSERT pueden diferir del orden especificado en la declaración CREATE TABLE. En este caso, su orden debe coincidir con el orden en que aparecen las columnas correspondientes en la lista de columnas. A continuación se muestra un ejemplo de cómo insertar datos en un orden diferente al original:

UTILICE SampleDb; INSERT INTO Empleado(Número de departamento, Apellido, Id, Nombre) VALORES ("d1", "Batonov", 34993, "Andrey");

Insertar varias filas

La segunda forma de la instrucción INSERT inserta una o más filas seleccionadas por una subconsulta en la tabla. El siguiente ejemplo muestra cómo insertar filas en una tabla usando la segunda forma de la instrucción INSERT. En este caso, se ejecuta una consulta para seleccionar los números y nombres de los departamentos ubicados en Moscú, y el conjunto de resultados resultante se carga en una nueva tabla creada anteriormente.

La nueva tabla Departamento de Moscú creada en el ejemplo anterior tiene las mismas columnas que la tabla Departamento existente, excepto por la columna Ubicación que falta. La subconsulta en la instrucción INSERT selecciona todas las filas de la tabla Departamento para las cuales el valor de la columna Ubicación es "Moscú", que luego se insertan en la nueva tabla creada al comienzo de la consulta.

El siguiente ejemplo muestra otra forma de insertar filas en una tabla usando la segunda forma de la instrucción INSERT. En este caso, se ejecuta una consulta para seleccionar números de personal, números de proyecto y fechas de inicio del proyecto para todos los empleados con el puesto "Gerente" que trabajan en el proyecto p2 y luego cargan el conjunto de resultados resultante en una nueva tabla creada al comienzo de la consulta:

UTILICE SampleDb; CREAR TABLA ManagerTeam(EmpId INT NOT NULL, ProjectNumber CHAR (4) NOT NULL, EnterDate DATE); INSERTAR EN ManagerTeam (EmpId, ProjectNumber, EnterDate) SELECCIONE EmpId, ProjectNumber, EnterDate DESDE Works_on DONDE Job = "Manager";

Antes de insertar filas usando la instrucción INSERT, las tablas MoscowDepartment y ManagerTeam (en los ejemplos anteriores) estaban vacías. Si la tabla ya existía y contenía filas con datos, se le agregarían nuevas filas.

Las consultas de cambio se utilizan para agregar (INSERT INTO), eliminar (DELETE) y actualizar (UPDATE) registros en tablas.

comando INSERTAR EN

El comando INSERT INTO se puede utilizar para agregar uno o más registros al final de una tabla.

La sintaxis del comando INSERT INTO es la siguiente:
INSERTAR EN Nombre_tabla [(Nombre_campo)] VALORES (Valores_datos);

Por ejemplo, coloquemos en la tabla "Grupos" un registro que contenga datos (1, BF-16a, 1, 1) en las columnas correspondientes (Código de grupo, Nombre, Curso, Semestre).

Para ello solicite en el formato:
INSERTAR EN Grupos (Código de grupo, Título, Curso, Semestre) VALORES (1, BF-16a, 1, 1);
ingrese la consulta en el formulario ejecutando el comando "Creador de consultas" en la pestaña "Creación", en el modo "Modo SQL" del menú Ver.

Guarde la solicitud con el nombre "Add_1_records". Como resultado, aparecerá un objeto no relacionado en el "Área de navegación" - "Add_1_records" (Fig. 1).


Arroz. 1.

Después de guardar la solicitud, debe ejecutar esta solicitud haciendo clic en el icono “Ejecutar”. Como resultado de ejecutar el comando "Add_1_records", el primer registro aparecerá en la tabla vacía (Fig. 2).



Arroz. 2.

Comando ACTUALIZAR

El comando ACTUALIZAR está diseñado para cambiar los registros existentes en las columnas de la tabla, lo que le permite actualizar los valores en columnas de la tabla especificadas.

La sintaxis del comando ACTUALIZAR es la siguiente:
ACTUALIZAR Nombre_tabla SET Nombre_columna = Nuevo_valor DONDE Condición_selección;

La cláusula SET especifica los nombres de las columnas cuyos datos deben cambiarse. La cláusula WHERE es opcional, pero se puede utilizar para especificar sólo aquellas filas de las columnas (tablas) que deben actualizarse.

Creemos una solicitud para cambiar un registro en la tabla "Grupos" de la base de datos sql_training_st.mdb.

Por ejemplo, cambiemos una entrada existente para la identificación del primer campo clave en la columna "Nombre" de la tabla "Grupos".

Solicite en el formato:
ACTUALIZAR Grupos SET Nombre ="BF-16b" WHERE ID=1;

Guarde la solicitud con el nombre "Change_record_1". Como resultado, el objeto "Change_record_1" aparecerá en el "Área de transición" (Fig. 3).



Arroz. 3.

Después de guardar la solicitud, debe ejecutar esta solicitud haciendo clic en el icono “Ejecutar”. Como resultado de ejecutar el comando “Change_record_1”, aparecerá un cuadro de diálogo en el que deberá ingresar el valor del parámetro ID=1 y hacer clic en Aceptar. Después de estos pasos, en la tabla "Grupos", la entrada en el campo "Nombre" cambiará de BF-16a a BF-16b (Fig. 4).



Arroz. 4.

comando BORRAR

El comando DELETE está diseñado para eliminar registros de una tabla.

Formato de una solicitud para eliminar registros:
ELIMINAR DE Nombre_tabla DONDE Condición_selección;

Creemos una solicitud para cambiar un registro en la tabla "Grupos" de la base de datos sql_training_st.mdb.

Por ejemplo, eliminemos el registro existente para el primer ID de campo clave en todas las columnas (campos) de la tabla "Grupos".

Para ello solicite en el formato:
ELIMINAR DE Grupos DONDE ID=1;
cree una consulta en el formulario ejecutando el comando "Creador de consultas" en la pestaña "Creación", en el modo "Modo SQL" del menú Ver.

Guardamos la solicitud con el nombre “Delete_record_1”. Como resultado, el objeto "Delete_record_1" aparecerá en el "Área de transición" (Fig. 5).



Arroz. 5.

Después de guardar la solicitud, debe ejecutar esta solicitud haciendo clic en el icono “Ejecutar”. Como resultado de ejecutar el comando “Delete_record_1”, aparecerá un cuadro de diálogo en el que deberá ingresar el valor del parámetro ID=1 y hacer clic en Aceptar. Después de estos pasos, se abrirá el cuadro de diálogo "Confirmar eliminación de registros". Después de la confirmación, los datos de todos los campos se eliminarán en la tabla "Grupos", es decir. la entrada fue eliminada (Fig. 6.).



Arroz. 6.

Cabe señalar que para eliminar datos en campos específicos de una tabla, es recomendable utilizar el comando ACTUALIZAR y reemplazar los valores en los campos requeridos por Null. Si necesita eliminar una tabla en su totalidad, debe utilizar el operador DROP TABLE (sintaxis del operador: DROP TABLE Table_Name;).

Restauraremos el primer registro en la tabla "Grupos" ejecutando el comando "Add_1_records", como resultado restauraremos el primer registro (Fig. 7).



Arroz. 7.

A veces, los programadores tienen un deseo ardiente de leer algo de la base de datos. Los programadores se ponen nerviosos e irritables, pierden el sueño y señalan frenéticamente el teclado con el dedo. Por el bien de todos y la paz mundial, veamos algo de administración de bases de datos simple desde C# usando ADO.NET y OLE DB. Aunque este mecanismo admite varias bases de datos como Oracle, aquí y ahora usaremos MS SQL Server.

Dos tareas principales al trabajar con una base de datos

2. Ejecutar un comando SQL que hace algo en el servidor (insertar, actualizar, eliminar, llamar a una función o procedimiento almacenado

3. Lectura secuencial de la selección seleccionada línea por línea. Se utiliza principalmente en aplicaciones web; en aplicaciones de escritorio es más fácil descargar toda la selección en la RAM de una vez; los ahorros al leer solo las líneas necesarias son insignificantes.

4. Caso raro. Actualización automática de una tabla en la base de datos en función de los cambios en el DataTable (generalmente editado a través de una interfaz visual). En la vida real, los datos generalmente se leen a través de una consulta o vista compleja de unión al montón, por lo que la sincronización automática no es adecuada.

Las clases principales utilizadas para estos fines: OleDbConnection: una conexión a la base de datos, creada con una cadena que contiene los parámetros de conexión, abrir, cerrar, OleDbCommand: creada con una instancia de conexión y un comando SQL, si solo necesita realizar una actualización u obtener un solo valor, entonces esta es suficiente clase, OleDbDataAdapter: creado con OleDbCommand, se especializa en la lectura única de conjuntos de filas en un DataTable, puede crear automáticamente columnas de DataTable basadas en una selección, transferir cambios del DataTable a una tabla en el base de datos, OleDbDataReader: lectura secuencial de filas en DataTable una por una (funciona internamente OleDbDataAdapter), DataTable / DataSet: el contenedor principal de datos. La enumeración OleDbType almacena los tipos de datos de la base de datos.

Usando System.Data; usando System.Data.OleDb;

// cadena de conexión, se utiliza el sistema de usuario de Windows (Integrated Security=SSPI;) string connString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=databaseName;Data Source=serverName"; // cadena de conexión alternativa usando autenticación de MS SQL Server // connString = "Provider=SQLOLEDB.1;Persist Security Info=False;Initial Catalog=databaseName;Connect Timeout=20;Data Source=serverName;Uid=userName;Pwd=userPassword; " OleDbConnection dbConn = nueva OleDbConnection(connString); dbConn.Open(); algunaTablaDeDatos = nuevaTablaDeDatos(); OleDbDataAdapter dbAdapter = new OleDbDataAdapter("seleccione COLUMNA1, COLUMNA2 de TEST_TABLE ORDER BY COLUMN2", dbConn); // la estructura interna de una tabla vacía se creará automáticamente en función de los datos leídos si la estructura de la tabla ya se ha especificado (por ejemplo, a través de un DataSet escrito), entonces los datos se escribirán en columnas con nombres coincidentes o nuevos; se agregarán columnas dbAdapter.Fill(someDataTable); // una opción alternativa para completar una tabla en un DataSet // dbAdapter.Fill(someDataSet, "someDataTable"); dbConn.Close();.

Particularmente dignos de mención son los problemas con las fechas. La implementación de fechas en .Net es extremadamente torcida: inicialmente las fechas no pueden estar vacías, pero en la vida real lo están todo el tiempo. La solución más correcta es utilizar una clase de fecha especial que corrija los errores de los programadores de Microsoft. Los desarrolladores más perezosos mantienen todas las fechas en el código como cadenas y las convierten a DateTime solo cuando es necesario, por ejemplo, al escribir en una base de datos o DataTable. Nullable DateTime no ayuda, ya que una fecha vacía en la interfaz debería verse como una cadena vacía, y cuando se escribe en la base de datos como DBNull.Value, incluso un nulo banal en el código no se convierte a estos valores sin bailes adicionales. una pandereta.

La primera opción implica simplemente fusionar una cadena de consulta. Se considera una mala práctica y especialmente peligrosa en aplicaciones web ya que es vulnerable a ataques de piratas informáticos. El problema de las fechas vacías no se soluciona tan fácilmente. Además, cuando se trabaja con fechas, aparece un problema adicional: diferentes formatos de cadenas de fecha según la configuración regional de .Net Framework, el entorno de desarrollo y el servidor SQL. Puede parecer surrealista: la misma consulta funciona en SQL Managment Studio, pero falla cuando se ejecuta desde el código. Parcialmente guardado por el formato especial de la cadena de fecha. Sin embargo, esto se hace a menudo en pequeños programas para uso interno, cuya existencia el mundo exterior nunca sabrá.

OleDbCommand dbCommand = dbConn.CreateCommand(); dbCommand.CommandText = "INSERTAR EN TEST_TABLE (INT_COLUMN, VARCHAR_COLUMN, DATETIME_COLUMN) VALORES (" + intVariable", " + stringVariable", " + dateTimeVariable.ToString("yyyyMMdd") +"); dbCommand.ExecuteNonQuery();

La opción correcta implica crear un comando con un conjunto de parámetros fuertemente tipados. Consideremos que el párrafo anterior no existía.

OleDbCommand dbCommand = dbConn.CreateCommand(); dbCommand.CommandText = "INSERTAR EN TEST_TABLE (INT_COLUMN, VARCHAR_COLUMN, DATETIME_COLUMN) VALORES (?, ?, ?)"; dbCommand.Parameters.Add("INT_COLUMN", OleDbType.Integer).Value = intVariable; dbCommand.Parameters.Add("VARCHAR_COLUMN", OleDbType.VarChar).Value = stringVariable; if (stringDate == "") ( dbCommand.Parameters.Add("DATETIME_COLUMN", OleDbType.DateTime).Value = DBNull.Value; ) else ( dbCommand.Parameters.Add("DATETIME_COLUMN", OleDbType.DateTime).Value = Convert.ToDateTime(stringDate); dbCommand.ExecuteNonQuery();

El procedimiento almacenado se llama exactamente de la misma manera, en aras de la diversidad, existe otra opción para escribir valores en los parámetros (no está relacionada específicamente con el procedimiento almacenado):

OleDbCommand someDbComm = new OleDbCommand("someStoredProcedure", this.dbConn); someDbComm.CommandType = CommandType.StoredProcedure; someDbComm.Parameters.Add("@parameter1", OleDbType.VarChar); someDbComm.Parameters.Add("@parameter2", OleDbType.VarChar); someDbComm.Parameters.Value = "Cada problema siempre tiene una solución: simple, conveniente y, por supuesto, incorrecta"; someDbComm.Parameters.Value = "Henry Luis Mencken"; someDbComm.ExecuteNonQuery(); !}

Una versión extendida de la descripción del parámetro que indica el tamaño del campo y el enlace a una columna de tabla específica.

DbCommand.Parameters.Add("VARCHAR_COLUMN", OleDbType.VarChar, 100, "VARCHAR_COLUMN").Value = stringVariable;

Si no necesitamos vincular un parámetro de comando a un campo DataTable específico, entonces es mejor no especificar el tamaño en absoluto; por ejemplo, si la cadena es menor que la longitud de Varchar especificada, entonces el buen marco .Net agregará espacios en la cadena hasta la longitud especificada, corrompiendo los datos transmitidos al servidor.

El valor de un solo campo se lee mediante el método ExecuteScalar()

OleDbCommand dbCommand = dbConn.CreateCommand(); dbCommand.CommandText = "SELECCIONE TEST_COLUMN DE TEST_TABLE DONDE ID_COLUMN =?"; dbCommand.Parameters.Add("INT_COLUMN", OleDbType.Integer).Value = intVariable; resultado int = Convert.ToInt32(dbCommand.ExecuteScalar());

Cabe señalar especialmente que ExecuteScalar devuelve un Objeto y si la solicitud no devolvió nada en absoluto, el resultado será nulo y la conversión a un tipo de datos normal fallará con un error. Si es posible una situación en la que no recibimos nada como respuesta, entonces debemos hacer esto:

OleDbCommand dbCommand = dbConn.CreateCommand(); dbCommand.CommandText = "SELECCIONE TEST_COLUMN DE TEST_TABLE DONDE ID_COLUMN =?"; dbCommand.Parameters.Add("INT_COLUMN", OleDbType.Integer).Value = intVariable; objeto resultObj = dbCommand.ExecuteScalar() int resultado = -1; // valor predeterminado que significa resultado vacío if(resultObj != null) ( result = Convert.ToInt32(dbCommand.ExecuteScalar()); )

3. Lectura secuencial de la selección seleccionada línea por línea
Leer una línea (varias se leen en un bucle);

OleDbCommand dbCommand = nuevo OleDbCommand (seleccione PERSON_ID, NOMBRE, APELLIDO de TEST_TABLE, dbConn); OleDbDataReader dbReader = dbCommand.ExecuteReader(); dbReader.Read(); nombre de cadena = Convert.ToString(dbReader["NOMBRE"]); apellido de cadena = Convert.ToString(dbReader["APELLIDO"]); dbReader.Close();

4. Caso raro. Actualización automática de una tabla en la base de datos en función de los cambios en el DataTable (generalmente editado a través de una interfaz visual).

Es necesario escribir cuatro comandos para DbAdapter para cada caso posible: seleccionar, insertar, actualizar, eliminar.

DbAdapter.InsertCommand = new OleDbCommand("insertar en TEST_TABLE (NOMBRE, FAMILIA, EDAD) valores (?, ?, ?)", dbConnection); dbAdapter.InsertCommand.Parameters.Add("NOMBRE", OleDbType.VarChar, 100, "NOMBRE"); dbAdapter.InsertCommand.Parameters.Add("FAMILIA", OleDbType.VarChar, 100, "FAMILIA"); // para tipos de datos con una longitud constante, se ignora la longitud especificada en el comando dbAdapter.InsertCommand.Parameters.Add("AGE", OleDbType.Integer, 100, "AGE"); // agregar un comando de actualización dbAdapter.UpdateCommand = new OleDbCommand("actualizar TEST_TABLE set NOMBRE =?, FAMILIA =?, EDAD =? donde ID =?, dbConnection); dbAdapter.UpdateCommand.Parameters.Add("NOMBRE", OleDbType.VarChar,100, "NOMBRE"); dbAdapter.UpdateCommand.Parameters.Add("FAMILIA", OleDbType.VarChar, 100, "FAMILIA"); dbAdapter.UpdateCommand.Parameters.Add("EDAD", OleDbType.Integer, 100, "EDAD"); dbAdapter.UpdateCommand.Parameters.Add("ID", OleDbType.Integer, 100, "ID"); // agregar un comando de eliminación dbAdapter.DeleteCommand = new OleDbCommand("eliminar de TEST_TABLE donde ID =?", dbConnection); dbAdapter.DeleteCommand.Parameters.Add("ID", OleDbType.Integer, 100, "ID"); try ( // transfiere todos los cambios de DataTable a la tabla en la base de datos dbAdapter.Update(table); ) catch (Error de excepción) ( MessageBox.Show("¡Error al guardar datos!" + error.Message); return; ) MessageBox . Mostrar ("¡Cambios guardados!");




Arriba