Anforderungen: Ich habe einen Artikel über SQLKATA im Internet gelesen, "SqlKata – Convenient and Easy to Use Sql Query Builder", und ich finde, dass dieses Plugin sehr nützlich ist: Man kann dynamisch Tabellennamen und Bedingungen festlegen, um entsprechende sichere SQL-Anweisungen zu generieren, und das Front-End ruft sqlkata auf, um Datenbankoperationen über visuelle Formularkonfigurationsinformationen durchzuführen, und man kann eine Benutzeroberfläche ohne Programmieren und Hardcoding konfigurieren. Das ähnelt meiner früheren Verwendung von jOOQ in Java-Entwicklungsprojekten.
sqlKata
Der SqlKata Query Generator ist ein leistungsstarker SQL-Abfragegenerator, der in C# geschrieben ist. Es ist sicher und frame-agnostisch. Inspiriert von den besten verfügbaren Abfrage-Buildern wie Laravel Query Builder und Knex.
Ein leistungsstarker dynamischer SQL-Abfragegenerator, der SQL Server, MySql, PostgreSQL, Oracle und Firebird unterstützt.
GitHub-Adresse:Der Hyperlink-Login ist sichtbar. Offizielle Dokumentadresse:Der Hyperlink-Login ist sichtbar.
SQL Server bereitet die Testdaten vor
Zuerst verwenden wir die MSSQL-Datenbank, um eine neue Testtabelle zu erstellen und einige Testdaten zu generieren; das Skript ist wie folgt:
Erstelle eine neue .NET Core 3.1 Konsolen-App
Fügen Sie die SqlKata- und SqlKata.Execution-Pakete sowie Microsoft.Data.SqlClient mit Nuget mit folgendem Befehl hinzu:
Der Konsolencode lautet wie folgt:
exec sp_executesql N'SELECT * AUS [TestTableSize] WOBEI [MyKeyField] = @p0 ORDNEN NACH (SELECT 0) OFFSET @p1 ZEILEN NUR @p2 ZEILEN',N'@p0 nvarchar(4000),@p1 bigint,@p2 int',@p0= N'0000000088',@p1=0,@p2=10
Versuche, eine Anfrage zu sendenEine Tabelle, die nicht existiert, der Fehler ist wie folgt:
Unbearbeitete Ausnahme. Microsoft.Data.SqlClient.SqlException (0x80131904): Ungültiger Objektname 'Hei'. at Microsoft.Data.SqlClient.SqlConnection.OnError(SqlException, Boolean breakConnection, Action'1 wrapCloseInAction) bei Microsoft.Data.SqlClient.SqlInternalConnection.OnError(SqlException-Ausnahme, Boolean breakConnection, Action'1 wrapCloseInAction) at Microsoft.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) bei Microsoft.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) bei Microsoft.Data.SqlClient.SqlDataReader.TryConsumeMetaData() bei Microsoft.Data.SqlClient.SqlDataReader.get_MetaData() bei Microsoft.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString, Boolean isInternal, Boolean forDescribeParameterEncryption, Boolean shouldCacheForAlwaysEncrypted) bei 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-Methode) bei Microsoft.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String-Methode) bei Microsoft.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior) bei Microsoft.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior) bei System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior) bei Dapper.SqlMapper.ExecuteReaderWithFlagsFallback (IDbCommand cmd, Boolean wasClosed, CommandBehavior behavior) in /_/Dapper/SqlMapper.cs:line 1066 bei Dapper.SqlMapper.QueryImpl[T](IDbConnection cnn, CommandDefinition-Befehl, Type effectiveType)+MoveNext() in /_/Dapper/SqlMapper.cs:line 1094 bei System.Collections.Generic.List'1..ctor (IEnumerable'1 Collection) bei System.Linq.Enumerable.ToList[TSource](IEnumerable'1 Quelle) at Dapper.SqlMapper.Query[T](IDbConnection cnn, String sql, Object param, IDbTransaction transaction, Boolean buffered, Nullable'1 commandTimeout, Nullable'1 commandType) in /_/ Dapper/SqlMapper.cs: Zeile 734 at SqlKata.Execution.QueryFactory.Get[T](Query Query, IDbTransaction, Nullable'1 timeout) at SqlKata.Execution.QueryExtensions.Get[T](Abfrageanfrage, IDbTransaction-Transaktion, Nullable'1 Timeout) at SqlKata.Execution.QueryExtensions.Get(Query query, IDbTransaction-Transaktion, Nullable'1 timeout) at SqlKataDemo.Program.Main(String[] args) in C:\Users\itsvse_pc\source\repos\WindowsFormsApp1\SqlKataDemo\Program.cs:Zeile 20
ClientConnectionId:49158892-5a24-4aa8-8249-232fba2674da Fehlernummer:208,Staat:1,Klasse:16
Wenn wir nur SQL-Anweisungen über SqlKata generieren wollen und sie nicht ausführen wollen, sieht der Code wie folgt aus:
Fortgeschrittenere Abfragen
JOIN-Tabelle
Daten einfügen
Aktualisierungsdaten
Daten löschen
(Ende)
|