SQL Server 阻止了对组件“Ad Hoc Distributed Queries”的 STATEMENT“OpenRowset/OpenDatasource”的访问

67 篇文章 0 订阅
18 篇文章 0 订阅

这些天一直在做.net导入导出Excel的程序。在这里写一下过程和遇到的问题。

一 》excel导入:excel导入有多种方式,我这里用到的是sqlserver的组件'Ad Hoc Distributed Queries,具体的执行语句:select *  FROM OpenDataSource ('Microsoft.Jet.OLEDB.4.0','Data Source="c:\\2012.xls"; User ID=;Password=; Extended properties=Excel 5.0')...[Sheet$]。只需要执行上面语句,就可以把excel数据导入系统,我这里的excel的结构是固定的,所以不想要太多的判断。

执行时遇到异常:“SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT 'OpenRowset/OpenDatasource' 的访问,因为此组件已作为此服务器安全配的       一 部分而被关闭。系统管理员可以通过使用 sp_configure 启用 'Ad Hoc Distributed Queries'。有关启用 'Ad Hoc Distributed Queries' 的详细信息,请参阅 SQL Server 联机丛书中的 "外围应用配置器"。”

解决办法:  --启用Ad Hoc Distributed Queries:新建查询,输入
      exec sp_configure 'show advanced options',1
      reconfigure
      exec sp_configure 'Ad Hoc Distributed Queries',1
       reconfigure
 --使用完成后,关闭Ad Hoc Distributed Queries:
      exec sp_configure 'Ad Hoc Distributed Queries',0
      reconfigure
      exec sp_configure 'show advanced options',0
      reconfigure 

二 》excel导出:我这里用到的是bcp的导出功能,

       /// <summary>
        /// 根据sql语句导出excel数据
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="txtFile"></param>
        /// <returns></returns>
        public static string  BaseDataOut( string sql, string txtFile)
        {
            string result = "导出成功!";
            try
            {
                string filePath = txtFile + @"c:\test.xls"; 
                
                // 导出文件
                ProcessStartInfo info = new ProcessStartInfo();
                info.FileName = "bcp.exe";
                string s = @" "" " + sql + @" "" queryout """ + filePath + @"""  -c -t -S  """ + ConfigurationSettings.AppSettings["server"].Trim() + @""" -U  """ + ConfigurationSettings.AppSettings["user"].Trim() + @""" -P """ + ConfigurationSettings.AppSettings["password"] + @"""";
                string d = s;
                string c =  @" ""  select top 1  * from  test.dbo.TWMJYZBA  "" queryout ""c:\t2.xls"" -c -q -S ""."" -U ""sa"" -P ""szbti@123""  ";
                string f = c;
                info.Arguments = @" "" " + sql + @" "" queryout """ + filePath + @"""  -c -t -S  """ + ConfigurationSettings.AppSettings["server"].Trim() + @""" -U  """ + ConfigurationSettings.AppSettings["user"].Trim() + @""" -P """ +  ConfigurationSettings.AppSettings["password"]+@""""; //@" ""  select top 1  * from  test.dbo.T_WMJYZBA  "" queryout ""c:\t2.xls"" -c -q -S ""."" -U ""sa"" -P ""szbti@123""  "; 
                info.WindowStyle = ProcessWindowStyle.Hidden;
                Process proc = Process.Start(info);
                proc.WaitForExit();
            }
            catch  (Exception ex){
                result = "导出出错,请联系管理员!";
            }
            return result;
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值