Western Governors University

C969: Software II – Advanced C#

A study guide to WGU's C969, the advanced C# course on lambda expressions, collections, file and database input and output.

Updated October 2026 · 5 min read

C969 Software II – Advanced C# is the Western Governors University course that follows C968 and takes C# into database and file-based applications.

WGU describes it as refining object-oriented programming expertise and building database and file server application development skills. You learn about and put into action lambda expressions, collections and input/output to develop C# software that meets business requirements. It requires intermediate expertise in object-oriented programming and C#.

Students find the step up comes from integration. A database, user interface, business rules, logging and error handling all have to work together reliably.

Course at a Glance

ItemDetails
UniversityWestern Governors University (WGU)
Course codeC969
LevelUndergraduate, competency-based
Builds onC968 Software I – C#
Core skillsLambda expressions, collections, file and database I/O
Typical workA database-backed application built to business requirements

What C969 Covers

TopicIn plain language
Lambda expressionsShort inline functions used for filtering, sorting and events
CollectionsGeneric and non-generic collections such as List, Dictionary and queues
Database accessConnecting to a relational database and running queries safely
File I/OReading and writing files, for example activity logs
Advanced exception controlHandling errors so the application stays stable and helpful

Key Concepts Explained

Lambdas and LINQ

A lambda such as x => x.Price > 50 is a compact function. With LINQ, lambdas make queries over collections readable.

Example: var today = bookings.Where(b => b.Start.Date == DateTime.Today).OrderBy(b => b.Start).ToList(); returns today's bookings in time order, replacing a loop, an if statement and a manual sort.

Choosing a Collection

Use List<T> for ordered items, Dictionary<TKey, TValue> for fast lookup by key and HashSet<T> to prevent duplicates. Generic collections are type-safe; non-generic ones such as ArrayList store objects and need casting, which is why modern code prefers generics.

Safe Database Queries

Never build SQL by joining user input into a string; it invites SQL injection. Use parameterised commands.

Example: cmd.CommandText = "SELECT * FROM customer WHERE name = @name"; then cmd.Parameters.AddWithValue("@name", txtName.Text);. The database treats the input as data, never as code. Wrap connections in using blocks so they close even if an error occurs.

Dates, Times and Logs

Business applications often store dates and times, and errors here are common. A reliable pattern is to store times in UTC and convert to the user's local time zone only for display, using TimeZoneInfo. This avoids confusion when users are in different places or clocks change for daylight saving.

File I/O commonly appears as logging, for example appending a timestamped line each time a user signs in with File.AppendAllText. Keep log writing in one helper method so the format stays consistent.

Advanced Exception Control

Beyond simple try and catch, good C# code catches specific exceptions first, such as a database exception or a format exception, and reserves a general catch for the unexpected. A finally block or a using statement releases resources whatever happens.

You can also define your own exception class for business-rule failures, such as an overlapping booking, and throw it from the business layer. The form catches it and shows the message, which keeps rules and interface separate.

Example: A save method checks whether a new booking overlaps an existing one with bookings.Any(b => start < b.End && end > b.Start). If it does, it throws a custom BookingConflictException with a clear message. The form catches that exception type and tells the user which time is free, without crashing or saving bad data.

Typical Work and How to Approach It

ElementWhat it testsHow to approach it
Database CRUDData accessParameterised queries in a data layer
Business rulesValidationCheck rules before saving, with clear messages
Lambda useRequired language featuresUse them where they genuinely simplify code
Reports or queriesCollections and LINQGroup and filter, then display results

Where Students Get Stuck

Study Tips for C969

How We Help with C969

Send the task instructions, rubric, your solution and any evaluator comments. A C# developer explains lambdas, collections and data access, reviews your code, and helps you debug and structure the application.

GradeEssays is independent of Western Governors University. We teach and review; the code you submit must be your own under WGU's academic integrity rules, and we never access student accounts. Revisions within the scope of your original request are free.

Move Your C969 Project Forward

Share the task, code and evaluator notes. A C# tutor explains each issue and how to resolve it.

Start My C969 Help

Free revisions · Full refund if late · Written from scratch for your order

Frequently Asked Questions

What does C969 cover?

Advanced C#: lambda expressions, collections and input/output for database and file-based applications that meet business requirements.

What should I know before C969?

Intermediate object-oriented programming and C#, usually from C968 Software I – C#.

What is a lambda expression?

A compact inline function, such as b => b.Price > 50, often used with LINQ to filter and sort collections.

How do I prevent SQL injection?

Use parameterised commands so user input is always treated as data, not part of the SQL statement.

Why store times in UTC?

It gives one consistent reference, so converting for users in different time zones stays accurate.

Can you review my C969 code?

Yes. We explain problems and fixes so you understand and finish the work yourself.