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
| Item | Details |
|---|---|
| University | Western Governors University (WGU) |
| Course code | C969 |
| Level | Undergraduate, competency-based |
| Builds on | C968 Software I – C# |
| Core skills | Lambda expressions, collections, file and database I/O |
| Typical work | A database-backed application built to business requirements |
What C969 Covers
| Topic | In plain language |
|---|---|
| Lambda expressions | Short inline functions used for filtering, sorting and events |
| Collections | Generic and non-generic collections such as List, Dictionary and queues |
| Database access | Connecting to a relational database and running queries safely |
| File I/O | Reading and writing files, for example activity logs |
| Advanced exception control | Handling 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
| Element | What it tests | How to approach it |
|---|---|---|
| Database CRUD | Data access | Parameterised queries in a data layer |
| Business rules | Validation | Check rules before saving, with clear messages |
| Lambda use | Required language features | Use them where they genuinely simplify code |
| Reports or queries | Collections and LINQ | Group and filter, then display results |
Where Students Get Stuck
- Connection problems. Check connection strings, drivers and that the database is running before debugging code.
- Time zone bugs. Mixing local and UTC times produces bookings that drift by hours.
- Lambdas used only for show. Explain or comment why each lambda is used, if the task asks for justification.
- Unhandled database errors. Catch exceptions around data access and tell the user what happened.
Study Tips for C969
- Separate data access, business logic and forms into different classes.
- Test queries directly in the database tool before writing them in C#.
- Write a requirement checklist and test each item in the running application.
- Use Microsoft's official documentation on LINQ and TimeZoneInfo.
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 HelpFree revisions · Full refund if late · Written from scratch for your order
Frequently Asked Questions
Advanced C#: lambda expressions, collections and input/output for database and file-based applications that meet business requirements.
Intermediate object-oriented programming and C#, usually from C968 Software I – C#.
A compact inline function, such as b => b.Price > 50, often used with LINQ to filter and sort collections.
Use parameterised commands so user input is always treated as data, not part of the SQL statement.
It gives one consistent reference, so converting for users in different time zones stays accurate.
Yes. We explain problems and fixes so you understand and finish the work yourself.