写一个在程序中创建dts包,实现数据用dts导入到sql的类

来源:互联网 发布:投标书制作软件 编辑:程序博客网 时间:2024/04/30 07:07

using System;
using System.Data;
using System.Data.SqlClient;

namespace Import
{
/// <summary>
/// 导入学生中考成绩DTS包
/// </summary>
public class ImportStuGrade
{
   //DTS包对象
   public DTS.Package2Class goPackage = new DTS.Package2Class();
   //要导入的文件路径
   private string strFilePath;
   //机构ID
   private string strOrgID;
   //SQL服务器地址
   private string strSQLPath;
   //SQL登录用户名
   private string strSQLUserID;
   //SQL登录密码
   private string strSQLPassword;
   //SQL数据库名
   private string strDataBaseName;
   //表对应关系ID
   private string strRelationID;
   //要导入的表名
   private string strSourceTableName;
  
   /// <summary>
   /// 要导入的文件路径
   /// </summary>
   public string FilePath
   {
    get
    {
     return strFilePath;
    }

    set
    {
     strFilePath = value;
    }
   }
  
   /// <summary>
   /// //机构ID
   /// </summary>
   public string OrgID
   {
    get
    {
     return strOrgID;
    }

    set
    {
     strOrgID = value;
    }
   }
  
   /// <summary>
   /// SQL服务器地址
   /// </summary>
   public string SQLPath
   {
    get
    {
     return strSQLPath;
    }

    set
    {
     strSQLPath = value;
    }
   }
  
   /// <summary>
   /// SQL登录用户名
   /// </summary>
   public string SQLUserID
   {
    get
    {
     return strSQLUserID;
    }

    set
    {
     strSQLUserID = value;
    }
   }
  
   /// <summary>
   /// SQL登录密码
   /// </summary>
   public string SQLPassword
   {
    get
    {
     return strSQLPassword;
    }

    set
    {
     strSQLPassword = value;
    }
   }

   /// <summary>
   /// SQL数据库名
   /// </summary>
   public string DataBaseName
   {
    get
    {
     return strDataBaseName;
    }

    set
    {
     strDataBaseName = value;
    }
   }
  
   /// <summary>
   /// 表对应关系ID
   /// </summary>
   public string RelationID
   {
    get
    {
     return strRelationID;
    }

    set
    {
     strRelationID = value;
    }
   }
  
   /// <summary>
   /// 要导入的源表名
   /// </summary>
   public string SourceTableName
   {
    get
    {
     return strSourceTableName;
    }

    set
    {
     strSourceTableName = value;
    }
   }
  
  
   public ImportStuGrade()
   {
    //
    // TODO: 在此处添加构造函数逻辑
    //
   }

