我下面的存储过程本来是好使的
我执行此存储过程是这样的,在上点右键,出框,因为它需要一个文件名作参数,我输入“C:\DiBao\2009年12月发放.XLS”
这样执行是正常的
但是我运行几回后出错信息如下:
消息 7399,级别 16,状态 1,第 1 行
链接服务器 "(null)" 的 OLE DB 访问接口 "Microsoft.Jet.OLEDB.4.0" 报错。访问被拒绝。
消息 7301,级别 16,状态 2,第 1 行
无法从链接服务器 "(null)" 的 OLE DB 访问接口 "Microsoft.Jet.OLEDB.4.0" 获取所需的接口("IID_IDBCreateCommand")。
并且这时出现一个怪现象,“C:\DiBao\2009年12月发放.XLS”文件不能删也不能改名,就连我退出SSNS也不能。
我结束了进程中的dllhost.exe,就能删和改了。一定是文件被这进程使用了。
在网上找了,有人让考以下几个问题:
1、文件是不是加密码了
2、xls要关闭,不能打开
3、是否允许OPENDATASOURCE 支持
4、你是2005 还是2000?
这些都没关系啊,我什么也没动啊,原来好使,一会儿就不好使了啊
请大侠说说是怎么办?一开始好使怎么后来不好使了呢。
请大家不要想太远,我系统中什么也没动,不是什么Excel版本问题等。
出问题的存储过程如下:
ALTER PROCEDURE [dbo].[ffmx]
@FileName char(500) --C:\DiBao\2009年12月发放.XLS
AS
BEGIN
declare @s nvarchar(max)
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
truncate table SJ_DB_FFMX
select * from SJ_DB_FFMX
set @s='insert SJ_DB_FFMX SELECT [行政区划代码],[家庭编号],[户主姓名],'
set @[email protected]+'[户主身份证号],[低保证号],[银行帐号],[发放时间]=convert(varchar(6),cast([发放时间] as datetime),112),'
set @[email protected]+'[低保金],[其他补贴金额] '
set @[email protected]+'FROM OpenDataSource( ''Microsoft.Jet.OLEDB.4.0'','
set @[email protected]+'''Data [email protected]+';User ID=Admin;Password=;Extended properties=Excel 5.0'') ...[sheet1$]'
execute(@s)
select * from SJ_DB_FFMX
END
------解决方案--------------------
- SQL code
--从官方示例来看你的文件名左右缺少双引号This example accesses data from a table on another instance of SQL Server.SELECT *FROM OPENDATASOURCE( 'SQLOLEDB', 'Data Source=ServerName;User ID=MyUID;Password=MyPass' ).Northwind.dbo.CategoriesThis is an example of a query against an Excel spreadsheet through the OLE DB provider for Jet.SELECT * FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 'Data Source="c:\Finance\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions