首页 > 解决方案 > 使用 fluentmigrator 尝试捕获未按预期工作

问题描述

我们正在使用 fluentmigrator 和 sql server 2017。下面的代码抛出异常,但 catch 块没有捕获。

这会引发异常,因为命令 ADD SENSITIVITY CLASSIFICATION 在 sql server 2017 中不可用,它是在 2019 年引入的。

执行类型:IExecuteExpressionRoot

        public void AddSensitivityClassificationSql(string schema, string table, string column, string label, string informationType, string rank)
        {
            try
            {
                Execute.Sql($@"ADD SENSITIVITY CLASSIFICATION TO [{schema}].[{table}].[{column}] WITH (LABEL = '{label}', INFORMATION_TYPE = '{informationType}', RANK = {rank})");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }

因此,程序崩溃。有人可以帮助我了解如何捕获此异常吗?

堆栈跟踪:

错误是“敏感度”附近的语法不正确。

---> System.Data.SqlClient.SqlException (0x80131904): 'SENSITIVITY' 附近的语法不正确。在 System.Data.SqlClient.SqlConnection.OnError(SqlException 异常,布尔 breakConnection,操作1 wrapCloseInAction) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action1 wrapCloseInAction)在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj,布尔 callerHasConnectionLock,布尔 asyncClose)在 System.Data.SqlClient.TdsParser。在 System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(字符串方法名,布尔异步,Int32 超时,布尔异步写入)在 System.Data.SqlClient 的 TryRun(RunBehavior runBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj,Boolean & dataReady)。 SqlCommand.InternalExecuteNonQuery(TaskCompletionSource1 completion, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite, String methodName) at System.Data.SqlClient.SqlCommand.ExecuteNonQuery() at FluentMigrator.Runner.Processors.SqlServer.SqlServerProcessor.ExecuteNonQuery(String sql) ClientConnectionId:83abb1dc-5b23-4065-af3e-52e6f95e09d0 Error Number:102,State:1,Class:15 --- End of inner exception stack trace --- at FluentMigrator.Runner.Processors.SqlServer.SqlServerProcessor.ExecuteNonQuery(String sql) at FluentMigrator.Runner.Processors.SqlServer.SqlServerProcessor.Process(String sql) at FluentMigrator.Runner.Processors.SqlServer.SqlServerProcessor.Execute(String template, Object[] args) at FluentMigrator.Runner.Processors.ProcessorBase.Execute(String sql) at FluentMigrator.Expressions.ExecuteSqlStatementExpression.ExecuteWith(IMigrationProcessor processor) at FluentMigrator.Runner.MigrationRunner.<>c__DisplayClass80_0.<ExecuteExpressions>b__1() at FluentMigrator.Runner.StopWatch.Time(Action action) at FluentMigrator.Runner.MigrationRunner.ExecuteExpressions(ICollection1 个表达式)在 FluentMigrator.Runner.MigrationRunner.ExecuteMigration(IMigration migration, Action`2 getExpressions) 在 FluentMigrator.Runner.MigrationRunner.ApplyMigrationUp(IMigrationInfo migrationInfo, Boolean useTransaction) 在 FluentMigrator.Runner.MigrationRunner.MigrateUp(Int64 targetVersion, Boolean useAutomaticTransactionManagement)在 FluentMigrator.Runner.MigrationRunner.MigrateUp(Boolean useAutomaticTransactionManagement) 在 FluentMigrator.Runner.MigrationRunner.MigrateUp()

标签: c#sql-serverentity-framework

解决方案


推荐阅读