   /// <summary>
   /// 导入学生中考信息
   /// </summary>
   public void ImportStuGradeToDB()
   {
    try
    {
     //设置包属性
     goPackage.Name = "ImportStuGradeToDB";               
     goPackage.Description = "导入中考成绩信息DTS包";
     goPackage.WriteCompletionStatusToNTEventLog = false;
     goPackage.FailOnError = true;
   
     goPackage.PackagePriorityClass = (DTS.DTSPackagePriorityClass)2;
     goPackage.MaxConcurrentSteps = 4;
     goPackage.LineageOptions = 0;
     goPackage.UseTransaction = true;
  
     goPackage.TransactionIsolationLevel = (DTS.DTSIsolationLevel)4096;
     goPackage.AutoCommitTransaction = true;
     goPackage.RepositoryMetadataOptions = 0;
     goPackage.UseOLEDBServiceComponents = true;
     goPackage.LogToSQLServer = false;
     goPackage.LogServerFlags = 0;
     goPackage.FailPackageOnLogFailure = false;
     goPackage.ExplicitGlobalVariables = false;
     goPackage.PackageType = 0;
    
     //创建连接用户数据文件的连接
     DTS.Connection2 oConnection;
    
     //截取文件名后缀名
     string strFileFix;
     strFileFix = this.strFilePath.Substring(this.strFilePath.Length-3);
     strFileFix = strFileFix.ToUpper();
     oConnection = null;
     //根据文件后缀名判断文件类型,并根据文件类型来定义连接的类型
     if (strFileFix == "MDB")
     {
      oConnection = (DTS.Connection2)goPackage.Connections.New("Microsoft.Jet.OLEDB.4.0");
      oConnection.ConnectionProperties.Item("Mode").Value = 1;
     }
     else if ( strFileFix == "XLS" )
     {
      oConnection = (DTS.Connection2)goPackage.Connections.New("Microsoft.Jet.OLEDB.4.0");
      oConnection.ConnectionProperties.Item("Extended Properties").Value = "Excel 8.0;HDR=YES;";
     }
     else if ( strFileFix == "MDC" )
     {
      oConnection = (DTS.Connection2)goPackage.Connections.New("vfpoledb.1");
     }
    
     //设置连接属性
     oConnection.ConnectionProperties.Item("Data Source").Value = this.strFilePath;
   
     oConnection.Name = "连接1";
     oConnection.ID = 1;
     oConnection.Reusable = true;
     oConnection.ConnectImmediate = false;
     oConnection.DataSource = this.strFilePath;
     oConnection.ConnectionTimeout = 60;
     oConnection.UseTrustedConnection = false;
     oConnection.UseDSL = false;
  
     goPackage.Connections.Add((DTS.Connection)oConnection);
     oConnection = null;
    
     //创建连接SQL数据库的连接
     oConnection = (DTS.Connection2)goPackage.Connections.New("SQLOLEDB");
    
     //设置连接属性
     oConnection.ConnectionProperties.Item("Integrated Security").Value = "SSPI";
     oConnection.ConnectionProperties.Item("Persist Security Info").Value = true;
     oConnection.ConnectionProperties.Item("Initial Catalog").Value = this.strDataBaseName;
     oConnection.ConnectionProperties.Item("Data Source").Value = this.strSQLPath;
     oConnection.ConnectionProperties.Item("Application Name").Value = "DTS 导入/导出向导";
   
     oConnection.Name = "连接2";
     oConnection.ID = 2;
     oConnection.Reusable = true;
     oConnection.ConnectImmediate = false;
     oConnection.DataSource = this.strSQLPath;
     oConnection.UserID = this.strSQLUserID;
     oConnection.Password = this.strSQLPassword;
     oConnection.ConnectionTimeout = 60;
     oConnection.Catalog = this.strDataBaseName;
     oConnection.UseTrustedConnection = false;
     oConnection.UseDSL = false;
   

     goPackage.Connections.Add((DTS.Connection)oConnection);
     oConnection = null;
    
     //定义步骤对象
     DTS.Step2 oStep;
  
     oStep = (DTS.Step2)goPackage.Steps.New();

     //设置步骤属性
     oStep.Name = "Copy Data from StuGrade to [" + this.strDataBaseName + "].[dbo].[StuGrade] 步骤";
     oStep.Description = "Copy Data from student to [" + this.strDataBaseName + "].[dbo].[StuGrade] 步骤";
     oStep.ExecutionStatus = (DTS.DTSStepExecStatus)1;
   
     oStep.TaskName = "Copy Data from StuGrade to [" + this.strDataBaseName + "].[dbo].[StuGrade] 任务";
     oStep.CommitSuccess = false;
     oStep.RollbackFailure = false;
     oStep.ScriptLanguage = "VBScript";
     oStep.AddGlobalVariables = true;
   

     oStep.RelativePriority =(DTS.DTSStepRelativePriority)3;
     oStep.CloseConnection = false;
     oStep.ExecuteInMainThread = true;
     oStep.IsPackageDSORowset = false;
     oStep.JoinTransactionIfPresent = false;
     oStep.DisableStep = false;
     goPackage.Steps.Add(oStep);
     oStep = null;
     Task_Sub1(goPackage);
  
     //保存包
//    object objStg;
//    objStg = "dfd";
//    goPackage.SaveToSQLServer("192.168.0.7", "sa", "",DTS.DTSSQLServerStorageFlags.DTSSQLStgFlag_Default,"","","",ref objStg,true);

     //执行包
     goPackage.Execute();
    }
    catch(Exception ex)
    {
     throw ex;
    }
    finally
    {
     //在内存中卸载DTS包
     goPackage.UnInitialize();
     goPackage = null;
    }
  

   }

