Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 6572|Отговор: 4

[.NET Core] [Истински бой]. NET/C# SQL генератор на заявки, базиран на sqlkata

[Копирай линк]
Публикувано на 2022-10-12 22:07:53 | | | |
Изисквания: Четох статия за sqlkata в интернет, "SqlKata - Удобен и лесен за използване Sql Query Builder", и смятам, че този плъгин е много полезен – можеш динамично да задаваш имена и условия на таблици за генериране на съответните сигурни SQL оператори, а фронтендът извиква sqlkata за извършване на операции с база данни чрез визуална информация за конфигурация на формуляри, и можеш да конфигурираш интерфейс без програмиране и харкодиране. Това е подобно на предишната ми употреба на jOOQ в Java проекти за разработка.

SqlKata

SqlKata Query Generator е мощен SQL генератор на заявки, написан на C#. Той е сигурен и независим от рамката. Вдъхновен от най-добрите налични конструктори на заявки, като Laravel Query Builder и Knex.

Мощен динамичен генератор на SQL заявки, който поддържа Sql Server, MySql, PostgreSql, Oracle и Firebird.

GitHub адрес:Входът към хиперлинк е видим.
Официален адрес на документа:Входът към хиперлинк е видим.

SQL Server подготвя тестовите данни

Първо, използваме MSSQL базата данни, за да създадем нова тестова таблица и да генерираме някои тестови данни, скриптът е следният:



Създайте ново приложение за конзола .NET Core 3.1

Добавете пакетите SqlKata и SqlKata.Execution, Microsoft.Data.SqlClient с помощта на Nuget със следната команда:


Кодът на конзолата е следният:

exec sp_executesql N'SELECT * ОТ [TestTableSize], където [MyKeyField] = @p0 ORDER BY (SELECT 0) OFFSET @p1 РЕДОВЕТЕ СЕ ИЗВЛИЧАТ СЛЕДВАЩИЯ @p2 РЕДОВЕ ONLY',N'@p0 nvarchar(4000),@p1 bigint,@p2 int',@p0= N'0000000088',@p1=0,@p2=10



Опитай да направиш заявкаТаблица, която не съществува, грешката е следната:

Необработено изключение. Microsoft.Data.SqlClient.SqlException (0x80131904): Невалидно име на обект '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)
   at Microsoft.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandleler, TdsParserStateObject stateObj, Boolean& dataReady)
   at Microsoft.Data.SqlClient.SqlDataReader.TryConsumeMetaData()
   на Microsoft.Data.SqlClient.SqlDataReader.get_MetaData()
   at Microsoft.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString, Boolean isInternal, Boolean forDescribeParameterEncryption, булев трябваCacheForAlwaysEncrypted)
   в 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)
   в Microsoft.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, TaskCompletionSource'1 completion, Int32 timeout, Task&task, Boolean и usedCache, Boolean asyncWrite, Boolean inRetry, String method)
   at Microsoft.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
   в Microsoft.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior)
   в Microsoft.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
   в System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior)
   at Dapper.SqlMapper.ExecuteReaderWithFlagsFallback(IDbCommand cmd, Boolean wasClosed, CommandBehavior behavior) в /_/Dapper/SqlMapper.cs:ред 1066
   at Dapper.SqlMapper.QueryImpl[T](IDbConnection cnn, команда CommandDefinition, Type effectiveType)+MoveNext() в /_/Dapper/SqlMapper.cs:line 1094
   в System.Collections.Generic.List'1..ctor(IEnumerable'1 collection)
   at System.Linq.Enumerable.ToList[TSource](IEnumerable'1 source)
   at Dapper.SqlMapper.Query[T](IDbConnection cnn, String sql, Object param, IDbTransaction transaction, Boolean buffered, Nullable'1 commandTimeout, Nullable'1 commandType) в /_/ Елегантно/SqlMapper.cs:ред 734
   at SqlKata.Execution.QueryFactory.Get[T](Заявка за заявка, IDbТранзакция транзакция, таймаут на Nullable'1)
   at SqlKata.Execution.QueryExtensions.Get[T](Query query, IDbTransaction transaction, Nullable'1 timeout)
   at SqlKata.Execution.QueryExtensions.Get(Query query, IDbTransaction transaction, Nullable'1 timeout)
   at SqlKataDemo.Program.Main(String[] args) in C:\Users\itsvse_pc\source\repos\WindowsFormsApp1\SqlKataDemo\Program.cs:line 20
ClientConnectionId:49158892-5a24-4aa8-8249-232fba2674da
Грешка номер:208,Щат:1,Клас:16


Ако просто искаме да генерираме SQL оператори чрез SqlKata и не искаме да ги изпълняваме, кодът е следният:



По-сложни заявки

Таблица JOIN


Вмъкнете данни


Актуализиране на данните


Изтриване на данни

(Край)





Предишен:Етикетите на паметните модули Hynix (Hynix) и Micron (Micron) са обяснени подробно
Следващ:ESXI 7 проверява модела на паметта и размера на сървърния хост
Публикувано на 2022-10-13 15:19:47 |
Да се учиш – хубаво нещо
Публикувано на 2022-10-14 11:07:18 |
Научи се да учиш
 Хазяин| Публикувано на 2025-1-2 12:15:02 |
LINQKit е безплатен набор от разширения за напреднали потребители на LINQ към SQL и Entity Framework. :Входът към хиперлинк е видим.
 Хазяин| Публикувано на 2025-1-2 14:20:57 |
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com