欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

ole db 访问接口 "microsoft.ace.oledb.12.0" 不支持所需的事宜接口

更新时间: 2014-01-05 02:18:16 责任编辑: Author_N1

 

OLE DB 访问接口 "Microsoft.ACE.OLEDB.12.0" 不支持所需的事务接口
我将代码一段一段的执行 效果不错,拼成一个存储过程出事了,然后我又做成了动态的存储过程还是有问题,问题是 服务器 'CHENG-PC' 上的 MSDTC 不可用。 然后我到服务里把Distributed Transaction Coordinator 打开了,并且 开启 net start msdtc  ,然后问题就变成了无法执行请求的操作,因为链接服务器 "(null)" 的 OLE DB 访问接口 "Microsoft.ACE.OLEDB.12.0" 不支持所需的事务接口。

源代码如下
create proc proc_downexcel  @classno char(7) , @courseno char(8)
as
begin transaction
declare @sql char(max)
insert into temp1(Sno ,Sname,Cno ,Cname,mark,classno)
select 学号,姓名,课程号,课程名,成绩,班级号
from  view_S_C_T sct 
where sct.课程号=@courseno and sct.班级号=@classno 
 
insert into OPENROWSET('Microsoft.ACE.OLEDB.12.0','Excel 12.0;Database=e:\20131218.xlsx','select sno,sname,cno,cname,mark FROM [sheet1$]') 
select sno,sname,cno,cname,mark 
from temp1
where temp1.cno=@courseno and temp1.classno= @classno

delete from temp1
where temp1.cno=@courseno and temp1.classno=@classno
commit transaction





用动态SQL如下
set @sql='openrowset(''Microsoft.ACE.OLEDB.12.0'',''Excel 12.0;DATABASE='+@path+''' ,'' select sno,sname,cno,cname,mark FROM [sheet1$]'')'
exec('insert into '+@sql+'  select sno,sname,cno,cname,mark from temp1 where temp1.cno='+@courseno+'  and  temp1.classno='+@classno+' ')


求帮解决 急死了
--参考方法--
动态语句,执行会报错吗?
--参考方法--
SSMS-->Server Objects-->Linked Servers-->Providers-->Microsoft.ACE.OLEDB.12.0
-->右键-->属性-->勾选所有选项后试试.


--参考方法--
问题是出在“begin transaction”,以下这句是不支持使用事务的:

insert into OPENROWSET('Microsoft.ACE.OLEDB.12.0','Excel 12.0;Database=e:\20131218.xlsx','select sno,sname,cno,cname,mark FROM [sheet1$]') 
select sno,sname,cno,cname,mark 
from temp1
where temp1.cno=@courseno and temp1.classno= @classno

不知道各位大神们有没有解决方法?

--参考方法--

--存储过程改为以下肯定可以执行(也就是不使用事务):
create proc proc_downexcel  @classno char(7) , @courseno char(8)
as
begin
declare @sql char(max)
insert into temp1(Sno ,Sname,Cno ,Cname,mark,classno)
select 学号,姓名,课程号,课程名,成绩,班级号
from  view_S_C_T sct 
where sct.课程号=@courseno and sct.班级号=@classno 
 
insert into OPENROWSET('Microsoft.ACE.OLEDB.12.0','Excel 12.0;Database=e:\20131218.xlsx','select sno,sname,cno,cname,mark FROM [sheet1$]') 
select sno,sname,cno,cname,mark 
from temp1
where temp1.cno=@courseno and temp1.classno= @classno

delete from temp1
where temp1.cno=@courseno and temp1.classno=@classno
end
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:18:16
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/8269/
本文WWW.DOC100.NET DOC100.NET版权所有。