Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
SSIS Integration Runtime in Azure Data Factory
De bron van het Flat File bepaalt niet of een flat file rijen data bevat voordat het wordt geprobeerd te verwerken. Je wilt misschien de efficiƫntie van een pakket verbeteren, vooral van een pakket dat over meerdere vlakke bestanden iterert, door bestanden over te slaan die geen rijen data bevatten. De Script-taak kan zoeken naar een leeg flat file voordat het pakket begint met het verwerken van de datastroom.
Note
Als je een taak wilt maken die je gemakkelijker kunt hergebruiken in meerdere pakketten, overweeg dan de code in dit scriptvoorbeeld als uitgangspunt voor een aangepaste taak. Zie Een aangepaste taak ontwikkelenvoor meer informatie.
Description
Het volgende voorbeeld gebruikt methoden uit de System.IO naamruimte om het flatbestand te testen dat in een Flat File connection manager is gespecificeerd om te bepalen of het bestand leeg is, of dat het alleen verwachte niet-data-rijen bevat, zoals kolomkoppen of een lege regel. Het script controleert eerst de grootte van het bestand; als de grootte nul bytes is, is het bestand leeg. Als de bestandsgrootte groter is dan nul, leest het script regels uit het bestand totdat er geen regels meer zijn, of totdat het aantal regels het verwachte aantal niet-data-rijen overschrijdt. Als het aantal regels in het bestand kleiner is dan of gelijk is aan het verwachte aantal niet-data-rijen, wordt het bestand als leeg beschouwd. Het resultaat wordt teruggegeven als een Booleaanse waarde in een gebruikersvariabele, waarvan de waarde kan worden gebruikt voor vertakking in de controleflow van het pakket. De FireInformation-methode toont het resultaat ook in het Output-venster van de Microsoft Visual Studio Tools for Applications (VSTA).
Om dit voorbeeld van een scripttaak te configureren,
Maak een flat file connection manager aan en configureer deze genaamd EmptyFlatFileTest.
Maak een gehele variabele genaamd
FFNonDataRowsen stel de waarde ervan in op het aantal niet-datarijen dat in het flatfile wordt verwacht.Maak een Booleaanse variabele aan met de naam
FFIsEmpty.Voeg de variabele
FFNonDataRowstoe aan de ReadOnlyVariables-eigenschap van de Script-taak.Voeg de variabele
FFIsEmptytoe aan de ReadWriteVariables-eigenschap van de Script-taak.Importeer in je code de naamruimte van de System.IO .
Als je over bestanden itereert met een Foreach File enumerator, moet je in plaats van een enkele Flat File connection manager de onderstaande voorbeeldcode aanpassen om de bestandsnaam en het pad te verkrijgen van de variabele waarin de enumerated waarde is opgeslagen, in plaats van uit de connection manager.
Code
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;
}