[原创]谈谈基于SQL Server 的Exception Handling - PART III

六、SqlException

在上面一节中,我给出了一个完整的例子说明了:如何在将message定义在sys.messages中保证message的一致性和可维护性;如何在Stored procedure中使用RAISERROR将一个可预知的Error抛出;如何在Stored procedure中使用TRY/CATCH进行异常的捕捉;在Application如果处理从SQL Server抛出的Exception。实际上,SQL Server database Engine抛出、被我们的.NET最终捕获的SqlException,我们通过SqlException的属性可以得到Error的相关信息。下面是SqlException的属性列表:

 

  • public SqlErrorCollection Errors { get; }
  • public int LineNumber { get; }
  • public int Number { get; }
  • public string Procedure { get; }
  • public string Server { get; }
  • public override string Source { get; }
  • public byte State { get; }


有了前面的内容作铺垫,相信大家都知道每个属性分别表示的什么了吧。为了使大家对

stored procedureErrorADO.NET捕获的ErrorMapping有一个更加清晰的认识。我们来写一个Sample,我们沿用Create User的例子:

 

stored procedure中,遇到重名通过RAISERROR抛出异常[在整篇文章中,使用到ErrorException,大家可以看成是等效的]
    ·         Error Number50001
    ·         Severity16
    ·         State1
    ·         MessageThis user is already existent

我们来修正一下CreateUser方法:

public   static    bool  CreateUser( string  userName)
        
{
            
string procedureName = "P_USERS_I";
            Dictionary
<stringobject> parameters = new Dictionary<stringobject>();
            parameters.Add(
"user_id", Guid.NewGuid().ToString());
            parameters.Add(
"user_name", userName);
            
try
            
{
                ExecuteCommand(procedureName, parameters);
                
return true;
            }

            
catch (SqlException ex)
            
{
                Console.WriteLine(
"ex.Class/t: {0}", ex.Class);
                Console.WriteLine(
"ex.ErrorCode/t: {0}", ex.ErrorCode);
                Console.WriteLine(
"ex.LineNumber/t: {0}", ex.LineNumber);
                Console.WriteLine(
"ex.Message/t: {0}", ex.Message);
                Console.WriteLine(
"ex.Number/t: {0}", ex.Number);
                Console.WriteLine(
"ex.Procedure/t: {0}", ex.Procedure);
                Console.WriteLine(
"ex.Server/t: {0}", ex.Server);
                Console.WriteLine(
"ex.Source/t: {0}", ex.Source);
                Console.WriteLine(
"ex.State/t: {0}", ex.State);
         
return false;
            }

        }

Main()中调用这个CreateUser():



在这里我想特别说明一下
SqlException.Number这个属性,它代表Database中的Error number[或者是@@ERRORimessage_id],不过当我们使用RAISERROR语句,如果我们指定的一个表示error message的字符串,ADO.NET捕获的SqlException.Number这个属性默认为50000。比如我们将Error number换成error message

SET   @error_message      =  ERROR_MESSAGE()
SET   @error_serverity      = ERROR_SEVERITY()
SET   @error_state      =  ERROR_STATE()
RAISERROR ( @error_message @error_serverity , @error_state )

将会得到这样的结果:



还有一点需要特别提醒得是,我们可以在调用
RAISERROR加了一个WITH SETERROR重句,强制将当前@@ERROR的值返回到客户端:

