SqlServer 2005 報(bào)表自動(dòng)部署
當(dāng)我們需要把設(shè)計(jì)好的報(bào)表發(fā)布到Web服務(wù)器上時(shí),如果用VS2005只需要 右擊報(bào)表工程,單擊Deploy就可輕松搞定,如果不用VS2005發(fā)布,該怎么辦?
解決辦法有2種。
1.引用 sqlserver2005 的web服務(wù)。根據(jù)他提供的方法發(fā)布報(bào)表
2.用sqlserver2005 的rs.exe 命名發(fā)布。
我這里介紹的是根據(jù) rs.exe這個(gè)命令來自動(dòng)發(fā)布報(bào)表的。腳本已經(jīng)寫好,直接Copy 稍微的改動(dòng)一下即可!
1.現(xiàn)看看rs.exe參數(shù) 都代表什么
?
RUN?--CMD
C:\Documents?and?Settings\junmy>rs?/?
Microsoft?(R)?Reporting?Services?RS
版本?9.00.1399.00?x86
根據(jù)指定的報(bào)表服務(wù)器執(zhí)行腳本文件內(nèi)容。
RS?-i?輸入文件?-s?serverURL?[-u?用戶名]?[-p?密碼]
???[-l?超時(shí)]?[-b]?[-e?端點(diǎn)]?[-v?var=value]?[-t]
????????-i??輸入文件????要執(zhí)行的腳本文件
????????-s??serverURL???執(zhí)行腳本
????????????????????????所依據(jù)的?URL?(包括服務(wù)器和?vroot)。
????????-u??用戶名??????用于登錄到服務(wù)器中的用戶名。
????????-p??密碼????????用于登錄到服務(wù)器中的密碼。
????????-e??端點(diǎn)????????要與腳本一起使用的?Web?服務(wù)端點(diǎn)。
????????????????????????選項(xiàng)為:
????????????????????????Exec2005?-?ReportExecution2005?端點(diǎn)
????????????????????????Mgmt2005?-?ReportService2005?端點(diǎn)
????????????????????????Mgmt2000?-?(不推薦使用)?ReportService?端點(diǎn)
????????-l??超時(shí)????????連接到服務(wù)器之前
????????????????????????超時(shí)的秒數(shù)。默認(rèn)值為?60?秒,0?表示
????????????????????????無限長的超時(shí)。
????????-b??????????????作為批進(jìn)行運(yùn)行,且如果命令失敗則回滾
????????-v??var=value???傳遞給腳本的變量和值
????????-t??跟蹤????????在錯(cuò)誤消息中包含跟蹤信息
C:\Documents?and?Settings\junmy>
?C:\Documents?and?Settings\junmy>rs?/?
Microsoft?(R)?Reporting?Services?RS
版本?9.00.1399.00?x86
根據(jù)指定的報(bào)表服務(wù)器執(zhí)行腳本文件內(nèi)容。
RS?-i?輸入文件?-s?serverURL?[-u?用戶名]?[-p?密碼]
???[-l?超時(shí)]?[-b]?[-e?端點(diǎn)]?[-v?var=value]?[-t]
????????-i??輸入文件????要執(zhí)行的腳本文件
????????-s??serverURL???執(zhí)行腳本
????????????????????????所依據(jù)的?URL?(包括服務(wù)器和?vroot)。
????????-u??用戶名??????用于登錄到服務(wù)器中的用戶名。
????????-p??密碼????????用于登錄到服務(wù)器中的密碼。
????????-e??端點(diǎn)????????要與腳本一起使用的?Web?服務(wù)端點(diǎn)。
????????????????????????選項(xiàng)為:
????????????????????????Exec2005?-?ReportExecution2005?端點(diǎn)
????????????????????????Mgmt2005?-?ReportService2005?端點(diǎn)
????????????????????????Mgmt2000?-?(不推薦使用)?ReportService?端點(diǎn)
????????-l??超時(shí)????????連接到服務(wù)器之前
????????????????????????超時(shí)的秒數(shù)。默認(rèn)值為?60?秒,0?表示
????????????????????????無限長的超時(shí)。
????????-b??????????????作為批進(jìn)行運(yùn)行,且如果命令失敗則回滾
????????-v??var=value???傳遞給腳本的變量和值
????????-t??跟蹤????????在錯(cuò)誤消息中包含跟蹤信息
C:\Documents?and?Settings\junmy>
2.拷貝下面腳本保存deployReport.rss 相應(yīng)路徑根據(jù)自己的情況改動(dòng).
Dim?definition?As?[Byte]()?=?Nothing
Dim?warnings?As?Warning()?=?Nothing
'目錄名
Dim?datasourceFolderName?As?String?=?"Data?Sources"
Dim?datasourceFolderPath?As?String?=?"/"?+?datasourceFolderName
'報(bào)表目錄名??所有發(fā)布的報(bào)表放在此目錄
Dim?reportsFolderName?As?String?=?"testDeployReports"
Dim?reportsFolderPath?As?String?=?"/"?+?reportsFolderName
'設(shè)計(jì)好的報(bào)表?存放的路徑
Dim?filePath?As?String?=?"D:\Project\Reports\"
'鏈接字符串
Dim?connectionString?As?String?=?"Data?Source=localhost;Initial?Catalog=DataBaseName;Connect?Timeout=120"
???
Public?Sub?Main()
????rs.Credentials?=?System.Net.CredentialCache.DefaultCredentials
????'創(chuàng)建報(bào)表目錄
????CreateReportFolder(reportsFolderName)
????'創(chuàng)建DataSource?目錄
????CreateReportFolder(datasourceFolderName)
????'創(chuàng)建數(shù)據(jù)源
????CreateDataSource(datasourceFolderPath)
???
????'部署報(bào)表
????DeployRepors(filePath)
End?Sub
'創(chuàng)建目錄
Public?Sub?CreateReportFolder(ByVal?reportFolder?As?String)
????Try
????????'Create?Reports?Folder
????????rs.CreateFolder(reportFolder,"/",Nothing)
???????
????????Console.WriteLine("Parent?Folder?Created:{0}",reportFolder)
????Catch?e?As?Exception
????????Console.WriteLine(e.Message)
????End?Try
End?Sub
'部署報(bào)表
Public?Sub?DeployRepors(ByVal?filePath?As?String)
????Dim?tempFileAry?As?String()
????Dim?reportFilePath?as?String
????tempFileAry?=?Directory.GetFiles(filepath)
????For?Each?reportFilePath?In?tempFileAry
????????Dim?fileName?As?String
????????fileName?=?reportFilePath.Substring(reportFilePath.LastIndexOf("\")?+?1)
????????Dim?fileSuffix?As?String
????????fileSuffix?=?fileName.Substring(fileName.LastIndexOf(".")?+?1)
????????Select?Case?fileSuffix
????????????Case?"rdl","png"
????????????????PublishReport(fileName,fileSuffix)
????????End?Select
????Next
End?Sub
'******************************************************************
'*****???????????創(chuàng)建數(shù)據(jù)源???????????????????????????**************
'*******************************************************************
Public?Sub?CreateDataSource(ByVal?sourceFolder?As?String)
????Dim?name?As?String?=?"DetechtionCompany"
???'Define?the?data?source?definition.
????Dim?definition?As?New?DataSourceDefinition()
????Dim?dSource?As?New?DataSource()
???
????dsource.Item=definition
???
????definition.CredentialRetrieval?=?CredentialRetrievalEnum.Integrated
????definition.ConnectString?=connectionString
????definition.Enabled?=?True
????definition.EnabledSpecified?=?True
????definition.Extension?=?"SQL"
????definition.ImpersonateUser?=?False
????definition.ImpersonateUserSpecified?=?True
????'Use?the?default?prompt?string.
????definition.Prompt?=?Nothing
????definition.WindowsCredentials?=?true
???
????dsource.Name=datasourceFolderPath
????Try
???????
????????rs.CreateDataSource(name,?sourceFolder,?true,?definition,?Nothing)
????????????Console.WriteLine("Created?DataSource:{0}",name)
????Catch?e?As?Exception
????????Console.WriteLine(e.Message)
????End?Try
End?Sub
'******************************************************
'*******?發(fā)布報(bào)表?*********
'*******************************************************
Public?Sub?PublishReport(ByVal?reportName?As?String,ByVal?fileSuffix?As?String)
?????
????Try
????????Dim?stream?As?FileStream?=?File.OpenRead(filePath?+?reportName)
????????definition=?New?[Byte](stream.Length)?{}
????????stream.Read(definition,?0,?CInt(stream.Length))
????????stream.Close()
????Catch?e?As?IOException
????????Console.WriteLine(e.Message)
????End?Try
????Try
??????'**********************???parentPath
??????If(fileSuffix="rdl")?Then
????????warnings?=?rs.CreateReport(reportName,reportsFolderPath,?true,?definition,?Nothing)
?????????SetReportDataSourceRef(reportName)
????????
????????Else?If(fileSuffix="png")?Then
????????????????rs.CreateResource(reportName,reportsFolderPath,true,definition,"png",Nothing)?
??????End?If
????????If?Not?(warnings?Is?Nothing)?Then
????????????Dim?warning?As?Warning
????????????For?Each?warning?In?warnings
????????????????Console.WriteLine(warning.Message)
????????????Next?warning
????????Else
????????????Console.WriteLine("Report:?{0}?published?successfully?with?no?warnings",?reportName)
????????End?If
????Catch?e?As?Exception
????????Console.WriteLine(e.Message)
????End?Try
End?Sub
'************************************************************************
'*************?設(shè)置報(bào)表數(shù)據(jù)源??????**************************************
'************************************************************************
Public?Sub?SetReportDataSourceRef(ByVal?reportName?As?String)
Try
??????Dim?reference?As?DataSourceReference?=?New?DataSourceReference
??????Dim?ds?As?DataSource?=?New?DataSource
??????reference.Reference=datasourceFolderPath+"/DetechtionCompany"
???????Dim?dsArray?As?DataSource()=rs.GetItemDataSources(reportsFolderPath+"/"+reportName)
??????
??????ds=dsArray(0)
???????ds.Item?=?CType(reference,?DataSourceReference)
??????rs.SetItemDataSources(reportsFolderPath+"/"+reportName,dsArray)
?????
Catch?_exception?As?Exception
?????Console.WriteLine(_exception)
?End?Try
End?Sub
3. 新建deploy.dat 批處理文件 運(yùn)行上面腳本。用到剛剛說的 rs.exe命名 (相應(yīng)參數(shù)上面已經(jīng)給出)
deploy.bat 內(nèi)容
rs?-i?deploy.rss?-s?http://192.168.0.88/ReportServer?-u?userName?-p?password
?雙擊運(yùn)行deploy.bat 報(bào)表將自動(dòng)發(fā)布到http://192.168.0.88/ReportServer 服務(wù)器上。。
@author? junmy
posted on 2006-11-27 13:24 record java and net 閱讀(1173) 評論(0) 編輯 收藏 所屬分類: dot net相關(guān) 、Database