   /// <summary>
   /// 具体定义DTS包中的任务
   /// </summary>
   /// <param name="goPackage">包对象</param>
   private void Task_Sub1(DTS.Package2Class goPackage)
   {
    //任务对象
    DTS.Task oTask;

    DTS.DataPumpTask2 oCustomTask1;
    oTask = goPackage.Tasks.New("DTSDataPumpTask");
    oCustomTask1 = (DTS.DataPumpTask2)oTask.CustomTask;

    //任务的名称
    oCustomTask1.Name = "Copy Data from StuGrade to [" + this.strDataBaseName + "].[dbo].[StuGrade] 任务";
    //任务的描述
    oCustomTask1.Description = "Copy Data from StuGrade to [" + this.strDataBaseName + "].[dbo].[StuGrade] 任务";
    //任务用来连接源数据文件的连接ID
    oCustomTask1.SourceConnectionID = 1;
    //设置查询源数据文件表中的数据的SQL语句
    oCustomTask1.SourceSQLStatement = "select ";

    DataTable dtabItemToItem;
    dtabItemToItem = getItemToItem();
    for ( int intLoop = 0 ; intLoop < dtabItemToItem.Rows.Count ; intLoop++ )
    {
     oCustomTask1.SourceSQLStatement += "`" + dtabItemToItem.Rows[intLoop]["SourceItem"] + "`,";
    }
   
    oCustomTask1.SourceSQLStatement = oCustomTask1.SourceSQLStatement.Substring(0,oCustomTask1.SourceSQLStatement.Length-1);
    if ( this.strSourceTableName =="" || this.strSourceTableName == null )
    {
     this.strSourceTableName = this.getSourceTableName();
    }
    oCustomTask1.SourceSQLStatement += " from `" + this.strSourceTableName + "`";
    //任务用来连接目标数据的连接ID
    oCustomTask1.DestinationConnectionID = 2;
    //任务用到的目标数据库名称
    oCustomTask1.DestinationObjectName = "[" + this.strDataBaseName + "].[dbo].[StuGrade]";
    oCustomTask1.ProgressRowCount = 1000;
    oCustomTask1.MaximumErrorCount = 0;
    oCustomTask1.FetchBufferSize = 1;
    oCustomTask1.UseFastLoad = true;
    oCustomTask1.InsertCommitSize = 0;
    oCustomTask1.ExceptionFileColumnDelimiter = "|";
    oCustomTask1.ExceptionFileRowDelimiter = @"/n";
    oCustomTask1.AllowIdentityInserts = false;
    oCustomTask1.FirstRow = 0;
    oCustomTask1.LastRow = 0;
    oCustomTask1.FastLoadOptions = (DTS.DTSFastLoadOptions)2;
    oCustomTask1.ExceptionFileOptions = (DTS.DTSExceptionFileOptions)1;
    oCustomTask1.DataPumpOptions = 0;
       
    oCustomTask1_Trans_Sub1(oCustomTask1);
               
               
    goPackage.Tasks.Add(oTask);
    oCustomTask1 = null;
    oTask = null;

   }
  
