.net導入Excel數據遇到問題(SQL Server 阻止了對組件 'Ad Hoc Distributed Queries' 的 STATEMENT 'OpenRowset/OpenDataso) .


這些天一直在做.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;
        }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM