Wymagania: Przeczytałem artykuł o sqlkata w Internecie "SqlKata - Convenient and Easy to Use Sql Query Builder" i uważam, że ta wtyczka jest bardzo przydatna – można dynamicznie ustawiać nazwy i warunki tabel do generowania odpowiadających bezpiecznych instrukcji SQL, a front-end wywołuje sqlkata do wykonywania operacji bazadanych za pomocą wizualnych informacji konfiguracyjnych, a interfejs można skonfigurować bez programowania i hardkodowania. To podobne do mojego wcześniejszego użycia jOOQ w projektach programistycznych Javy.
SqlKata
SqlKata Query Generator to potężny generator zapytań SQL napisany w C#. Jest bezpieczny i niezależny od ramy. Zainspirowane najlepszymi kreatorami zapytań, takimi jak Laravel Query Builder i Knex.
Potężny, dynamiczny generator zapytań SQL wspierający Sql Server, MySql, PostgreSql, Oracle oraz Firebird.
Adres GitHub:Logowanie do linku jest widoczne. Oficjalny adres dokumentu:Logowanie do linku jest widoczne.
SQL Server przygotowuje dane testowe
Najpierw używamy bazy danych MSSQL do utworzenia nowej tabeli testowej i wygenerowania danych testowych, skrypt wygląda następująco:
Stwórz nową aplikację konsolową .NET Core 3.1
Dodaj pakiety SqlKata i SqlKata.Execution, Microsoft.Data.SqlClient za pomocą Nugeta za pomocą następującego polecenia:
Kod konsoli jest następujący:
exec sp_executesql N'SELECT * FROM [TestTableSize] GDZIE [MyKeyField] = @p0 KOLEJNOŚĆ PRZEZ (WYBIERZ 0) OFFSET @p1 WIERSZE POBIERAJĄ NASTĘPNE @p2 WIERSZY TYLKO ',N'@p0 nvarchar(4000),@p1 bigint,@p2 int',@p0= N'0000000088',@p1=0,@p2=10
Spróbuj wysłać zapytanieTabela, która nie istnieje, błąd jest następujący:
Wyjątek nieobsługiwany. Microsoft.Data.SqlClient.SqlException (0x80131904): Nieprawidłowa nazwa obiektu '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() at Microsoft.Data.SqlClient.SqlDataReader.get_MetaData() at Microsoft.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString, Boolean isInternal, Boolean forDescribeParameterEncryption, boolean shouldCacheForAlwaysEncrypted) at 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, String method) at Microsoft.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) na stronie Microsoft.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behaviour) at Microsoft.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior) at System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behaviour) at Dapper.SqlMapper.ExecuteReaderWithFlagsFallback(IDbCommand cmd, Boolean wasClosed, CommandBehavior behaviour) w /_/Dapper/SqlMapper.cs:line 1066 at Dapper.SqlMapper.QueryImpl[T](IDbConnection cnn, polecenie CommandDefinition, Type effectiveType)+MoveNext() w /_/Dapper/SqlMapper.cs:line 1094 at 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) w /_/ Dapper/SqlMapper.cs:linia 734 at SqlKata.Execution.QueryFactory.Get[T](Query query, IDbTransaction transaction, Nullable'1 timeout) 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 Numer błędu: 208,Stan:1,Klasa:16
Jeśli chcemy tylko generować instrukcje sql przez SqlKata i nie chcemy ich wykonywać, kod wygląda następująco:
Bardziej zaawansowane zapytania
Tabela JOIN
Wstaw dane
Aktualizacja danych
Usuń dane
(Koniec)
|