MCTS Self-Paced Training Kit (Exam 70-561): Microsoft® .NET Framework 3.5—ADO.NET Application Development

Errata for MCTS Self-Paced Training Kit (Exam 70-561): Microsoft® .NET Framework 3.5—ADO.NET Application Development




The errata list is a list of errors and their corrections that were found after the product was released. If the error was corrected in a later version or reprint the date of the correction will be displayed in the column titled "Date Corrected".

The following errata were submitted by our customers and approved as valid errors by the author or editor.

Color Key: Serious Technical Mistake Minor Technical Mistake Language or formatting error Typo Question Note Update



Version Location Description Submitted By Date Submitted Date Corrected
Printed
Page CD-ROM

Practice Test question scored incorrectly In the practice exam included on the Companion CD, one of the questions is scored incorrectly. The question reads: "You create a DbCommand to execute a query. You must retrieve a DBDataReader that you can use to access the result set. What should you do?" The answer that should be marked correct reads: "Use the DbCommand.ExecuteDbDataReader method to execute the command text against the connection and return a DbDataReader."

Microsoft Press  Jul 13, 2010 
Printed
Page xix

"Next, Previous, and Go To" should be "Next and Previous" On page xix, the last sentence is incorrect. Change: "To take the test, answer the questions and use the Next, Previous, and Go To buttons to move from question to question." To: "To take the test, answer the questions and use the Next and Previous buttons to move from question to question."

Microsoft Press  Jul 13, 2010 
Other Digital Version
CD-ROM

Practice Test question scored incorrectly In the practice exam included on the Companion CD, one of the questions is scored incorrectly. The question reads: "You use two DataContext instances to retrieve objects from two database tables. After modifying the returned objects, you call the SubmitChanges method on each instance of DataContext. You want changes to both databases to occur in the context of a single distributed transaction." The answer that should be marked correct reads: "Embed calls to the SubmitChanges method within a TransactionScope with TransactionScopeOption set to RequiredNew. Call Complete after the update."

Microsoft Press  May 06, 2010 
Other Digital Version
CD-ROM

Unable to answer practice test question In the practice exam, one of the questions includes instructions to select options from a list, but the list does not exist. The question begins: "You are designing an occasionally connected smart client." This question cannot be answered or scored as it is.

Microsoft Press  May 06, 2010 
Printed
Page 17

"File, New, New File" should be "Project, Add New Item" On page 17, the last sentence is incorrect. Change: "You can also select File, New, New File from the menu bar, and choose the confi g fi le type from the window shown in Figure 1-3." To: "You can also select Project, Add New Item from the menu bar, and choose the confi g fi le type from the window shown in Figure 1-3."

Microsoft Press  May 06, 2010 
Printed
Page 44

SQL queries are incorrect On page 44, the SQL queries used in the code sample are incorrect. Change: theTransaction = theConnection.BeginTransaction("myFirstTransaction") Dim theCommand As SqlCommand = New SqlCommand() theCommand.CommandText = "SELECT top 10 * FROM game" theCommand.CommandType = CommandType.Text theCommand.Transaction = theTransaction theCommand.Connection = theConnection theCommand.ExecuteNonQuery() Console.WriteLine("First command executed successfully.") Dim theSecondCommand As SqlCommand = New SqlCommand() theSecondCommand.CommandText = "SELECT top 10 * FROM accessory"To: theTransaction = theConnection.BeginTransaction("myFirstTransaction") Dim theCommand As SqlCommand = New SqlCommand() theCommand.CommandText = "UPDATE product SET listprice = 59.99 WHERE productid = 2020" theCommand.CommandType = CommandType.Text theCommand.Transaction = theTransaction theCommand.Connection = theConnection theCommand.ExecuteNonQuery() Console.WriteLine("First command executed successfully.") Dim theSecondCommand As SqlCommand = New SqlCommand() theSecondCommand.CommandText = "INSERT INTO product (ProductName, ProductDescription, ListPrice, ProductTypeID, ReleaseDate, ListPriceCurrency) " + "VALUES ('Super Fight 2', 'The sequel to the #1 XBox 360 game that never was', 59.99, 1, '2008-11-01', 'USD')"

