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