2012-11-19 20 views
18

Tôi mới trong SSIS, đang làm việc trên dự án và cố truy cập biến gói SSIS bên trong mã C# mà tôi đã sử dụng trong Luồng dữ liệu -> Thành phần tập lệnh -> My C# Tập lệnhCách truy cập biến gói ssis bên trong thành phần tập lệnh

có ai có thể trợ giúp về điều này không?

cũng tôi đã cố gắng mà cũng không hoạt động

IDTSVariables100 varCollection = null; 
    this.VariableDispenser.LockForRead("User::FilePath"); 
    string XlsFile; 

    XlsFile = varCollection["User::FilePath"].Value.ToString(); 
+1

Lỗi hoặc hành vi bất ngờ bạn đang gặp phải là gì? – billinkc

Trả lời

41

Truy cập biến gói trong một Script Component (của một luồng dữ liệu Task) là không giống như truy cập vào các biến gói trong một Script công tác. Đối với thành phần tập lệnh, trước tiên bạn cần mở Script Transformation Editor (nhấp chuột phải vào thành phần và chọn "Chỉnh sửa ..."). Trong phần Thuộc tính tùy chỉnh của tab Tập lệnh, bạn có thể nhập (hoặc chọn) thuộc tính bạn muốn cung cấp cho tập lệnh, trên cơ sở chỉ đọc hoặc viết-đọc: screenshot of Script Transformation Editor properties page Sau đó, bên trong tập lệnh, các biến sẽ có tính chất như mạnh mẽ, đánh máy của biến đối tượng:

// Modify as necessary 
public override void PreExecute() 
{ 
    base.PreExecute(); 
    string thePath = Variables.FilePath; 
    // Do something ... 
} 

public override void PostExecute() 
{ 
    base.PostExecute(); 
    string theNewValue = ""; 
    // Do something to figure out the new value... 
    Variables.FilePath = theNewValue; 
} 

public override void Input0_ProcessInputRow(Input0Buffer Row) 
{ 
    string thePath = Variables.FilePath; 
    // Do whatever needs doing here ... 
} 

một caveat quan trọng: nếu bạn cần phải ghi cho một biến gói, bạn chỉ có thể làm như vậy trong phương pháp PostExecute().

Về đoạn mã:

IDTSVariables100 varCollection = null; 
this.VariableDispenser.LockForRead("User::FilePath"); 
string XlsFile; 

XlsFile = varCollection["User::FilePath"].Value.ToString(); 

varCollection được khởi tạo null và không bao giờ đặt một giá trị hợp lệ. Do đó, bất kỳ nào cố gắng không tham khảo, nó sẽ thất bại.

1
  • Trên trang tính trước các kịch bản biến đổi, sửa đổi ReadOnlyVariables (hoặc ReadWriteVariables) tài sản và chọn các biến bạn quan tâm. Điều này sẽ bật các biến được chọn trong tác vụ tập lệnh
  • Trong mã, bây giờ bạn sẽ có quyền truy cập để đọc biến là

    string myString = Variables.MyV ariableName.ToString();

+0

Điều này vẫn chính xác? Tôi dường như không có quyền truy cập vào các biến này –

0

mạnh gõ var dường như không có sẵn, tôi phải làm như sau để có được quyền truy cập vào chúng:

String MyVar = Dts.Variables["MyVarName"].Value.ToString();

+4

Câu trả lời này dường như liên quan đến Tác vụ Tập lệnh (trong luồng kiểm soát), trong khi câu hỏi liên quan đến Tập lệnh _Component_ (trong luồng dữ liệu). – Sepster

0

này nên làm việc:

IDTSVariables100 vars = null; 
VariableDispenser.LockForRead("System::TaskName"); 
VariableDispenser.GetVariables(vars); 
string TaskName = vars("System::TaskName").Value.ToString(); 
vars.Unlock(); 

của bạn mã ban đầu thiếu cuộc gọi của phương thức GetVariables().

0

Tôi có cùng vấn đề với OP trừ khi tôi nhớ khai báo ReadOnlyVariables.

Sau khi một số người chơi xung quanh, tôi phát hiện ra đó là tên biến của tôi là vấn đề. "File_Path" trong SSIS bằng cách nào đó đã được chuyển đổi thành "FilePath". C# không chơi độc đáo với dấu gạch dưới trong các tên biến.

Vì vậy, để truy cập vào biến, tôi gõ

string fp = Variables.FilePath; 

Trong phương pháp PreExecute() của Hợp phần Script.

0

Đầu tiên Danh sách các biến mà bạn muốn sử dụng chúng trong Script nhiệm vụ tại ReadOnlyVariables trong trình soạn thảo nhiệm vụ Script và chỉnh sửa kịch bản

Để sử dụng ReadOnlyVariables của bạn trong mã script

String codeVariable = Dts.Variables["User::VariableNameinSSIS"].Value.ToString(); 

dòng mã này sẽ xử lý biến gói ssis dưới dạng chuỗi.

Các vấn đề liên quan