Microsoft Press  Jul 13, 2010 
Printed
Page 51

"Initial Catalog" should be "InitialCatalog" On page 51, the connection strings used in answer B are incorrect. Change: Dim theConnectionString As String = "Data Source=jim-pc;Initial Catalog=VideoGameStoreDB;Integrated Security=SSPI;"To: Dim theConnectionString As String = "Data Source=jim-pc;InitialCatalog=VideoGameStoreDB;Integrated Security=SSPI;"" Change: "string theConnectionString = "Data Source=jim-pc;Initial Catalog=VideoGameStoreDB;Integrated Security=SSPI;"; To: "string theConnectionString = "Data Source=jim-pc;InitialCatalog=VideoGameStoreDB;Integrated Security=SSPI;";

Microsoft Press  May 06, 2010 
Printed
Page 54

Server should be System On page 54, the second sentence of the first paragraph is incorrect. Change: "This is a smart move—Microsoft supplies a number of different data providers, including the native provider for SQL Server, but third parties can supply their own (for example, when using the Oracle Relational Database Management Server (RDBMS)) or a custom data provider can be written by any competent developer." To: "This is a smart move—Microsoft supplies a number of different data providers, including the native provider for SQL Server, but third parties can supply their own (for example, when using the Oracle Relational Database Management System (RDBMS)) or a custom data provider can be written by any competent developer."

Microsoft Press  Jul 13, 2010 
Printed
Page 96

SqlCommand should be SqlParameterCollection On Page 96, the sentence before the bulleted list is incorrect. Change: "In addition, the SqlCommand object has an overloaded Add method, which can be used to add parameters with and without a direct reference to a SqlParameter, as shown in the following list:" To: "In addition, the SqlParameterCollection object has an overloaded Add method, which can be used to add parameters with and without a direct reference to a SqlParameter, as shown in the following list:"

Microsoft Press  May 06, 2010 
Printed
Page 103

"LEFT INNER JOIN" should be "INNER JOIN" On page 103, the second line of answer A to question 2 is incorrect. Change: FROM product p LEFT INNER JOIN productType pt on pt.ProductTypeID =To: FROM product p INNER JOIN productType pt on pt.ProductTypeID =

Microsoft Press  Jul 13, 2010 
Printed
Page 113

"Asynchronous Prossessing=true" missing from code sample On page 113, the 5th line of the C# code sample is missing a parameter. Change: Security=SSPI;";To: Security=SSPI;Asynchronous Prossessing=true;";

Microsoft Press  May 06, 2010 
Printed
Page 138

PROPERTY should be METHOD On page 138, the title of the first column in Table 3-2 is incorrect. Change: "PROPERTY" To: "METHOD"

Microsoft Press  Jul 13, 2010 
Printed
Page 143

DataSet should be DataTable On page 143, the Description of RejectChanges in Table 3-4 is incorrect. Change: "Rolls back all the changes to the data in the DataSet, similar to a rollback at database level except this is done to the in-memory data." To: "Rolls back all the changes to the data in the DataTable, similar to a rollback at database level except this is done to the in-memory data."

Microsoft Press  Jul 13, 2010 
Printed
Page 143

PROPERTY should be METHOD On page 143, the title of the first column in Table 3-4 is incorrect. Change: "PROPERTY" To: "METHOD"

Microsoft Press  May 06, 2010 
Printed
Page 146

GetProducts should be GetProductRows On page 146, the last sentence of the second paragraph is incorrect. Change: "The SupplierRow offers a method named GetProducts, which returns an array of ProductRow objects." To: "The SupplierRow offers a method named GetProductRows, which returns an array of ProductRow objects."

Microsoft Press  May 06, 2010 
Printed
Page 147

