Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk: SQL Server
SSIS Integration Runtime di Azure Data Factory
Sumber File Datar tidak menentukan apakah file datar berisi baris data sebelum mencoba memprosesnya. Anda mungkin ingin meningkatkan efisiensi paket, terutama paket yang melakukan iterasi atas banyak file datar, dengan melewatkan file yang tidak berisi baris data apa pun. Tugas Skrip dapat mencari file datar kosong sebelum paket mulai memproses aliran data.
Catatan
Jika Anda ingin membuat tugas yang dapat digunakan kembali dengan lebih mudah di beberapa paket, pertimbangkan untuk menggunakan kode dalam sampel tugas Skrip ini sebagai titik awal untuk tugas kustom. Untuk informasi selengkapnya, lihat Mengembangkan Tugas Kustom.
Deskripsi
Contoh berikut menggunakan metode dari namespace System.IO untuk menguji file datar yang ditentukan dalam manajer koneksi File Datar untuk menentukan apakah file kosong, atau apakah hanya berisi baris non-data yang diharapkan seperti header kolom atau baris kosong. Skrip memeriksa ukuran file terlebih dahulu; jika ukurannya nol byte, file kosong. Jika ukuran file lebih besar dari nol, skrip membaca baris dari file sampai tidak ada baris lagi, atau sampai jumlah baris melebihi jumlah baris non-data yang diharapkan. Jika jumlah baris dalam file kurang dari atau sama dengan jumlah baris non-data yang diharapkan, maka file dianggap kosong. Hasilnya dikembalikan sebagai nilai Boolean dalam variabel pengguna, yang nilainya dapat digunakan untuk percabangan dalam alur kontrol paket. Metode FireInformation juga menampilkan hasil di jendela Output Microsoft® Visual Studio® Tools for Applications (VSTA).
Untuk mengonfigurasi contoh Tugas Skrip ini
Buat dan konfigurasikan manajer koneksi file datar bernama EmptyFlatFileTest.
Buat variabel bilangan bulat bernama
FFNonDataRowsdan atur nilainya ke jumlah baris non-data yang diharapkan dalam file datar.Buat variabel Boolean bernama
FFIsEmpty.FFNonDataRowsTambahkan variabel ke properti ReadOnlyVariables tugas Skrip.FFIsEmptyTambahkan variabel ke properti ReadWriteVariables tugas Skrip.Dalam kode Anda, impor namespace System.IO .
Jika Anda melakukan iterasi file dengan enumerator File Foreach, alih-alih menggunakan satu manajer koneksi File Datar, Anda harus memodifikasi kode sampel di bawah ini untuk mendapatkan nama file dan jalur dari variabel tempat nilai enumerasi disimpan alih-alih dari manajer koneksi.
Kode
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;
}