調用ssis包實現Sql Server的資料匯入功能網上已經有很多人討論過,自己參考後也動手實現了一下,上一次筆者的項目中還用了一下這個功能。思前想後,決定還是貼一下增強記憶,高手請54.
1、直接調用ssis包,需要引用Microsoft.SqlServer.DTSRuntimeWrap.dll,用戶端需要安裝MS SQL Server2005的用戶端組件。
2、調用代碼
代碼
/// <summary>
/// /通過SSIS包 將資料匯入資料庫
/// </summary>
/// <param name="dtsxFileName">dtsx檔案名稱</param>
/// <param name="csvFileName">csv檔案名稱</param>
/// <returns></returns>
protected bool FillData2DB(string dtsxFileName, string csvFileName)
{
string dtsxFile = System.AppDomain.CurrentDomain.BaseDirectory + "DTSX\\" + dtsxFileName;
Microsoft.SqlServer.Dts.Runtime.Wrapper.Application app = new Microsoft.SqlServer.Dts.Runtime.Wrapper.Application();
//Call the dtsx file
IDTSPackage90 package = app.LoadPackage(dtsxFile, true, null); //另外還有一種方法叫LoadFromSQLServer
package.Connections["File"].ConnectionString = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, csvFileName);
package.Connections["本地串連"].ConnectionString = ConfigurationSettings.AppSettings["ConnStr"];
DTSExecResult result = package.Execute();
//擷取包的執行資訊
//string message = string.Empty;
//if (result.Equals(DTSExecResult.DTSER_FAILURE))
//{
// for (int i = 0; i < package.Errors.Count; i++)
// {
// message += package.Errors[i].Description;
// }
//}
//if (!string.IsNullOrEmpty(message))
//{
// throw new Exception(message); //拋出異常
//}
if (result.Equals(DTSExecResult.DTSER_SUCCESS))
return true;
else
return false;
}
需要的配置節如下:
代碼
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="ConnStr" value="Data Source=10.10.**.***;User ID=adminTest;Password=***;Initial Catalog=TestDb;Provider=SQLNCLI.1;Persist Security Info=True;"/>
</appSettings>
</configuration>
注意:方法中需要用到dtsx模板和csv檔案,csv檔案的簡單產生可以參考這一篇,而dtsx模板製作是重中之中,自己菜鳥一枚,沒有發言權,您可以參考網上資源。
最後,弱弱地問一下,這個算不算傳說中的抄襲剽竊啊?非原創,非原創......默念一百遍,