Incorrect description of sample code On page 147, the paragraph after the code sample is incorrect. Change: "In the previous code, the BuildDataSetWithRelation method creates two tables, adds them to the DataSet, and then proceeds to build a DataRelation between the two tables, from the ContactType fi eld in Contact to the primary key in the ContactTypes table. By enabling constraints when creating the relationship, the foreign key constraint is automatically implemented. Adding data that holds a reference to a non-existing entry in the ContactTypes table will cause an exception to be thrown. Adding the ContactTypes entry before adding the Contact works fine." To: "In the previous code, the BuildDataSetWithRelation method creates two tables, adds them to the DataSet, and then proceeds to build a DataRelation between the two tables, from the SupplierID field in Product to the primary key in the Supplier table. By enabling constraints when creating the relationship, the foreign key constraint is automatically implemented. Adding data that holds a reference to a non-existing entry in the Supplier table will cause an exception to be thrown. Adding the Supplier entry before adding the Product works fine."

Microsoft Press  Jul 13, 2010 
Printed
Page 148

Incorrect tables and columns referenced in code sample explanation On page 148, the first paragraph and following code sample are incorrect. Change: For example, the following code sets the expression for the OrderLinesCount column of the Orders table: ' VB Tables("Suppliers").Columns("ProductCount").Expression = "Count(Child(Product))" // C# Tables["Suppliers "].Columns["Product Count"].Expression = "Count(Child(Product))";To: For example, the following code sets the expression for the ProductCount column of the Suppliers table: ' VB Tables("Suppliers").Columns("ProductCount").Expression = "Count(Child(Product))" // C# Tables["Suppliers"].Columns["ProductCount"].Expression = "Count(Child(Product))";

Microsoft Press  May 06, 2010 
Printed
Page 175

SupplierLocation should be SupplierAddress On page 175, step 6 refers to an incorrect field. Change: "6. In the wizard, when entering the SQL statement, select all fi elds except the SupplierLocation field." To: "6. In the wizard, when entering the SQL statement, select all fi elds except the SupplierAddress field."

Microsoft Press  Jul 13, 2010 
Printed
Page 206

BatchUpdateSize should be UpdateBatchSize On page 206, the first sentence of step 2 is incorrect. Change: "CustomerTableAdapter does not expose the BatchUpdateSize property because this is a SqlDataAdapter-specifi c property." To: "CustomerTableAdapter does not expose the UpdateBatchSize property because this is a SqlDataAdapter-specifi c property."

Microsoft Press  May 06, 2010 
Printed
Page 214

Incorrect column names used On page 214, the third paragraph is incorrect. Change: "The code shown in Listing 4-2 shows how to create a relationship between two tables. The foreign key constraint is enabled, so only existing values for the ContactType fi eld are allowed. It shows that the BuildDataSetWithRelation method creates two tables, adds them to the DataSet and then proceeds to build a DataRelation between the two tables. The relationship connects the ContactType fi eld in Contact to the primary key in the ContactTypes table. By enabling constraints when creating the relationship, the foreign key constraint is automatically implemented, and adding data that holds a reference to a nonexisting ContactTypes entry causes an exception to be thrown. The correct implementation would be to add the ContactTypes entry before adding the Contact entry." To: "The code shown in Listing 4-2 shows how to create a relationship between two tables. The foreign key constraint is enabled, so only existing values for the SupplierID field are allowed. It shows that the BuildDataSetWithRelation method creates two tables, adds them to the DataSet and then proceeds to build a DataRelation between the two tables. The relationship connects the SupplierID field in Product to the primary key in the Supplier table. By enabling constraints when creating the relationship, the foreign key constraint is automatically implemented, and adding data that holds a reference to a nonexisting Supplier entry causes an exception to be thrown. The correct implementation would be to add the Supplier entry before adding the Product entry."

Microsoft Press  Jul 13, 2010 
Printed
Page 219

4-3 should be 4-4 On page 219, the last sentence before Table 4-4 is incorrect. Change: "See Table 4-3 for a list of transaction scope options." To: "See Table 4-4 for a list of transaction scope options."

