當我們需要把設計好的報表發布到Web服務器上時,如果用VS2005只需要 右擊報表工程,單擊Deploy就可輕松搞定,如果不用VS2005發布,該怎么辦?
解決辦法有2種。
1.引用 sqlserver2005 的web服務。根據他提供的方法發布報表
2.用sqlserver2005 的rs.exe 命名發布。
我這里介紹的是根據 rs.exe這個命令來自動發布報表的。腳本已經寫好,直接Copy 稍微的改動一下即可!
1.現看看rs.exe參數 都代表什么
?
RUN?--CMD
C:\Documents?and?Settings\junmy>rs?/?
Microsoft?(R)?Reporting?Services?RS
版本?9.00.1399.00?x86
根據指定的報表服務器執行腳本文件內容。
RS?-i?輸入文件?-s?serverURL?[-u?用戶名]?[-p?密碼]
???[-l?超時]?[-b]?[-e?端點]?[-v?var=value]?[-t]
????????-i??輸入文件????要執行的腳本文件
????????-s??serverURL???執行腳本
????????????????????????所依據的?URL?(包括服務器和?vroot)。
????????-u??用戶名??????用于登錄到服務器中的用戶名。
????????-p??密碼????????用于登錄到服務器中的密碼。
????????-e??端點????????要與腳本一起使用的?Web?服務端點。
????????????????????????選項為:
????????????????????????Exec2005?-?ReportExecution2005?端點
????????????????????????Mgmt2005?-?ReportService2005?端點
????????????????????????Mgmt2000?-?(不推薦使用)?ReportService?端點
????????-l??超時????????連接到服務器之前
????????????????????????超時的秒數。默認值為?60?秒,0?表示
????????????????????????無限長的超時。
????????-b??????????????作為批進行運行,且如果命令失敗則回滾
????????-v??var=value???傳遞給腳本的變量和值
????????-t??跟蹤????????在錯誤消息中包含跟蹤信息
C:\Documents?and?Settings\junmy>
?
2.拷貝下面腳本保存deployReport.rss 相應路徑根據自己的情況改動.
Dim?definition?As?[Byte]()?=?Nothing
Dim?warnings?As?Warning()?=?Nothing
'目錄名
Dim?datasourceFolderName?As?String?=?"Data?Sources"
Dim?datasourceFolderPath?As?String?=?"/"?+?datasourceFolderName
'報表目錄名??所有發布的報表放在此目錄
Dim?reportsFolderName?As?String?=?"testDeployReports"
Dim?reportsFolderPath?As?String?=?"/"?+?reportsFolderName
'設計好的報表?存放的路徑
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
????'創建報表目錄
????CreateReportFolder(reportsFolderName)
????'創建DataSource?目錄
????CreateReportFolder(datasourceFolderName)
????'創建數據源
????CreateDataSource(datasourceFolderPath)
???
????'部署報表
????DeployRepors(filePath)
End?Sub
'創建目錄
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
'部署報表
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
'******************************************************************
'*****???????????創建數據源???????????????????????????**************
'*******************************************************************
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
'******************************************************
'*******?發布報表?*********
'*******************************************************
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
'************************************************************************
'*************?設置報表數據源??????**************************************
'************************************************************************
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 批處理文件 運行上面腳本。用到剛剛說的 rs.exe命名 (相應參數上面已經給出)
deploy.bat 內容
rs?-i?deploy.rss?-s?http://192.168.0.88/ReportServer?-u?userName?-p?password
?雙擊運行deploy.bat 報表將自動發布到
http://192.168.0.88/ReportServer 服務器上。。
@author?
junmy