SSIS Как сопоставить несколько параметров с источником oledb, когда режим доступа — команда SQL?

#sql-server #ssis

#sql-сервер #ssis

Вопрос:

** Мой исходный код Oledb —
при добавлении второго параметра он переопределяет первый. как решить? **

     IDTSComponentMetaData100 Source = PopulateEtlDataSourceDetailDFT.ComponentMetaDataCollection.New();
    Source.ComponentClassID = "DTSAdapter.OleDbSource";
    CManagedComponentWrapper srcDesignTime = Source.Instantiate();
    srcDesignTime.ProvideComponentProperties();
    Source.Name = "OLEDB Source";
    //Assigning Connection manager
    Source.RuntimeConnectionCollection[0].ConnectionManagerID = Config.ID;
    Source.RuntimeConnectionCollection[0].ConnectionManager = DtsConvert.GetExtendedInterface(Config);
    // Set the custom properties of the source.
    srcDesignTime.SetComponentProperty("AccessMode", 2);

    Guid variableGuid = new Guid(ETLSourceRunId.ID);
    String ParamProperty = @"""@OrganizationName"",{"   variableGuid.ToString().ToUpper()   @"};";
    srcDesignTime.SetComponentProperty("ParameterMapping", ParamProperty);
    Guid variableGuid1 = new Guid(Parent_ETLSourceRunId.ID);
    String ParamProperty1 = @"""@SourceRunID"",{"   variableGuid.ToString().ToUpper()   @"};";
    srcDesignTime.SetComponentProperty("ParameterMapping", ParamProperty1);       

    srcDesignTime.SetComponentProperty("SqlCommand","EXEC [dbo].[USP_GetCustomerEtlSourceDetailRecordSet] @OrganizationName=?,@SourceRunID=?");        
    srcDesignTime.AcquireConnections(null);
    srcDesignTime.ReinitializeMetaData();
    srcDesignTime.ReleaseConnections();
 

1. Как добавить несколько параметров в источник oledb? и
2. как добавить параметры проекта в источник oledb?

Ответ №1:

Я не профессионал в c #, но:

 Guid variableGuid = new Guid(ETLSourceRunId.ID);
String ParamProperty = @"""@OrganizationName"",{"   variableGuid.ToString().ToUpper()   @"};";
srcDesignTime.SetComponentProperty("ParameterMapping", ParamProperty);
Guid variableGuid1 = new Guid(Parent_ETLSourceRunId.ID);
String ParamProperty1 = @"""@SourceRunID"",{"   variableGuid.ToString().ToUpper()   @"};";
srcDesignTime.SetComponentProperty("ParameterMapping", ParamProperty1);
 

2-й с последней строки:

 String ParamProperty1 = @"""@SourceRunID"",{"   variableGuid.ToString().ToUpper()   @"};";
 

разве это не должен быть variableGuid1.toString().Upper(), а не variableGuid .toString().Upper() поскольку вы присваиваете значение как:

 Guid variableGuid1 = new Guid(Parent_ETLSourceRunId.ID);
 

Ответ №2:

Попробуйте использовать команду SQL из переменной в качестве режима доступа к данным. Создайте переменную в виде строки и задайте ее значение для вашей SqlCommand. Если для вашей команды SqlCommand требуется несколько параметров, снова создайте переменные для хранения этих значений и используйте эти переменные в значении переменной SqlCommand.

Вы можете начать с этой статьи.

Шаги

1) Создайте переменную для SqlCommand

 strVarSqlCommand = "EXEC [dbo].[USP_GetCustomerEtlSourceDetailRecordSet] @OrganizationName=strVarOrgName ,@SourceRunID=strVarSrcRunId"
 

2) создайте переменные для ссылки в переменной Sqlcommand

 strVarOrgName = "XXX"
strVarSrcRunId="YYY"
 

Согласно вашему требованию, вы можете задать значения для этих переменных как жестко, так и динамически.

3) Используйте strVarSqlCommand переменную в источнике ole db, где режим доступа к данным — команда с переменной