Microsoft Press  May 06, 2010 
Printed
Page 223

Products should be Product On page 223, step 4 is incorrect. Change: "Drag the Products table onto the design surface." To: "Drag the Product table onto the design surface."

Microsoft Press  Jul 13, 2010 
Printed
Page 224

“FillBySupplierID and GetDataBySupplierID.” should be “FillBySupplierID.” On page 224, steps 8.b. and 9.b. are incorrect. Change: "Name the query "FillBySupplierID and GetDataBySupplierID."" To: "Name the query "FillBySupplierID.""

Microsoft Press  Jul 13, 2010 
Printed
Page 224

Incorrect instruction in step 5 On page 224, the second sentence of step 5 is incorrect. Change: "In the wizard, when entering the SQL statement, select all fields except the SupplierLocation field." To: "In the wizard, when entering the SQL statement, select all fields."

Microsoft Press  May 06, 2010 
Printed
Page 230

scope.Commit() missing from code sample On page 230, an additional line is needed in the code sample. Change: Using scope As New TransactionScope() SaveCustomer(ds) SavePurchase(ds) End UsingTo: Using scope As New TransactionScope() SaveCustomer(ds) SavePurchase(ds) scope.Commit() End Using

Microsoft Press  May 06, 2010 
Printed
Page 292-294

Multiple entries should be removed from Table 6-1 On pages 292-294, the following rows should be removed from Table 6-1: Join SelectMany ThenBy ThenByDescending ToDictionary ToLookup

Microsoft Press  Jul 13, 2010 
Printed
Page 299

Incorrect description of step 3 On page 299, the descript ion of step 3 is incorrect. Change: "Inside the Main method, create an instance of the GameList class called games. Also, add a reference to the GameList namespace to the top of the file, as shown here:" To:"Create a query to retrieve the games:"

Microsoft Press  May 06, 2010 
Printed
Page 321

Systen.Environment should be System.Diagnostics On page 321, the second sentence of Practice 1 is incorrect. Change: "Use LINQ to query the process list that is returned by System.Environment’s Process class." To: "Use LINQ to query the process list that is returned by System.Diagnostics’s Process class."

Microsoft Press  Jul 13, 2010 
Printed
Page 330

"XmlReadMode.Ignore schema" should be "XmlReadMode.ReadSchema" On page 330, the last sentence is incorrect. Change: "Alternatively, you can use XML schema to define the layout and only use XmlReadMode.Ignore schema as you’ll see in the next section." To: "Alternatively, you can use XML schema to define the layout and only use XmlReadMode.ReadSchema as you’ll see in the next section."

Microsoft Press  May 06, 2010 
Printed
Page 364

VideoGameStoreDB should be VideoGameStoreDBContext On page 364, the second sentence of the "DataContext" section is incorrect. Change: "VideoGameStoreDB is a class that inherits from System.Data.Linq.DataContext." To: "VideoGameStoreDBContext is a class that inherits from System.Data.Linq.DataContext."

Microsoft Press  Jul 13, 2010 
Printed
Page 375

Line missing from code sample On page 375, the VB code is missing a line. Change: Select c Return query.ToList() End FunctionTo: Select c Trace.WriteLine(query.ToString()) Return query.ToList() End Function

Microsoft Press  May 06, 2010 
Printed
Page 380

