Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure Data Factory'de SSIS Tümleştirme Çalışma Zamanı
Düz Dosya kaynağı, düz dosyanın işlem yapmadan önce veri satır içerip içermediğini belirlemez. Özellikle çok sayıda düz dosya üzerinde yineleme yapan bir paketin verimliliğini, veri satırı içermeyen dosyaları atlayarak artırmak isteyebilirsiniz. Script görevi, paket veri akışını işlemeye başlamadan önce boş düz bir dosya arayabilir.
Note
Birden fazla paket arasında daha kolay yeniden kullanabileceğiniz bir görev oluşturmak istiyorsanız, bu Script görev örneğindeki kodu özel bir görev için başlangıç noktası olarak kullanmayı düşünün. Daha fazla bilgi için bkz. Özel Görev geliştirme.
Description
Aşağıdaki örnek, System.IO isim alanından metodlar kullanarak Flat File bağlantı yöneticisinde belirtilen düz dosyayı test ederek, dosyanın boş olup olmadığını veya sadece sütun başlıkları veya boş satır gibi beklenen veri dışı satırları içerip içermediğini belirlemektir. Script önce dosyanın boyutunu kontrol eder; Boyut sıfır bayt ise, dosya boş olur. Dosya boyutu sıfırdan büyükse, script satır sayısı kalana veya satır sayısı beklenen veri dışı satır sayısını aşana kadar dosyadan satırları okur. Dosyadaki satır sayısı, beklenen veri dışı satır sayısından az veya eşitse, dosya boş sayılır. Sonuç, paketin kontrol akışında dallanma için kullanılabilen bir kullanıcı değişkeninde bir Boolean değeri olarak döner. FireInformation yöntemi ayrıca sonucu Microsoft Visual Studio Apps for Applications (VSTA) Tools for Applications'ın Çıkış penceresinde gösterir.
Bu Script Görevi örneğini yapılandırmak için
EmptyFlatFileTest adlı düz bir dosya bağlantı yöneticisi oluşturun ve yapılandırın.
Adını
FFNonDataRowstaşıyan bir tamsayı değişkeni oluşturun ve değerini, düz dosyada beklenen veri dışı satır sayısına ayarlayın.Adı
FFIsEmptyolan bir Boolean değişkeni oluşturun.Değişkeni
FFNonDataRowsScript görevinin ReadOnlyVariables özelliğine ekleyin.Değişkeni
FFIsEmptyScript görevinin ReadWriteVariables özelliğine ekleyin.Kodunuzda System.IO isim alanını içe aktarın.
Dosyaları Foreach Dosya hesaplayıcısı ile yineleme yapıyorsanız, tek bir Flat File bağlantı yöneticisi kullanmak yerine, aşağıdaki örnek kodu değiştirerek dosya adını ve yolu bağlantı yöneticisinden değil, sayılan değerin saklandığı değişkenden almanız gerekir.
Kod
Public Sub Main()
Dim nonDataRows As Integer = _
DirectCast(Dts.Variables("FFNonDataRows").Value, Integer)
Dim ffConnection As String = _
DirectCast(Dts.Connections("EmptyFlatFileTest").AcquireConnection(Nothing), _
String)
Dim flatFileInfo As New FileInfo(ffConnection)
' If file size is 0 bytes, flat file does not contain data.
Dim fileSize As Long = flatFileInfo.Length
If fileSize > 0 Then
Dim lineCount As Integer = 0
Dim line As String
Dim fsFlatFile As New StreamReader(ffConnection)
Do Until fsFlatFile.EndOfStream
line = fsFlatFile.ReadLine
lineCount += 1
' If line count > expected number of non-data rows,
' flat file contains data (default value).
If lineCount > nonDataRows Then
Exit Do
End If
' If line count <= expected number of non-data rows,
' flat file does not contain data.
If lineCount <= nonDataRows Then
Dts.Variables("FFIsEmpty").Value = True
End If
Loop
Else
Dts.Variables("FFIsEmpty").Value = True
End If
Dim fireAgain As Boolean = False
Dts.Events.FireInformation(0, "Script Task", _
String.Format("{0}: {1}", ffConnection, _
Dts.Variables("FFIsEmpty").Value.ToString), _
String.Empty, 0, fireAgain)
Dts.TaskResult = ScriptResults.Success
End Sub
public void Main()
{
int nonDataRows = (int)(Dts.Variables["FFNonDataRows"].Value);
string ffConnection = (string)(Dts.Connections["EmptyFlatFileTest"].AcquireConnection(null) as String);
FileInfo flatFileInfo = new FileInfo(ffConnection);
// If file size is 0 bytes, flat file does not contain data.
long fileSize = flatFileInfo.Length;
if (fileSize > 0)
{
int lineCount = 0;
string line;
StreamReader fsFlatFile = new StreamReader(ffConnection);
while (!(fsFlatFile.EndOfStream))
{
Console.WriteLine (fsFlatFile.ReadLine());
lineCount += 1;
// If line count > expected number of non-data rows,
// flat file contains data (default value).
if (lineCount > nonDataRows)
{
break;
}
// If line count <= expected number of non-data rows,
// flat file does not contain data.
if (lineCount <= nonDataRows)
{
Dts.Variables["FFIsEmpty"].Value = true;
}
}
}
else
{
Dts.Variables["FFIsEmpty"].Value = true;
}
bool fireAgain = false;
Dts.Events.FireInformation(0, "Script Task", String.Format("{0}: {1}", ffConnection, Dts.Variables["FFIsEmpty"].Value), String.Empty, 0, ref fireAgain);
Dts.TaskResult = (int)ScriptResults.Success;
}