   /// <summary>
   /// 具体的任务中的对应关系设置
   /// </summary>
   /// <param name="oCustomTask1">任务对象</param>
   private void oCustomTask1_Trans_Sub1(DTS.DataPumpTask2 oCustomTask1)
   {

    DTS.Transformation2 oTransformation ;
    DTS.Properties oTransProps;
    //定义一个列对象
    DTS.Column oColumn;
    oTransformation = (DTS.Transformation2)oCustomTask1.Transformations.New("DTS.DataPumpTransformScript");
    oTransformation.Name = "AxScriptXform";
    oTransformation.TransformFlags = 63;
    oTransformation.ForceSourceBlobsBuffered = 0;
    oTransformation.ForceBlobsInMemory = false;
    oTransformation.InMemoryBlobSize = 1048576;
    oTransformation.TransformPhases = 4;

    #region 定义目标表中的列,目标表的列必须定义,源表列可不定义
    oColumn = oTransformation.DestinationColumns.New("StuTestID", 1);
    oColumn.Name = "StuTestID";
    oColumn.Ordinal = 1;
    oColumn.Flags = 104;
    oColumn.Size = 16;
    oColumn.DataType = 130;
    oColumn.Precision = 0;
    oColumn.NumericScale = 0;
    oColumn.Nullable = true;
          
    oTransformation.DestinationColumns.Add(oColumn);
    oColumn = null;

    oColumn = oTransformation.DestinationColumns.New("Chinese", 2);
    oColumn.Name = "Chinese";
    oColumn.Ordinal = 2;
    oColumn.Flags = 120;
    oColumn.Size = 0;
    oColumn.DataType = 131;
    oColumn.Precision = 18;
    oColumn.NumericScale = 0;
    oColumn.Nullable = true;
          
    oTransformation.DestinationColumns.Add(oColumn);
    oColumn = null;

    oColumn = oTransformation.DestinationColumns.New("Maths", 3);
    oColumn.Name = "Maths";
    oColumn.Ordinal = 3;
    oColumn.Flags = 120;
    oColumn.Size = 0;
    oColumn.DataType = 131;
    oColumn.Precision = 18;
    oColumn.NumericScale = 0;
    oColumn.Nullable = true;
          
    oTransformation.DestinationColumns.Add(oColumn);
    oColumn = null;

    oColumn = oTransformation.DestinationColumns.New("English", 4);
    oColumn.Name = "English";
    oColumn.Ordinal = 4;
    oColumn.Flags = 120;
    oColumn.Size = 0;
    oColumn.DataType = 131;
    oColumn.Precision = 18;
    oColumn.NumericScale = 0;
    oColumn.Nullable = true;
         
    oTransformation.DestinationColumns.Add(oColumn);
    oColumn = null;

    oColumn = oTransformation.DestinationColumns.New("Politics", 5);
    oColumn.Name = "Politics";
    oColumn.Ordinal = 5;
    oColumn.Flags = 120;
    oColumn.Size = 0;
    oColumn.DataType = 131;
    oColumn.Precision = 18;
    oColumn.NumericScale = 0;
    oColumn.Nullable = true;
          
    oTransformation.DestinationColumns.Add(oColumn);
    oColumn = null;

    oColumn = oTransformation.DestinationColumns.New("Physics", 6);
    oColumn.Name = "Physics";
    oColumn.Ordinal = 6;
    oColumn.Flags = 120;
    oColumn.Size = 0;
    oColumn.DataType = 131;
    oColumn.Precision = 18;
    oColumn.NumericScale = 0;
    oColumn.Nullable = true;
          
    oTransformation.DestinationColumns.Add(oColumn);
    oColumn = null;

    oColumn = oTransformation.DestinationColumns.New("Chemistry", 7);
    oColumn.Name = "Chemistry";
    oColumn.Ordinal = 7;
    oColumn.Flags = 120;
    oColumn.Size = 0;
    oColumn.DataType = 131;
    oColumn.Precision = 18;
    oColumn.NumericScale = 0;
    oColumn.Nullable = true;
          
    oTransformation.DestinationColumns.Add(oColumn);
    oColumn = null;

    oColumn = oTransformation.DestinationColumns.New("Biology", 8);
    oColumn.Name = "Biology";
    oColumn.Ordinal = 8;
    oColumn.Flags = 120;
    oColumn.Size = 0;
    oColumn.DataType = 131;
    oColumn.Precision = 18;
    oColumn.NumericScale = 0;
    oColumn.Nullable = true;
          
    oTransformation.DestinationColumns.Add(oColumn);
    oColumn = null;

    oColumn = oTransformation.DestinationColumns.New("History", 9);
    oColumn.Name = "History";
    oColumn.Ordinal = 9;
    oColumn.Flags = 120;
    oColumn.Size = 0;
    oColumn.DataType = 131;
    oColumn.Precision = 18;
    oColumn.NumericScale = 0;
    oColumn.Nullable = true;
          
    oTransformation.DestinationColumns.Add(oColumn);
    oColumn = null;

    oColumn = oTransformation.DestinationColumns.New("Geography", 10);
    oColumn.Name = "Geography";
    oColumn.Ordinal = 10;
    oColumn.Flags = 120;
    oColumn.Size = 0;
    oColumn.DataType = 131;
    oColumn.Precision = 18;
    oColumn.NumericScale = 0;
    oColumn.Nullable = true;
          
    oTransformation.DestinationColumns.Add(oColumn);
    oColumn = null;

    oColumn = oTransformation.DestinationColumns.New("Integration1", 11);
    oColumn.Name = "Integration1";
    oColumn.Ordinal = 11;
    oColumn.Flags = 120;
    oColumn.Size = 0;
    oColumn.DataType = 131;
    oColumn.Precision = 18;
    oColumn.NumericScale = 0;
    oColumn.Nullable = true;
          
    oTransformation.DestinationColumns.Add(oColumn);
    oColumn = null;

    oColumn = oTransformation.DestinationColumns.New("Integration2", 12);
    oColumn.Name = "Integration2";
    oColumn.Ordinal = 12;
    oColumn.Flags = 120;
    oColumn.Size = 0;
    oColumn.DataType = 131;
    oColumn.Precision = 18;
    oColumn.NumericScale = 0;
    oColumn.Nullable = true;
          
    oTransformation.DestinationColumns.Add(oColumn);
    oColumn = null;

    oColumn = oTransformation.DestinationColumns.New("ShtickSubject1", 13);
    oColumn.Name = "ShtickSubject1";
    oColumn.Ordinal = 13;
    oColumn.Flags = 120;
    oColumn.Size = 0;
    oColumn.DataType = 131;
    oColumn.Precision = 18;
    oColumn.NumericScale = 0;
    oColumn.Nullable = true;
          
    oTransformation.DestinationColumns.Add(oColumn);
    oColumn = null;

    oColumn = oTransformation.DestinationColumns.New("ShtickSubject2", 14);
    oColumn.Name = "ShtickSubject2";
    oColumn.Ordinal = 14;
    oColumn.Flags = 120;
    oColumn.Size = 0;
    oColumn.DataType = 131;
    oColumn.Precision = 18;
    oColumn.NumericScale = 0;
    oColumn.Nullable = true;
   
    oTransformation.DestinationColumns.Add(oColumn);
    oColumn = null;

    oColumn = oTransformation.DestinationColumns.New("Standby1", 15);
    oColumn.Name = "Standby1";
    oColumn.Ordinal = 15;
    oColumn.Flags = 120;
    oColumn.Size = 0;
    oColumn.DataType = 131;
    oColumn.Precision = 18;
    oColumn.NumericScale = 0;
    oColumn.Nullable = true;
          
    oTransformation.DestinationColumns.Add(oColumn);
    oColumn = null;

    oColumn = oTransformation.DestinationColumns.New("Standby2", 16);
    oColumn.Name = "Standby2";
    oColumn.Ordinal = 16;
    oColumn.Flags = 120;
    oColumn.Size = 0;
    oColumn.DataType = 131;
    oColumn.Precision = 18;
    oColumn.NumericScale = 0;
    oColumn.Nullable = true;
          
    oTransformation.DestinationColumns.Add(oColumn);
    oColumn = null;

    oColumn = oTransformation.DestinationColumns.New("Standby3", 17);
    oColumn.Name = "Standby3";
    oColumn.Ordinal = 17;
    oColumn.Flags = 120;
    oColumn.Size = 0;
    oColumn.DataType = 131;
    oColumn.Precision = 18;
    oColumn.NumericScale = 0;
    oColumn.Nullable = true;
          
    oTransformation.DestinationColumns.Add(oColumn);
    oColumn = null;

    oColumn = oTransformation.DestinationColumns.New("Standby4", 18);
    oColumn.Name = "Standby4";
    oColumn.Ordinal = 18;
    oColumn.Flags = 120;
    oColumn.Size = 0;
    oColumn.DataType = 131;
    oColumn.Precision = 18;
    oColumn.NumericScale = 0;
    oColumn.Nullable = true;
   
    oTransformation.DestinationColumns.Add(oColumn);
    oColumn = null;
    #endregion

    oTransProps = oTransformation.TransformServerProperties;
    #region 用VB脚本设置字段对应关系
    oTransProps.Item("Text").Value = "'**********************************************************************" + "/n";
    oTransProps.Item("Text").Value = oTransProps.Item("Text").Value + "' Visual Basic Transformation Script" + "/n";
    oTransProps.Item("Text").Value = oTransProps.Item("Text").Value + "' Copy each source column to the" + "/n";
    oTransProps.Item("Text").Value = oTransProps.Item("Text").Value + "' destination column" + "/n";
    oTransProps.Item("Text").Value = oTransProps.Item("Text").Value + "'************************************************************************" + "/n";
    oTransProps.Item("Text").Value = oTransProps.Item("Text").Value + "Function Main()" + "/n";
   
   
    DataTable dtabItemToItem;
    dtabItemToItem = getItemToItem();
               
    for ( int intLoop = 0 ; intLoop < dtabItemToItem.Rows.Count ; intLoop++ )
    {
     oTransProps.Item("Text").Value = oTransProps.Item("Text").Value + "   DTSDestination(/"" + dtabItemToItem.Rows[intLoop]["TargetItem"] + "/") = DTSSource(/"" + dtabItemToItem.Rows[intLoop]["SourceItem"] + "/")" + "/n";
    }

    oTransProps.Item("Text").Value = oTransProps.Item("Text").Value + "   Main = DTSTransformStat_OK" + "/n";
    oTransProps.Item("Text").Value = oTransProps.Item("Text").Value + "End Function";
    oTransProps.Item("Language").Value = "VBScript";
    oTransProps.Item("FunctionEntry").Value = "Main";
            #endregion
    oTransProps = null;
    oCustomTask1.Transformations.Add(oTransformation);
    oTransformation = null;

   }

