要件:インターネットでsqlkataについての記事「SqlKata - Convenient and Easy to Use SQL Query Builder」を読みましたが、このプラグインは非常に便利だと感じました。テーブル名や条件を動的に設定して対応する安全なSQL文を生成でき、フロントエンドは視覚的なフォーム設定情報を通じてsqlkataを呼び出してデータベース操作を行えます。また、プログラミングやハードコーディングなしでインターフェースを設定できます。 これは、私が以前Java開発プロジェクトでjOOQを使ったのと似ています。
SqlKata
SqlKata Query Generatorは、C#で書かれた強力なSQLクエリジェネレーターです。 安全でフレームに依存しない。 Laravel Query BuilderやKnexなどのトップクエリビルダーに触発されています。
SQL Server、MySql、PostgreSql、Oracle、Firebirdをサポートする強力な動的SQLクエリジェネレーターです。
GitHubアドレス:ハイパーリンクのログインが見えます。 公式文書宛先:ハイパーリンクのログインが見えます。
SQL Serverはテストデータを準備します
まず、MSSQLデータベースを使って新しいテストテーブルを作成し、テストデータを生成します。スクリプトは以下の通りです:
新しい.NET Core 3.1コンソールアプリを作成する
以下のコマンドでNugetを使ってSqlKataおよびSqlKata.Execution、Microsoft.Data.SqlClientパッケージを追加してください:
コンソールコードは以下の通りです:
exec sp_executesql N'SELECT * [TestTableSize] から [MYKeyfield] = @p0 順序 (SELECT 0) オフセット @p1 行は WILL UP @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 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, 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 タイムアウト、Task&task、Boolean& usedCache、ブールasyncWrite、ブールinRetry、Stringメソッド) at Microsoft.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) at Microsoft.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior) at 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) in /_/Dapper/SqlMapper.cs:line 1066 at Dapper.SqlMapper.QueryImpl[T](IDbConnection cnn, CommandDefinition command, Type effectiveType)+MoveNext() in /_/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) in /_/ ダッパー/SqlMapper.cs:ライン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 エラー番号:208、州:1、クラス:16
もしSQLKataでSQL文を生成したいだけで実行したくない場合は、コードは以下の通りです:
より高度なクエリ
JOIN テーブル
データを挿入
更新データ
データを削除
(終わり)
|