RAISERROR ( @error_message , @error_serverity , @error_state WITH  SETERROR

七、    InfoMessage

上面的所以内容都围绕一个Exception handling的主题,在文章最后一部分我们想想一个和非Exception handling但是又和上面的内容很相关的主题:在Database通过Print语句输出的Message如何向Application传递。

在上面的例子中,有一个P_CLEAR_DATAstored procedure,用于数据的清理。在操作结束后,有一个Print语句(PRINT ('All data have been deleted!')

CREATE   Procedure  P_CLEAR_DATA
AS

    
DELETE   FROM  dbo.T_USERS_IN_ROLES
    
DELETE   FROM  dbo.T_USERS
    
DELETE   FROM  dbo.T_ROLES
    
    
PRINT  ( ' All data have been deleted! ' )
    
GO

我们的现在的目标是在Application中,如何得到这段Message。要做到这点很简单,只需要用到SqlConnectionInfoMessage事件,当通过DbCommand执行上面一段Sql的时候,Print语句的执行将出发该事件。我们现在要做的就是注册这个事件,比如下面我们在ExecuteCommand()种添加了下面一段代码:

SqlConnection sqlConnection  =  connection  as  SqlConnection;
 
if  (sqlConnection  !=   null )
    
{
          sqlConnection.InfoMessage 
+= delegate(object sender, SqlInfoMessageEventArgs e)
          
{
                        Console.WriteLine(e.Message);
           }
;
     }

 当我们调用Utility.Clear()的时候,就会输出"All data have been deleted!"



[原创]谈谈基于SQL Server的Exception Handling - PART I
[原创]谈谈基于SQL Server 的Exception Handling - PART II
[原创]谈谈基于SQL Server 的Exception Handling - PART III 

2025-09-23 14:14:58.177 [reactor-http-nio-2] DEBUG reactor.netty.http.server.HttpServerOperations - [812192b7, L:/192.168.10.122:9000 - R:/192.168.10.122:12766] New http connection, requesting read 2025-09-23 14:14:58.177 [reactor-http-nio-2] DEBUG reactor.netty.transport.TransportConfig - [812192b7, L:/192.168.10.122:9000 - R:/192.168.10.122:12766] Initialized pipeline DefaultChannelPipeline{(reactor.left.httpCodec = io.netty.handler.codec.http.HttpServerCodec), (reactor.left.httpTrafficHandler = reactor.netty.http.server.HttpTrafficHandler), (reactor.right.reactiveBridge = reactor.netty.channel.ChannelOperationsHandler)} 2025-09-23 14:14:58.240 [reactor-http-nio-2] DEBUG reactor.netty.http.server.HttpServerOperations - [812192b7, L:/192.168.10.122:9000 - R:/192.168.10.122:12766] Increasing pending responses, now 1 2025-09-23 14:14:58.280 [reactor-http-nio-2] DEBUG reactor.netty.http.server.HttpServer - [812192b7-1, L:/192.168.10.122:9000 - R:/192.168.10.122:12766] Handler is being applied: org.springframework.http.server.reactive.ReactorHttpHandlerAdapter@516cf1d9 2025-09-23 14:14:58.385 [reactor-http-nio-2] DEBUG o.s.web.server.adapter.HttpWebHandlerAdapter - [812192b7-1] HTTP POST "/master/shipperPart/listPartsWithStatus?supplierId=28&shipperId=3" 2025-09-23 14:14:58.440 [reactor-http-nio-2] DEBUG o.s.w.r.r.m.a.RequestMappingHandlerMapping - [812192b7-1] Mapped to com.hvlink.controller.ShipperPartController#listPartsWithStatus(Integer, Integer) 2025-09-23 14:14:58.558 [reactor-http-nio-2] DEBUG org.mybatis.spring.SqlSessionUtils - Creating a new SqlSession 2025-09-23 14:14:58.621 [reactor-http-nio-2] DEBUG org.mybatis.spring.SqlSessionUtils - SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@76b115c] was not registered for synchronization because synchronization is not active 2025-09-23 14:14:58.663 [reactor-http-nio-2] DEBUG o.springframework.jdbc.datasource.DataSourceUtils - Fetching JDBC Connection from DataSource 2025-09-23 14:14:58.664 [reactor-http-nio-2] DEBUG o.m.spring.transaction.SpringManagedTransaction - JDBC Connection [ConnectionID:1 ClientConnectionId: bd2cbe9a-b87f-4c42-9c85-577ad4546ee0] will not be managed by Spring 2025-09-23 14:14:58.678 [reactor-http-nio-2] DEBUG c.h.m.master.PartMapper.selectPartsWithBindStatus - ==> Preparing: SELECT p.id, p.part_code, p.part_desc, p.supplier_code, CASE WHEN sp.part_id IS NOT NULL THEN 1 ELSE 0 END AS assigned FROM tm_part p LEFT JOIN tm_shipper_part sp ON p.part_code = sp.part_id AND sp.shipper_id = ? WHERE p.supplier_code = ( SELECT supplier_code FROM tm_part WHERE id = ? ) ORDER BY p.part_code 2025-09-23 14:14:58.900 [reactor-http-nio-2] DEBUG c.h.m.master.PartMapper.selectPartsWithBindStatus - ==> Parameters: 3(Integer), 28(Integer) 2025-09-23 14:14:59.167 [reactor-http-nio-2] DEBUG org.mybatis.spring.SqlSessionUtils - Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@76b115c] 2025-09-23 14:14:59.248 [reactor-http-nio-2] DEBUG o.s.beans.factory.xml.XmlBeanDefinitionReader - Loaded 11 bean definitions from class path resource [org/springframework/jdbc/support/sql-error-codes.xml] 2025-09-23 14:14:59.248 [reactor-http-nio-2] DEBUG o.s.b.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'DB2' 2025-09-23 14:14:59.255 [reactor-http-nio-2] DEBUG o.s.b.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'Derby' 2025-09-23 14:14:59.257 [reactor-http-nio-2] DEBUG o.s.b.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'H2' 2025-09-23 14:14:59.257 [reactor-http-nio-2] DEBUG o.s.b.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'HDB' 2025-09-23 14:14:59.259 [reactor-http-nio-2] DEBUG o.s.b.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'HSQL' 2025-09-23 14:14:59.259 [reactor-http-nio-2] DEBUG o.s.b.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'Informix' 2025-09-23 14:14:59.260 [reactor-http-nio-2] DEBUG o.s.b.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'MS-SQL' 2025-09-23 14:14:59.260 [reactor-http-nio-2] DEBUG o.s.b.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'MySQL' 2025-09-23 14:14:59.260 [reactor-http-nio-2] DEBUG o.s.b.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'Oracle' 2025-09-23 14:14:59.260 [reactor-http-nio-2] DEBUG o.s.b.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'PostgreSQL' 2025-09-23 14:14:59.260 [reactor-http-nio-2] DEBUG o.s.b.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'Sybase' 2025-09-23 14:14:59.261 [reactor-http-nio-2] DEBUG o.s.jdbc.support.SQLErrorCodesFactory - Looking up default SQLErrorCodes for DataSource [com.hvlink.config.DataSourceConfig$1@eed890d] 2025-09-23 14:14:59.267 [reactor-http-nio-2] DEBUG o.springframework.jdbc.datasource.DataSourceUtils - Fetching JDBC Connection from DataSource 2025-09-23 14:14:59.270 [reactor-http-nio-2] DEBUG o.s.jdbc.support.SQLErrorCodesFactory - SQL error codes for 'Microsoft SQL Server' found 2025-09-23 14:14:59.270 [reactor-http-nio-2] DEBUG o.s.jdbc.support.SQLErrorCodesFactory - Caching SQL error codes for DataSource [com.hvlink.config.DataSourceConfig$1@eed890d]: database product name is 'Microsoft SQL Server' 2025-09-23 14:14:59.272 [reactor-http-nio-2] DEBUG o.s.j.support.SQLErrorCodeSQLExceptionTranslator - Unable to translate SQLException with Error code '245', will now try the fallback translator 2025-09-23 14:14:59.273 [reactor-http-nio-2] DEBUG o.s.jdbc.support.SQLStateSQLExceptionTranslator - Extracted SQL state class 'S0' from value 'S0001' 2025-09-23 14:14:59.307 [reactor-http-nio-2] ERROR com.hvlink.controller.ShipperPartController - 查询零件列表失败 supplierId:28, shipperId:3 org.springframework.jdbc.UncategorizedSQLException: ### Error querying database. Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 当前命令期间出错(完成状态 0)。在将 varchar 值 'P00118936101' 转换成数据类型 int 时失败。 ### The error may exist in file [D:\SHProjects\hv-link-backend\dao\target\classes\mapper\master\PartMapper.xml] ### The error may involve com.hvlink.mapper.master.PartMapper.selectPartsWithBindStatus ### The error occurred while handling results ### SQL: SELECT p.id, p.part_code, p.part_desc, p.supplier_code, CASE WHEN sp.part_id IS NOT NULL THEN 1 ELSE 0 END AS assigned FROM tm_part p LEFT JOIN tm_shipper_part sp ON p.part_code = sp.part_id AND sp.shipper_id = ? WHERE p.supplier_code = ( SELECT supplier_code FROM tm_part WHERE id = ? ) ORDER BY p.part_code ### Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 当前命令期间出错(完成状态 0)。在将 varchar 值 'P00118936101' 转换成数据类型 int 时失败。 ; uncategorized SQLException; SQL state [S0001]; error code [245]; 当前命令期间出错(完成状态 0)。在将 varchar 值 'P00118936101' 转换成数据类型 int 时失败。; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: 当前命令期间出错(完成状态 0)。在将 varchar 值 'P00118936101' 转换成数据类型 int 时失败。 at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:92) at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:441) at com.sun.proxy.$Proxy115.selectList(Unknown Source) at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:224) at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForMany(MybatisMapperMethod.java:166) at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:77) at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148) at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89) at com.sun.proxy.$Proxy127.selectPartsWithBindStatus(Unknown Source) at com.hvlink.service.impl.ShipperPartServiceImpl.listPartsWithStatus(ShipperPartServiceImpl.java:37) at com.hvlink.service.impl.ShipperPartServiceImpl$$FastClassBySpringCGLIB$$80781e7d.invoke(<generated>) at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) at org.springframework.aop.framework.CglibAopProxy.invokeMethod(CglibAopProxy.java:386) at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85) at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703) at com.hvlink.service.impl.ShipperPartServiceImpl$$EnhancerBySpringCGLIB$$eadee9b3.listPartsWithStatus(<generated>) at com.hvlink.controller.ShipperPartController.listPartsWithStatus(ShipperPartController.java:33) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.springframework.web.reactive.result.method.InvocableHandlerMethod.lambda$invoke$0(InvocableHandlerMethod.java:145) at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:125) at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onNext(FluxOnAssembly.java:539) at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1839) at reactor.core.publisher.MonoZip$ZipCoordinator.signal(MonoZip.java:258) at reactor.core.publisher.MonoZip$ZipInner.onNext(MonoZip.java:347) at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onNext(FluxOnAssembly.java:539) at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.onNext(MonoPeekTerminal.java:180) at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onNext(FluxOnAssembly.java:539) at reactor.core.publisher.FluxDefaultIfEmpty$DefaultIfEmptySubscriber.onNext(FluxDefaultIfEmpty.java:101) at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onNext(FluxOnAssembly.java:539) at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:74) at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onNext(FluxOnAssembly.java:539) at reactor.core.publisher.Operators$ScalarSubscription.request(Operators.java:2400) at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.request(FluxOnAssembly.java:649) at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.set(Operators.java:2196) at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.onSubscribe(Operators.java:2070) at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onSubscribe(FluxOnAssembly.java:633) at reactor.core.publisher.FluxFlatMap.trySubscribeScalarMap(FluxFlatMap.java:192) at reactor.core.publisher.MonoFlatMap.subscribeOrReturn(MonoFlatMap.java:53) at reactor.core.publisher.Mono.subscribe(Mono.java:4475) at reactor.core.publisher.MonoZip.subscribe(MonoZip.java:129) at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:53) at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:240) at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onComplete(MonoIgnoreThen.java:203) at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onComplete(FluxOnAssembly.java:549) at reactor.core.publisher.MonoFlatMap$FlatMapMain.onComplete(MonoFlatMap.java:181) at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onComplete(FluxOnAssembly.java:549) at reactor.core.publisher.Operators.complete(Operators.java:137) at reactor.core.publisher.MonoZip.subscribe(MonoZip.java:121) at reactor.core.publisher.Mono.subscribe(Mono.java:4490) at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:263) at reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:51) at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:157) at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onNext(FluxOnAssembly.java:539) at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:74) at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onNext(FluxOnAssembly.java:539) at reactor.core.publisher.MonoNext$NextSubscriber.onNext(MonoNext.java:82) at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onNext(FluxOnAssembly.java:539) at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.innerNext(FluxConcatMap.java:282) at reactor.core.publisher.FluxConcatMap$ConcatMapInner.onNext(FluxConcatMap.java:863) at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onNext(FluxOnAssembly.java:539) at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:129) at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onNext(FluxOnAssembly.java:539) at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.onNext(MonoPeekTerminal.java:180) at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onNext(FluxOnAssembly.java:539) at reactor.core.publisher.Operators$ScalarSubscription.request(Operators.java:2400) at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.request(FluxOnAssembly.java:649) at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.request(MonoPeekTerminal.java:139) at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.request(FluxOnAssembly.java:649) at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.request(FluxMapFuseable.java:171) at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.request(FluxOnAssembly.java:649) at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.set(Operators.java:2196) at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.onSubscribe(Operators.java:2070) at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onSubscribe(FluxOnAssembly.java:633) at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onSubscribe(FluxMapFuseable.java:96) at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onSubscribe(FluxOnAssembly.java:633) at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.onSubscribe(MonoPeekTerminal.java:152) at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onSubscribe(FluxOnAssembly.java:633) at reactor.core.publisher.MonoJust.subscribe(MonoJust.java:55) at reactor.core.publisher.Mono.subscribe(Mono.java:4490) at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.drain(FluxConcatMap.java:451) at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.onSubscribe(FluxConcatMap.java:219) at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onSubscribe(FluxOnAssembly.java:633) at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:201) at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:83) at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:53) at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:53) at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:53) at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:53) at reactor.core.publisher.Mono.subscribe(Mono.java:4490) at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:263) at reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:51) at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) at reactor.core.publisher.MonoDeferContextual.subscribe(MonoDeferContextual.java:55) at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) at reactor.netty.http.server.HttpServer$HttpServerHandle.onStateChange(HttpServer.java:1112) at reactor.netty.ReactorNetty$CompositeConnectionObserver.onStateChange(ReactorNetty.java:707) at reactor.netty.transport.ServerTransport$ChildObserver.onStateChange(ServerTransport.java:481) at reactor.netty.http.server.HttpServerOperations.onInboundNext(HttpServerOperations.java:626) at reactor.netty.channel.ChannelOperationsHandler.channelRead(ChannelOperationsHandler.java:114) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) at reactor.netty.http.server.HttpTrafficHandler.channelRead(HttpTrafficHandler.java:230) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:436) at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:346) at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:318) at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:251) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:788) at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724) at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650) at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) at java.lang.Thread.run(Thread.java:750) Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: 当前命令期间出错(完成状态 0)。在将 varchar 值 'P00118936101' 转换成数据类型 int 时失败。 at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:259) at com.microsoft.sqlserver.jdbc.SQLServerResultSet$FetchBuffer$FetchBufferTokenHandler.onDone(SQLServerResultSet.java:5456) at com.microsoft.sqlserver.jdbc.TDSParser.parse(tdsparser.java:103) at com.microsoft.sqlserver.jdbc.TDSParser.parse(tdsparser.java:42) at com.microsoft.sqlserver.jdbc.SQLServerResultSet$FetchBuffer.nextRow(SQLServerResultSet.java:5559) at com.microsoft.sqlserver.jdbc.SQLServerResultSet.fetchBufferNext(SQLServerResultSet.java:1821) at com.microsoft.sqlserver.jdbc.SQLServerResultSet.next(SQLServerResultSet.java:1079) at com.alibaba.druid.pool.DruidPooledResultSet.next(DruidPooledResultSet.java:56) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.ibatis.logging.jdbc.ResultSetLogger.invoke(ResultSetLogger.java:69) at com.sun.proxy.$Proxy229.next(Unknown Source) at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleRowValuesForSimpleResultMap(DefaultResultSetHandler.java:359) at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleRowValues(DefaultResultSetHandler.java:335) at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleResultSet(DefaultResultSetHandler.java:308) at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleResultSets(DefaultResultSetHandler.java:201) at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:65) at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:64) at com.sun.proxy.$Proxy226.query(Unknown Source) at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:63) at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325) at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156) at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:81) at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62) at com.sun.proxy.$Proxy225.query(Unknown Source) at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:151) at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:145) at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:427) ... 134 common frames omitted 2025-09-23 14:14:59.322 [reactor-http-nio-2] DEBUG o.s.w.r.r.m.annotation.ResponseBodyResultHandler - [812192b7-1] Using 'application/json' given [*/*] and supported [application/json, application/*+json, application/x-ndjson, text/event-stream] 2025-09-23 14:14:59.322 [reactor-http-nio-2] DEBUG o.s.w.r.r.m.annotation.ResponseBodyResultHandler - [812192b7-1] 0..1 [com.hvlink.common.Result<java.util.List<com.hvlink.entity.vo.master.PartVO>>] 2025-09-23 14:14:59.377 [reactor-http-nio-2] DEBUG o.s.http.codec.json.Jackson2JsonEncoder - [812192b7-1] Encoding [Result(status=500, msg=查询失败, data=null, timestamp=1758608099315)] 2025-09-23 14:14:59.458 [reactor-http-nio-2] DEBUG reactor.netty.http.server.HttpServerOperations - [812192b7-1, L:/192.168.10.122:9000 - R:/192.168.10.122:12766] Decreasing pending responses, now 0 2025-09-23 14:14:59.459 [reactor-http-nio-2] DEBUG reactor.netty.http.server.HttpServerOperations - [812192b7-1, L:/192.168.10.122:9000 - R:/192.168.10.122:12766] Last HTTP packet was sent, terminating the channel 2025-09-23 14:14:59.459 [reactor-http-nio-2] DEBUG reactor.netty.channel.ChannelOperations - [812192b7-1, L:/192.168.10.122:9000 - R:/192.168.10.122:12766] [HttpServer] Channel inbound receiver cancelled (operation cancelled). 2025-09-23 14:14:59.481 [reactor-http-nio-2] DEBUG o.s.web.server.adapter.HttpWebHandlerAdapter - [812192b7-1] Completed 200 OK 2025-09-23 14:14:59.487 [reactor-http-nio-2] DEBUG reactor.netty.http.server.HttpServerOperations - [812192b7-1, L:/192.168.10.122:9000 - R:/192.168.10.122:12766] Last HTTP response frame
最新发布
09-24
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值