   /// <summary>
   /// 获得字段对应关系记录
   /// </summary>
   /// <returns>字段对应关系的DataTabl</returns>
   private DataTable getItemToItem()
   {
    string strSQL;
    string strSQLConnectionString = "server=" + this.strSQLPath + ";uid=" + this.strSQLUserID + ";pwd=" + this.strSQLPassword + ";database=" + this.strDataBaseName;
    strSQL = "select * from ImportItemToItem where RelationID='" + this.strRelationID + "'";
    SqlConnection sqlcon = new SqlConnection(strSQLConnectionString);
   
    SqlDataAdapter sqlda = new SqlDataAdapter(strSQL,sqlcon);
    DataSet ds = new DataSet();
    sqlda.Fill(ds,"ImportItemToItem");   
    return ds.Tables["ImportItemToItem"];
   }
  
   /// <summary>
   /// 获得用户表的表名
   /// </summary>
   /// <returns>用户表的表名</returns>
   private string getSourceTableName()
   {
    string strSQL;
    string strSQLConnectionString = "server=" + this.strSQLPath + ";uid=" + this.strSQLUserID + ";pwd=" + this.strSQLPassword + ";database=" + this.strDataBaseName;
    strSQL = "select SourceTable from ImportTableToTable where SrNo='" + this.strRelationID + "'";
    SqlConnection sqlcon = new SqlConnection(strSQLConnectionString);
   
    SqlDataAdapter sqlda = new SqlDataAdapter(strSQL,sqlcon);
    DataSet ds = new DataSet();
    sqlda.Fill(ds,"ImportTableToTable");   
    return ds.Tables["ImportTableToTable"].Rows[0]["SourceTable"].ToString().Trim();
   }


}
}