Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 6572|Resposta: 4

[.NET Core] [Combate real]. Gerador de consultas NET/C# SQL baseado em SQL

[Copiar link]
Postado em 2022-10-12 22:07:53 | | | |
Requisitos: Li um artigo sobre sqlkata na Internet, "SqlKata - Conveniente e Fácil de Usar para Sql Query Builder", e acho que esse plugin é muito útil, você pode definir nomes e condições de tabelas dinamicamente para gerar instruções SQL seguras correspondentes, e a interface chama sqlkata para realizar operações de banco de dados por meio de informações visuais de configuração de formulários, além de configurar uma interface sem programação e codificação fixa. Isso é semelhante ao meu uso anterior do jOOQ em projetos de desenvolvimento em Java.

SqlKata

O Gerador de Consultas SqlKata é um poderoso gerador de consultas SQL escrito em C#. É seguro e independente de quadro. Inspirado pelos principais construtores de consultas disponíveis, como Laravel Query Builder e Knex.

Um poderoso gerador dinâmico de consultas SQL que suporta SQL Server, MySql, PostgreSql, Oracle e Firebird.

Endereço do GitHub:O login do hiperlink está visível.
Endereço oficial do documento:O login do hiperlink está visível.

O SQL Server prepara os dados de teste

Primeiro, usamos o banco de dados MSSQL para criar uma nova tabela de teste e gerar alguns dados de teste, o script é o seguinte:



Crie um novo aplicativo de console .NET Core 3.1

Adicione os pacotes SqlKata e SqlKata.Execution, Microsoft.Data.SqlClient usando Nuget com o seguinte comando:


O código do console é o seguinte:

exec sp_executesql N'SELECT * FROM [TestTableSize] ONDE [MyKeyField] = @p0 ORDENAR POR (SELECT 0) DESLOCAMENTO @p1 LINHAS BUSCAR PRÓXIMO @p2 APENAS LINHAS',N'@p0 nvarchar(4000),@p1 bigint,@p2 int',@p0= N'0000000088',@p1=0,@p2=10



Tente enviar uma consultaUma tabela que não existe, o erro é o seguinte:

Exceção não resolvida. Microsoft.Data.SqlClient.SqlException (0x80131904): Nome 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)
   em Microsoft.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
   at Microsoft.Data.SqlClient.SqlDataReader.TryConsumeMetaData()
   em Microsoft.Data.SqlClient.SqlDataReader.get_MetaData()
   at Microsoft.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString, Boolean isInternal, Boolean forDescribeParameterEncryption, boolean shouldCacheForAlwaysEncrypted)
   em 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)
   at 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)
   at Microsoft.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, método String)
   em Microsoft.Data.SqlClient.SqlCommand.ExecuteReader(comportamento do CommandBehavior)
   at Microsoft.Data.SqlClient.SqlCommand.ExecuteDbDataReader(comportamento do Comando)
   em System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior)
   at Dapper.SqlMapper.ExecuteReaderWithFlagsFallback(IDbCommand cmd, Boolean wasClosed, CommandBehavior behavior) em /_/Dapper/SqlMapper.cs:line 1066
   em Dapper.SqlMapper.QueryImpl[T](IDbConnection cnn, comando CommandDefinition, Type effectiveType)+MoveNext() em /_/Dapper/SqlMapper.cs:line 1094
   em System.Collections.Generic.List'1..ctor(IEnumerable'1 collection)
   em System.Linq.Enumerable.ToList[TSource](IEnumerable'1 fonte)
   at Dapper.SqlMapper.Query[T](IDbConnection cnn, String sql, Object param, IDbTransaction transaction, Boolean buffered, Nullable'1 commandTimeout, Nullable'1 commandType) em /_/ Dapper/SqlMapper.cs:linha 734
   at SqlKata.Execution.QueryFactory.Get[T](Consulta de consulta, transação IDbTransaction, tempo limite Nullable'1)
   at SqlKata.Execution.QueryExtensions.Get[T](Consulta de consulta, transação IDbTransaction, tempo de espera Nullable'1)
   at SqlKata.Execution.QueryExtensions.Get(Consulta de consulta, transação IDbTransaction, tempo limite Nullable'1)
   em SqlKataDemo.Program.Main(String[] args) em C:\Users\itsvse_pc\source\repos\WindowsFormsApp1\SqlKataDemo\Program.cs:linha 20
ClientConnectionId:49158892-5a24-4aa8-8249-232fba2674da
Erro Número: 208, Estado: 1, Turma: 16


Se quisermos apenas gerar instruções sql pelo SqlKata e não quisermos executá-las, o código é o seguinte:



Consultas mais avançadas

Tabela JOIN


Inserir dados


Dados de atualização


Excluir dados

(Fim)





Anterior:As etiquetas dos módulos de memória Hynix (Hynix) e Micron (Micron) são explicadas em detalhes
Próximo:O ESXI 7 verifica o modelo de memória e o tamanho do host do servidor
Postado em 2022-10-13 15:19:47 |
Aprender a aprender, ainda bem
Postado em 14-10-2022 11:07:18 |
Aprenda a aprender
 Senhorio| Postado em 2025-1-2 12:15:02 |
LINQKit é um conjunto gratuito de extensões para usuários avançados do LINQ para SQL e Entity Framework. :O login do hiperlink está visível.
 Senhorio| Postado em 2025-1-2 14:20:57 |
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com