Requisitos: Leí un artículo sobre sqlkata en Internet, "SqlKata - Conveniente y fácil de usar Sql Query Builder", y creo que este plugin es muy útil, puedes establecer dinámicamente nombres y condiciones de tablas para generar sentencias SQL seguras correspondientes, y la interfaz llama a sqlkata para realizar operaciones de base de datos mediante información visual de configuración de formularios, y puedes configurar una interfaz sin necesidad de programación ni codificación fija. Esto es similar a mi uso anterior de jOOQ en proyectos de desarrollo Java.
SqlKata
SqlKata Query Generator es un potente generador de consultas SQL escrito en C#. Es seguro y independiente del marco. Inspirado en los principales constructores de consultas disponibles, como Laravel Query Builder y Knex.
Un potente generador dinámico de consultas SQL que soporta Sql Server, MySql, PostgreSql, Oracle y Firebird.
Dirección de GitHub:El inicio de sesión del hipervínculo es visible. Dirección oficial del documento:El inicio de sesión del hipervínculo es visible.
SQL Server prepara los datos de prueba
Primero, usamos la base de datos MSSQL para crear una nueva tabla de pruebas y generar algunos datos de prueba, el script es el siguiente:
Crea una nueva aplicación de consola .NET Core 3.1
Añade los paquetes SqlKata y SqlKata.Execution, Microsoft.Data.SqlClient usando Nuget con el siguiente comando:
El código de la consola es el siguiente:
EXEC sp_executesql N'SELECT * FROM [TestTableSize] DONDE [MiCampoClave] = @p0 ORDEN POR (SELECT 0) DESPLAZAMIENTO @p1 FILAS OBTIENEN NEXT @p2 SOLO FILAS',N'@p0 nvarchar(4000),@p1 bigint,@p2 int',@p0= N'0000000088',@p1=0,@p2=10
Prueba a enviar una consultaUna tabla que no existe, el error es el siguiente:
Excepción no gestionada. Microsoft.Data.SqlClient.SqlException (0x80131904): Nombre de objeto inválido 'Hei'. at Microsoft.Data.SqlClient.SqlConnection.OnError (SqlException exception, Boolean breakConnection, Action'1 wrapCloseInAction) at Microsoft.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action'1 wrapCloseInAction) at Microsoft.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) en Microsoft.Data.SqlClient.TdsParser.TryRun(RunBehavior, runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) en Microsoft.Data.SqlClient.SqlDataReader.TryConsumeMetaData() en Microsoft.Data.SqlClient.SqlDataReader.get_MetaData() at Microsoft.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString, Boolean isInternal, Boolean forDescribeParameterEncryption, boolean shouldCacheForAlwaysEncrypted) en Microsoft.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean isAsync, Int32 timeout, Task& task, Boolean asyncWrite, Boolean inRetry, SqlDataReader ds, Boolean describeParameterEncryptionRequest) en Microsoft.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, TaskCompletionSource'1 completion, Int32 timeout, Task& task, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry, método String) en Microsoft.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, método String) en Microsoft.Data.SqlClient.SqlCommand.ExecuteReader(comportamiento de CommandBehavior) en Microsoft.Data.SqlClient.SqlCommand.ExecuteDbDataReader(comportamiento de comando) en System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(comportamiento de comandos) en Dapper.SqlMapper.ExecuteReaderWithFlagsFallback(IDbCommand cmd, Boolean wasClosed, CommandBehavior behavior) en /_/Dapper/SqlMapper.cs:line 1066 en Dapper.SqlMapper.QueryImpl[T](IDbConnection cnn, comando CommandDefinition, Type effectiveType)+MoveNext() en /_/Dapper/SqlMapper.cs:línea 1094 en System.Collections.Generic.List'1..ctor(IEnumerable'1 collection) en System.Linq.Enumerable.ToList[TSource](IEnumerable'1 fuente) at Dapper.SqlMapper.Query[T](IDbConnection cnn, String sql, Object param, transacción IDbTransaction, Boolean buffered, Nullable'1 commandTimeout, Nullable'1 commandType) en /_/ Dapper/SqlMapper.cs:línea 734 at SqlKata.Execution.QueryFactory.Get[T](Consulta de consulta, transacción IDbTransaction, tiempo límite de tiempo de Nullable'1) en SqlKata.Execution.QueryExtensions.Get[T](Consulta de consulta, transacción IDbTransaction, tiempo límite de tiempo de Nullable'1) at SqlKata.Execution.QueryExtensions.Get(Consulta de consulta, transacción IDbTransaction, tiempo límite de tiempo de Nullable'1) en SqlKataDemo.Program.Main(String[] args) en C:\Users\itsvse_pc\source\repos\WindowsFormsApp1\SqlKataDemo\Program.cs:línea 20
ClientConnectionId:49158892-5a24-4aa8-8249-232fba2674da Número de error: 208, Estado: 1, Clase: 16
Si solo queremos generar sentencias SQL a través de SQL y no queremos ejecutarlas, el código es el siguiente:
Consultas más avanzadas
Tabla JOIN
Insertar datos
Datos de actualización
Eliminar datos
(Fin)
|