Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 6572|Відповідь: 4

[.NET Core] [Справжній бій]. Генератор запитів NET/C# SQL на основі sqlkata

[Копіювати посилання]
Опубліковано 2022-10-12 22:07:53 | | | |
Вимоги: Я читав статтю про sqlkata в Інтернеті «SqlKata - Зручний і простий у використанні конструктор SQL запитів», і вважаю, що цей плагін дуже корисний: можна динамічно встановлювати назви таблиць і умови для генерації відповідних безпечних 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) ЗСУВ @p1 РЯДКИ ОТРИМУЮТЬ НАСТУПНІ @p2 РЯДКИ ЛИШЕ',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 bulkCopyHandler, 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, булева isInternal, булева forDescribeParameterEncryption, булевий маєCacheForAlwaysEncrypted)
   у Microsoft.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, булевий returnStream, булевий isAsync, тайм-аут Int32, Завдання та завдання, булева asyncWrite, булева inRetry, SqlDataReader ds, булева describeParameterEncryptionRequest)
   на Microsoft.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, булевий returnStream, завершення TaskCompletionSource'1, Int32 тайм-аут, Task&Task, Boolean&usedCache, булевий asyncWrite, булевий inRetry, метод рядків)
   на Microsoft.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, булевий returnStream, метод рядків)
   на Microsoft.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior)
   at Microsoft.Data.SqlClient.SqlCommand.ExecuteDbDataReader(поведінка CommandBehavior)
   на System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior)
   на Dapper.SqlMapper.ExecuteReaderWithFlagsFallback(IDbCommand cmd, Boolean wasClosed, CommandBehavior behavior) у /_/Dapper/SqlMapper.cs:line 1066
   на Dapper.SqlMapper.QueryImpl[T](IDbConnection cnn, команда CommandDefinition, Type effectiveType)+MoveNext() у /_/Dapper/SqlMapper.cs:line 1094
   на System.Collections.Generric.List'1..ctor(IEnumerable'1 collection)
   на System.Linq.Enumerable.ToList[TSource](джерело IEnumerable'1)
   на Dapper.SqlMapper.Query[T](IDbConnection cnn, String sql, Object param, IDbTransaction transaction, Boolean buffered, Nullable'1 commandTimeout, Nullable'1 commandType) у /_/ Dapper/SqlMapper.cs:рядок 734
   at SqlKata.Execution.QueryFactory.Get[T](Запит до запиту, транзакція IDbTransaction, тайм-аут Nullable'1)
   at SqlKata.Execution.QueryExtensions.Get[T](Запит до запиту, транзакція IDbTransaction, тайм-аут Nullable'1)
   at SqlKata.Execution.QueryExtensions.Get (Query query, IDbTransaction transaction, Nullable'1 timeout)
   at SqlKataDemo.Program.Main(String[] args) у 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