1

我使用 Microsoft.ACE.OLEDB.12.0 将 Excel 文件转换为数据库,我收到此错误:

无法为 OLE DB 提供程序启动事务

链接服务器“(null)”的“Microsoft.ACE.OLEDB.12.0”。链接服务器“(null)”的 OLE DB 提供程序“Microsoft.ACE.OLEDB.12.0”返回消息“既不支持隔离级别也不支持加强隔离级别

当我在服务器上运行探查器时,我看到这些命令运行:

declare @p7 int
set @p7=NULL

exec sp_executesql N'EXEC @RETURN_VALUE = [dbo].[SYSMain_ExcelImport] 
@ExcelPath  =  @p0, @StoredProcedure = @p1, @SheetName = @p2,
@DoneByPersonID = @p3',N'@p0 nvarchar(4000),@p1 nvarchar(4000),@p2 nvarchar(4000),
@p3 int,@RETURN_VALUE int output',
@p0=N'
E:\TolueCRM\TolueCRM\upload  \SYSMain_ExcelReadyForImport 57\3.xlsx'
,@p1=N'SYSMain_Excel_SendigRecievingDebitCustomer',
@p2=N'sheet1',@p3=101,@RETURN_VALUE=@p7 output
select @p7

当我直接在 Management Studio 中运行它时,我没有收到任何错误,并且可以正常工作。

然后探查器显示此命令:

exec sp_reset_connection 

然后 :

-- network protocol: LPC
set quoted_identifier on
set arithabort off
set numeric_roundabort off
set ansi_warnings on
set ansi_padding on
set ansi_nulls on
set concat_null_yields_null on
set cursor_close_on_commit off
set implicit_transactions off
set language us_english
set dateformat mdy
set datefirst 7
set transaction isolation level serializable

我猜隔离级别可序列化的设置会导致此错误,最后:错误消息已创建:

declare @p8 int
set @p8=1
exec sp_executesql 
N'EXEC @RETURN_VALUE = [dbo].[SYSMainSproc_EntitiesAllField_Update] 
@ID = @p0,   @IDVAlue = @p1, @Entity = @p2, @strset = @p3,
@DoneByPersonID = @p4',N'@p0 nvarchar(4000),@p1 int,@p2 nvarchar(4000)
,@p3 nvarchar(4000),@p4 int,
@RETURN_VALUE int   output',
@p0=N'SYSMain_ExcelReadyForImportID',
@p1=57,@p2=N'SYSMain_ExcelReadyForImport',
@p3=N' Description=
N''Cannot start a transaction for OLE DB provider
"Microsoft.ACE.OLEDB.12.0" for   linked server "(null)".
OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" 
returned message   
"Neither the isolation level nor a strengthening of it is    supported.".''',
@p4=101,@RETURN_VALUE=@p8 output
select @p8 

我猜提供者不能在可序列化隔离级别下工作,但我不知道哪个部分将隔离级别设置为可序列化。

让我补充一点:这个错误有时不会发生!当我通过应用程序转换工作正常!

在此先感谢您的帮助

4

0 回答 0