Вимоги: Я читав статтю про 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
Вставити дані
Оновлення даних
Видалити дані
(Кінець)
|