Skip to content

Commit 94a2f11

Browse files
author
Keith Martin
committed
Add handling for a Data value BEFORE the Key value. This will be discarded based on the selected Error Handling. Add Unit test for same. Increment deployment version.
git-tfs-id: [https://martin-source.visualstudio.com/DefaultCollection]$/IntegrationServices/Main;C113
1 parent aa3a8d1 commit 94a2f11

File tree

5 files changed

+55
-12
lines changed

5 files changed

+55
-12
lines changed

TextFileSplitter/TextFileSplitter2012/TextFileSplitter.cs

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2302,16 +2302,24 @@ public override void PrimeOutput(int outputs, int[] outputIDs, PipelineBuffer[]
23022302
{
23032303
if (keyMasterValues.TryGetValue(keyColumnID, out currentValue))
23042304
{
2305-
currentBuffer[currentOutputColumn.OutputBufferID] = currentValue;
2305+
//currentBuffer[currentOutputColumn.OutputBufferID] = currentValue;
23062306
}
23072307
}
23082308
else
23092309
{
23102310
if (keyMasterValues.TryGetValue((int)ManageProperties.GetPropertyValue(currentOutputColumn.CustomPropertyCollection, ManageProperties.keyOutputColumnID), out currentValue))
23112311
{
2312-
currentBuffer[currentOutputColumn.OutputBufferID] = currentValue;
2312+
//currentBuffer[currentOutputColumn.OutputBufferID] = currentValue;
23132313
}
23142314
}
2315+
if (currentValue != null)
2316+
{
2317+
currentBuffer[currentOutputColumn.OutputBufferID] = currentValue;
2318+
}
2319+
else
2320+
{
2321+
throw new ArgumentNullException(currentOutputColumn.Name, String.Format("Key Value was NOT found for record number {0} of type {1}", recordsRead, RowTypeValue));
2322+
}
23152323
}
23162324
else
23172325
{
@@ -2361,7 +2369,10 @@ public override void PrimeOutput(int outputs, int[] outputIDs, PipelineBuffer[]
23612369
{
23622370
errorBuffer.AddRow();
23632371
errorBuffer[2] = TruncateStringTo4000(String.Format("Exception {0} thrown on Record {1} for field {2}.", ex.Message, recordsRead, currentOutputColumn.Name));
2364-
errorBuffer[3] = TruncateStringTo4000(currentOutputColumn.FileHelperField.GetValue(result).ToString());
2372+
if (currentOutputColumn.FileHelperField != null)
2373+
{
2374+
errorBuffer[3] = TruncateStringTo4000(currentOutputColumn.FileHelperField.GetValue(result).ToString());
2375+
}
23652376
errorBuffer[4] = TruncateStringTo4000(RowDataValue);
23662377
Object currentValue = null;
23672378
foreach (SSISOutputColumn errorOutputColumn in errorOutput.OutputColumnCollection)

TextFileSplitter/TextFileSplitterInstallx64/Product.wxs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
3-
<?define ProductVersion = "1.0.12.0"?>
3+
<?define ProductVersion = "1.0.13.0"?>
44
<?define UpgradeCode = "A9EE6818-88C5-4E7F-A2E4-C7BC52E7FF8D"?>
55
<?define Manufacturer = "Keith Martin"?>
66
<?define PackageCode = "*"?>

TextFileSplitter/TextFileSplitterInstallx86/Product.wxs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
3-
<?define ProductVersion = "1.0.12.0"?>
3+
<?define ProductVersion = "1.0.13.0"?>
44
<?define UpgradeCode = "944FC76C-F623-480F-A10D-A1994713BF87"?>
55
<?define Manufacturer = "Keith Martin"?>
66
<?define PackageCode = "*"?>

TextFileSplitter/UnitTestTextFileSplitter2012/BadDataFile.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
001|12345|Start Invoice Record
1+
099|2001-01-01|Joe Bloggs|Missing Key Value
2+
001|12345|Start Invoice Record
23
002|2001-01-01|Joe Bloggs|Header Record
34
003|15.00|1.00|Purchase of 15 $1 Items|Data Record
45
003|16.00|1.00|Purchase of 16 $1 Items|Data Record

TextFileSplitter/UnitTestTextFileSplitter2012/TestPrimeOutput.cs

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,11 @@ public void SetupSQLCEDatabase()
6464
tableCreate = "CREATE TABLE [RowCountOutput] ([KeyValue] nvarchar(255), [NumberOfRows] integer, [KeyValueStatus] nvarchar(255))";
6565
command.CommandText = tableCreate;
6666
command.ExecuteNonQuery();
67-
67+
68+
tableCreate = "CREATE TABLE [Output099] ([KeyColumn1] uniqueidentifier, [output099Column1] nvarchar(50), [output099Column2] nvarchar(50), [output099Column3] nvarchar(50))";
69+
command.CommandText = tableCreate;
70+
command.ExecuteNonQuery();
71+
6872

6973
connection.Close();
7074
sqlCEEngine.Dispose();
@@ -620,11 +624,28 @@ public void TestPrimeOutput_TestDataFileWithManyErrorsAndRowCountOutput()
620624
instance.SetOutputProperty(keyID, ManageProperties.rowTypeValue, "001");
621625
IDTSOutputColumn100 keyColumn1 = instance.InsertOutputColumnAt(keyID, 1, "KeyColumn2", String.Empty);
622626
instance.SetOutputColumnDataTypeProperties(keyID, keyColumn1.ID, DataType.DT_I4, 0, 0, 0, 0);
627+
//instance.SetOutputColumnProperty(keyID, keyColumn1.ID, ManageProperties.usageOfColumn, Utilities.usageOfColumnEnum.Key);
623628
IDTSOutputColumn100 keyColumn2 = instance.InsertOutputColumnAt(keyID, 2, "KeyColumn3", String.Empty);
624629
instance.SetOutputColumnDataTypeProperties(keyID, keyColumn2.ID, DataType.DT_WSTR, 20, 0, 0, 0);
625630
keyOutput.OutputColumnCollection[0].Name = "KeyColumn1";
626631
errorOutput.OutputColumnCollection[5].Name = "KeyColumn1";
627632

633+
// 002|2001-01-01|Joe Bloggs|Missing Key Value
634+
635+
IDTSOutput100 output002 = instance.InsertOutput(DTSInsertPlacement.IP_AFTER, keyID);//textFileSplitter.OutputCollection.New();
636+
int outputID = output002.ID;
637+
instance.SetOutputProperty(outputID, ManageProperties.rowTypeValue, "099");
638+
instance.SetOutputProperty(outputID, ManageProperties.typeOfOutput, Utilities.typeOfOutputEnum.DataRecords);
639+
output002.ErrorRowDisposition = DTSRowDisposition.RD_RedirectRow;
640+
output002.TruncationRowDisposition = DTSRowDisposition.RD_RedirectRow;
641+
IDTSOutputColumn100 output099Column1 = instance.InsertOutputColumnAt(outputID, 1, "output099Column1", String.Empty);
642+
instance.SetOutputColumnDataTypeProperties(outputID, output099Column1.ID, DataType.DT_STR, 50, 0, 0, 1252);
643+
IDTSOutputColumn100 output099Column2 = instance.InsertOutputColumnAt(outputID, 2, "output099Column2", String.Empty);
644+
instance.SetOutputColumnDataTypeProperties(outputID, output099Column2.ID, DataType.DT_STR, 50, 0, 0, 1252);
645+
IDTSOutputColumn100 output099Column3 = instance.InsertOutputColumnAt(outputID, 3, "output099Column3", String.Empty);
646+
instance.SetOutputColumnDataTypeProperties(outputID, output099Column3.ID, DataType.DT_STR, 50, 0, 0, 1252);
647+
648+
628649
// Add SQL CE Connection
629650
ConnectionManager sqlCECM = null;
630651
IDTSComponentMetaData100 sqlCETarget = null;
@@ -638,6 +659,9 @@ public void TestPrimeOutput_TestDataFileWithManyErrorsAndRowCountOutput()
638659
CreateSQLCEComponent(package, dataFlowTask, "RowCountOutput", out sqlCECM, out sqlCETarget, out sqlCEInstance);
639660
CreatePath(dataFlowTask, numberOfRowsOutput, sqlCETarget, sqlCEInstance);
640661

662+
CreateSQLCEComponent(package, dataFlowTask, "Output099", out sqlCECM, out sqlCETarget, out sqlCEInstance);
663+
CreatePath(dataFlowTask, output002, sqlCETarget, sqlCEInstance);
664+
641665
PackageEventHandler packageEvents = new PackageEventHandler();
642666

643667
Microsoft.SqlServer.Dts.Runtime.DTSExecResult result = package.Execute(null, null, packageEvents as IDTSEvents, null, null);
@@ -653,14 +677,14 @@ public void TestPrimeOutput_TestDataFileWithManyErrorsAndRowCountOutput()
653677
connection.Open();
654678
}
655679

656-
SqlCeCommand sqlCommand = new SqlCeCommand("SELECT * FROM [ErrorResults] WHERE ErrorMessage = 'Unexpected Row Type Value 002 found on Record 2.'", connection);
680+
SqlCeCommand sqlCommand = new SqlCeCommand("SELECT * FROM [ErrorResults] WHERE ErrorMessage = 'Unexpected Row Type Value 002 found on Record 3.'", connection);
657681
SqlCeDataReader sqlData = sqlCommand.ExecuteReader(CommandBehavior.Default);
658682
int rowCount = 0;
659683
while (sqlData.Read())
660684
{
661685
rowCount++;
662686
}
663-
Assert.AreEqual(1, rowCount, "Record 2 Error Missing");
687+
Assert.AreEqual(1, rowCount, "Record 3 Error Missing");
664688

665689
sqlCommand.CommandText = "SELECT COUNT(*) FROM [ErrorResults] WHERE ErrorMessage LIKE 'Unexpected Row Type Value%'";
666690
sqlData = sqlCommand.ExecuteReader(CommandBehavior.Default);
@@ -714,14 +738,14 @@ public void TestPrimeOutput_TestDataFileWithManyErrorsAndRowCountOutput()
714738
sqlData = sqlCommand.ExecuteReader(CommandBehavior.Default);
715739
while (sqlData.Read())
716740
{
717-
Assert.AreEqual(6, sqlData.GetInt32(0), "Number of RowCountOutput Rows incorrect");
741+
Assert.AreEqual(7, sqlData.GetInt32(0), "Number of RowCountOutput Rows incorrect");
718742
}
719743

720744
sqlCommand.CommandText = "SELECT * FROM [RowCountOutput] WHERE KeyValue = 'Total Records'";
721745
sqlData = sqlCommand.ExecuteReader(CommandBehavior.Default);
722746
while (sqlData.Read())
723747
{
724-
Assert.AreEqual(15, sqlData.GetInt32(1), "Number of Total Records incorrect");
748+
Assert.AreEqual(16, sqlData.GetInt32(1), "Number of Total Records incorrect");
725749
Assert.AreEqual("Disconnected", sqlData.GetString(2), "KeyValue Status on Total Records incorrect");
726750
}
727751

@@ -737,7 +761,7 @@ public void TestPrimeOutput_TestDataFileWithManyErrorsAndRowCountOutput()
737761
sqlData = sqlCommand.ExecuteReader(CommandBehavior.Default);
738762
while (sqlData.Read())
739763
{
740-
Assert.AreEqual(14, sqlData.GetInt32(1), "Number of Error Records incorrect");
764+
Assert.AreEqual(15, sqlData.GetInt32(1), "Number of Error Records incorrect");
741765
Assert.AreEqual("Connected and Processed", sqlData.GetString(2), "KeyValue Status on Error Records incorrect");
742766
}
743767

@@ -749,6 +773,13 @@ public void TestPrimeOutput_TestDataFileWithManyErrorsAndRowCountOutput()
749773
Assert.AreEqual("Not configured", sqlData.GetString(2), "KeyValue Status on 003 incorrect");
750774
}
751775

776+
sqlCommand.CommandText = "SELECT COUNT(*) FROM [ErrorResults] WHERE ErrorMessage LIKE 'Exception Key Value%'";
777+
sqlData = sqlCommand.ExecuteReader(CommandBehavior.Default);
778+
while (sqlData.Read())
779+
{
780+
Assert.AreEqual(1, sqlData.GetInt32(0), "099 Value before Key Not Detected.");
781+
}
782+
752783

753784
connection.Close();
754785
}

0 commit comments

Comments
 (0)