SELECT statement duplicated On page 380, the code sample in the UPDATE STATEMENT section is incorrect. Change: exec sp_executesql N'UPDATE [dbo].[Product] SET [ListPrice] = @p2 WHERE ([ProductID] = @p0) AND ([ProductVersion] = @p1) SELECT [t1].[ProductVersion] FROM [dbo].[Product] AS [t1] WHERE ((@@ROWCOUNT) > 0) AND ([t1].[ProductID] = @p3)', N'@p0 int,@p1 timestamp,@p2 float, @p3 int',@p0=4,@p1=0x0000000000001696,@p2=39.930000000000007,@p3=4 SELECT [t1].[ProductVersion]' FROM [dbo].[Product] AS [t1] WHERE ((@@ROWCOUNT) > 0) AND ([t1].[ProductID] = @p3)', N'@p0 int,@p1 timestamp,@p2 float, @p3 int',@p0=4,@p1=0x0000000000001696,@p2=39.930000000000007,@p3=4To: exec sp_executesql N'UPDATE [dbo].[Product] SET [ListPrice] = @p2 WHERE ([ProductID] = @p0) AND ([ProductVersion] = @p1) SELECT [t1].[ProductVersion]' FROM [dbo].[Product] AS [t1] WHERE ((@@ROWCOUNT) > 0) AND ([t1].[ProductID] = @p3)', N'@p0 int,@p1 timestamp,@p2 float, @p3 int',@p0=4,@p1=0x0000000000001696,@p2=39.930000000000007,@p3=4

Microsoft Press  Jul 13, 2010 
Printed
Page 386

Step 7 should be removed On page 386, step 7 is incorrect and should be disregarded.

Microsoft Press  May 06, 2010 
Printed
Page 409

OfProduct should be Of Product On page 409, the 14th line of the code sample is incorrect. Change: ObjectQuery(OfProduct) = theContext.ProductTo: ObjectQuery(Of Product) = theContext.Product

Microsoft Press  Jul 13, 2010 
Printed
Page 410

Error in code sample On page 410, the 10th line of the code sample is incorrect. Change: ObjectQuery productQueryUsingNavigationProperty =To: ObjectQuery productQueryUsingNavigationProperty =

Microsoft Press  May 06, 2010 
Printed
Page 437

OPERATOR should be FUNCTION On page 437, the title of the left column in Table 10-7 is incorrect. Change: "OPERATOR" To: "FUNCTION"

Microsoft Press  Jul 13, 2010 
Printed
Page 455

Code should be Practice Files On page 455, the second sentence of the Lab section is incorrect. Change: "All the lab files can be installed from the Code folder on the companion CD." To: "All the lab files can be installed from the Practice Files folder on the companion CD."

Microsoft Press  May 06, 2010 
Printed
Page 459

1943 should be 1942 On page 459, there are three references to “1943: Joint Strike” that should read "1942:Joint Strike." In step 6, change: "In the else part of the if statement, change the game’s ProductName to “1943: Joint Strike” (note that the year is changing)." To: "In the else part of the if statement, change the game’s ProductName to “1942: Joint Strike” (note that the year is changing)." On the 6th line of the VB code sample, change: game.ProductName = "1943: Joint Strike"To: game.ProductName = "1942: Joint Strike"On the 9th line of the C# code sample, change: game.ProductName = "1943: Joint Strike";To: game.ProductName = "1942: Joint Strike";

Microsoft Press  Jul 13, 2010 
Printed
Page 466

Visual Studio 7 should be Visual Studio 97 On page 466, the explanation for answer D of Question 1 of Lesson 2 is inaccurate. Change: "Correct: Typed DataSets were introduced in Visual Studio 7." To: "Correct: Typed DataSets were introduced in Visual Studio 97."

Microsoft Press  May 06, 2010 
Printed
Page 476

EntityClass Model should be Entity Data Model On page 476, the explanation of answer D to question 2 is incorrect. Change: "Incorrect: This answer refers to the EntityClass Model source code file." To: "Incorrect: This answer refers to the Entity Data Model source code file."

Microsoft Press  Jul 13, 2010 
Printed
Page 479

DataAdapter definition is incorrect On page 479, the definition for DataAdapter is incorrect. Change: "DataReader is used to consume data in a read-only, forward-only, sequential and unbuffered fashion." To: "Represents a set of SQL commands and a database connection that are used to fill the DataSet." Microsoft Press is committed to providing informative and accurate books. All comments and corrections listed above are ready for inclusion in future printings of this book. If you have a later printing of this book, it may already contain most or all of the above corrections.

Microsoft Press  May 06, 2010