was successfully added to your cart.

C# Application From Start to Finish

See a Real-World Application Built From Scratch…and learn to do it yourself

Have you ever tried to go through a tutorial in order to learn a topic, only to find that it was too simplistic? Or maybe it was too advanced and assumed you knew multiple topics that you didn’t know. This isn’t that tutorial. This is a Tim Corey tutorial. What does that mean? It means you are going to learn not just what to do but why. Don’t take my word for it though. Listen to what people said about this course’s little brother:

“What a nice, gently and thoughtfully paced tutorial. This is one of the few valuable tutorials on C# that I have come across lately. You Rock Tim!” ~Ibrahim Badaru

“Have been scouring the internet for C# learning and I have Lynda.com. This is by far the best. Would like to see more C# from Timothy Corey.” ~Donald B

This course will walk you through the entire process of designing and building a real-world application.

Featured technologies used include

  • Interfaces
  • Email
  • SQL
  • Text Files
  • App.config data storage and retrieval
  • OOP
  • Texting (only for people who purchase this course – it will not be published on YouTube)

Exclusive Course Bonuses

If you purchase this course, you will gain access to a number of bonuses including

  • 40+ page Companion Guide e-book
  • All SQL Database scripts
  • Source code for every step (using git commits)
  • Ad-free videos
  • Everything available right now (YouTube users will get this series over time)

Add-On Courses Available

Want to change out that WinForms user interface for something more modern? This course has two add-on courses that do exactly that. Choose between WPF using MVVM and ASP.NET MVC…or pick both for twice the fun. Note: the base course is required to purchase these add-ons

See WPF Add-On Description Add WPF Add-On to Cart

See ASP.NET MVC Add-On Description Add ASP.NET MVC Add-On to Cart

Take this Course

Join the discussion 60 Comments

  • Randall says:

    Hi Tim. Is the source code available at this point? I scoured the e-mails and don’t fine any ‘resources’ mentioned.

    • Tim Corey says:

      In the course introduction you will find the links to download the source code, the database scripts, and the companion guide.

      • Randall says:

        Okay Tim. Thank you. I think that when I downloaded and started to read the Guide I became distracted and forgot to go back.

      • Bobby says:

        Tim, do have any c# course for beginners with MVC not winforms? Advise please. Thanks!

        • Tim Corey says:

          And that is the issue: beginners. Trying to start at MVC is like trying to do surgery before you have learned how to put in an IV line. The complexity is so much higher with MVC. You need to have a good foundation in C# and in UI development before you think about adding in the complexity of controllers, models, views, routing, HTML, CSS, JavaScript, and more. With that being said, if you go through this start to finish course using WinForms, there is an add-on course that replaces the WinForm UI with ASP.NET MVC. So in essence, yes, this course does do MVC but it does it after you are (hopefully) comfortable with C#. The add-on course deals with just the UI so there is much less complexity because we almost don’t need to worry about C# (and we definitely don’t worry about data access or the business logic since those are already done).

  • Mark Gregory says:

    Hi Tim,

    Can you tell me more about the section on the UI.

    I’m embarking on a new project and I really need something in depth on C# for winforms. Now, I know there are lots of video tutorials out there, but frankly I find most of the speakers have heavy accents and I find them incomprehensible. Now for me, even you have a ‘smattering’ of a colonial or even commonwealth accent 😉 , but I find your delivery to be just the ticket.

    This isn’t my only issue with video tutorials. Often they show no sign of their own thought – often giving the “whats” and not the “whys”, and they don’t offer “snippets” of insight that make what they’re delivering personal (to me or to themselves.) They seem to follow the adage we used to use at college … ‘a lecture is a way of copying notes from the lecturer to the notes of the student without going through the minds of either’. This makes the learning experience akin to learning tables – and though I can still recite my tables, I want a bit more. I want to be offered the ‘spark’, the ability to be able to reconstruct the knowledge (as if from first principals) if I can’t remember it all directly.

    What I have seen on YouTube, not only do you come over as very competent in the subject matter and good at presentation, but you’re also enthusiastic about the subject – as if you’d still be doing this even if you didn’t need to keep the wolf from the door. This probably makes product like yours one of the more worthwhile options.

    I know this may come over as at best wanting the world, at worst a tad jingoistic, maybe even patronising. It is in fact none of these. I’m a dyslexic with motivation issues and I find that I like a personal approach to learning, with a good infusion of enthusiasm and occasional jocularity.

    Oooh, sidetracked a bit from my original question …
    Do you have any winforms in C# going on in the course?

    Thanks

    • Tim Corey says:

      Mark,

      You honestly made me laugh with this comment. I definitely wasn’t thinking anything negative about your comment, even before you clarified. I can’t say anyone has ever told me that I have a bit of a colonial accent before. 🙂

      As to your original question, yes, we use WinForms throughout this course as our sole UI. The system is set up so that you can swap out the UI fairly quickly (although we don’t), but that too is beneficial to see if you are interested in WinForms. The application uses 5 forms and passes data between them. It isn’t highly advanced WinForm development but it is real-world. In Lesson 4 you will get to see all of the forms and roughly how they relate to each other. You will see them in their more final form in Lesson 7 and by Lesson 9, you will see the start of how to hook them up. I hope that helps clarify for you what goes on in the course.

      Thanks for the kind words about my channel and my speaking style. I’m glad my enthusiasm for C# comes across. I definitely do this because I love software development and the developers who are trying to get started in it. I remember being a new developer. I could have used some help but I struggled through. Now I’m on the other side and doing my best to be the help I didn’t really get. I believe in this so much that for the past two years, I’ve paid out thousands of dollars and dedicate hundreds of hours to produce the videos that I have. While I would love to be making a profit off of this channel, that’s not really the primary goal. The primary goal has always been to help less-experienced developers learn programming easily and the right way.

  • Randall says:

    Hi Tim. I am approaching the half-way point now and enjoying the course.

    But once again I must have missed something. For a third time (in the videos) you have referred to “get” stored procedures and said that we already have them. I don’t think I missed a second of any lesson (unless I fell asleep and don’t remember), yet I only recall creating two “insert” stored procedures so far. I looked through the Guide and found nothing there.

    So help me out please–where do I find the info about creating the “select” stored procedures? I see that there are several of them. I could probably figure it out on my own, but it’s been a long time since I created any. Thanks.

    • Tim Corey says:

      Wow, you are really cruising through the course. I do think you missed something, though, since I believe I created all of the get stored procedures on screen (I tried very hard not to do anything off-screen). Look in lesson 8 at around the one hour mark. You should see the gets being created. You can also see the resulting stored procedures in the SQL scripts download, but I would imagine seeing me build them will be more beneficial.

  • Randall says:

    Again Tim thank you for your speedy reply. Yes, I am just a lazy ol’ retired guy with lots of time on his hands. And as I said–I am enjoying the course a lot. So give me a couple more days and I should be done.

    As for that Lesson 8 video (I remember watching that part before), there is some stuff even around the 50-minute marker about SPs. Particularly the one about the TestPerson_GetByLastName. But as far as on-screen creation of all 21 stored procedures, I simply could not find it. Maybe they are interspersed in later videos as the SPs are needed in the instruction.

    What made me ask was that I saw that slew of SPs on the screen when you were doing other things. I heard you say that we already had those SPs, at which time I said to myself, “When did we create those?” It wasn’t until Lesson 13 (Part 2 of Team Form) when you just referred to the People_GetAll SP without creating it that I realized that I had missed something somewhere along the road.

    It will be interesting to see of other students make comments about this. I am getting long in the tooth, and my Alzheimer’s may be more advanced than I realize. At this point it’s all good–I created all the SPs with the scripts so I’m ready to head for the finish line.

    Yours is quality work Tim. It’s good material. I hope you get lots of customers. I will give a shout out on Facebook–the only place I have. Sadly as far as I know none of my friends are computer geeks–especially with the time and desire to undertake something of this scope.

  • Randall says:

    Hi Tim. I’m looking for a couple of clarifications. They may have been mentioned in the discussion about requirements and I simply don’t remember.

    In Lesson 17 (Create Tournament Part 3):

    1) Are prizes always required?
    2) I created a ValidateForm() method like yours in the Create Prize segment — one of the validations is that at least TWO teams are in the selectedTeams list. (Doesn’t seem like much of a tournament if only one team enters and the winner is already known). I do recall discussion about whether there could be an odd number of teams and the need for byes. But I don’t recall a validation that at least two teams be entered before clicking the [Create Tournament] button.

    • Tim Corey says:

      Prizes are not required, just like an entry fee is not required. There are many times where tournaments are just for fun or the prizes are trophies. In either case, a prize could not be awarded through this system.

      A two-team minimum validation would be a good option. You are right that it wouldn’t make sense to have a one-team tournament. That particular check wasn’t high on my list just because it wouldn’t actually hurt anything if they did a one-team tournament. Some things cause actual issues. Those were of higher priority.

      I intentionally built this application as a version one app. There is a LOT more you could do to it to make it more full, feature-rich, and overall better. I would encourage you to do so. Doing is so much better a teacher than just watching.

  • Marco says:

    Hi Tim,

    Thanks for creating this so far awesome course about some real life application. It really helps out learning since it is an entire thing and not only some specific snippets. Actually love to see how things come together well 🙂

    I lastly watched Lesson 18, and men, I really hope this string building is going to end up in some sort of generic Aggregate Lamda or so^^.
    A while ago I had some quite similar thing ongoing which looked like this –> someList.Aggregate((a, b) => a.Id + “,” + b.Id);

    Please keep up the good work 🙂

    • Tim Corey says:

      You will have to stay tuned to find out what happens. 😉 Seriously though, you will see spots that need to be optimized. In fact, I’m far from happy with the final version. But if you aren’t dissatisfied with the first production version of something, you are doing too much fiddling and not enough launching. The next version will be up to you. Make notes as you go of features that you want to see added. Then, prioritize the list and once you complete the course, start building a new release. Practice what you learned and see how far you can take it. For double bonus points, put that new UI on it. Make it WPF or ASP.NET MVC.

  • Kenan says:

    Hi Tim,
    I really like your style of explanation.
    Everything is fine in this release, but I think that most
    of your students would be very happy to see topic
    on IOC/DI, as well as testing the appl.
    Cheers,
    K.

  • Greg Coopman says:

    What is the total video time of this course?

  • Popescu says:

    Great course… I’ve learn so much on SQL, wiring up the UI and the library using DRY principles… thank you Tim!

  • Greg Coopman says:

    Are the videos downloadable?

    • Tim Corey says:

      No, the videos are not downloadable. That is one of my only checks against piracy. When the time comes to retire this course (years from now when it is no longer relevant to most people), I will provide all subscribers with a way to download the videos before I remove them.

  • GREG says:

    Just downloaded the app and got the database loaded and the forms running. Currently, on lesson 6, but already I am really liking this course. You broke it down into a full application, but still simplified enough for a great tangible learning experience. Looks like just right balance to make a challenging subject, conquerable. Thanks.

    In a past life, I use to run tennis tournaments, so this application actually talks to me (not really, I am not hearing voices ….yet.)

  • Tim, In one video you mentioned the icons were created with the product SyncFusion (which is a very interesting product and free if your company makes less than $1 million a year and less than 5 developers with the “Community License”) Anyway, I know this is not directly related to the course, other than the icons, but did you build iamtimcorey.com yourself? and if you did, did you use a lot of the SyncFusion components?

    • Tim Corey says:

      I actually did not build this site myself. It is based upon a WordPress theme called Salient. I then had a friend who owns a website development firm build the site out for me from there. He’s a great designer and friend. Check him out at http://studiojwal.com/. As for using SyncFusion components, no he didn’t. Typically you see those icons used more in a Windows App-type environment because that’s how they’ve been designed. I’m not sure where the icons on this site originally came from but I believe they are all a part of the theme.

  • stevec@nikosinc.net says:

    New to SQL. I have downloaded all the scripts. What is the procedure to import the scripts into database. I have installed SQL 2014 Express and the server management studio. Create course!!
    Thanks

    • Tim Corey says:

      To run the scripts, open up SSMS (the Management Studio) and then do a File -> Open on each script file. Run the script that creates the database first, then the table scripts, then the stored procedure scripts. To run a script, simply hit the Execute button (with red exclamation point) or hit F5. You should be able to see how I do it in the videos.

      Not trying to sell you on anything, but I do have a SQL course on this site that will get you fully up to speed on being a SQL developer. If you are thinking you might need to use SQL for a job, I’d recommend going through the course.

  • Javed says:

    Hello Brother Tim, Hope you are good in health with High Spirits of Faith.. I just Purchased the Course. I will definitely give my Feedback soon. I have been watching your free courses on Youtube. And the way you deliver and explain is simply amazing. I really like the way you deliver the lectures. You are doing a great Job Brother.

  • Tim Corey says:

    Not in this course. I’ve got a course coming up this summer that will include unit testing. That’s a topic unto itself and at 25 hours of teaching, I didn’t feel I could add more content to this course than I already had. I tried to keep focused on the primary objective. I may revisit this course a time or two to add more functionality (a different UI – web or WPF, code upgrades, unit testing, etc.) We will see about that.

  • Joseph says:

    Thank you, Tim! Your work is helping me comprehend this much better than anything else I’ve found.

  • Thabiso Ntuli says:

    .Hello’ Mr T, I am new on your side and videos from youtube. I am embarking a school project and I am doing a web-based project based on tournament bracket or tracker, so I would like to know if do you do any focus on web-based?, source codes etc. Thank you brother.

    • Tim Corey says:

      Well, I did just release a video on YouTube on ASP.NET MVC. However, I’m also going to be creating an add-on course for this course that will be focused on replacing the user interface (WinForms) with ASP.NET MVC. I’m also doing one for WPF as well. Those should be out in the next month or so.

  • Tshims79@gmail.com says:

    Hi Tim,
    I was watching you last night and I compare you to others but I found myself that I choose your training plan to be a friend of my journey.

    Let me just sort out my PayPal then I will come back to you.

    Kind regards.

  • korchix says:

    Hi Tim, i found your videos on youtube really good, and the way you explain thing is also really good.
    i’m wondering if you’re interested on making courses for poeple interessted on programming mobile apps with xamarin

    • Tim Corey says:

      Thanks for the question. At this point, I probably won’t be doing a Xamarin video in 2017. I’ve got too much other things to do and I’m not yet settled on Xamarin being stable and a good choice yet.

  • Stephan Mueller says:

    Hi Tim, do you have any updates to share for the additional content? I thought you wanted to release videos for WPF Application, any ETA on that?

    • Tim Corey says:

      Sorry for the delay in getting back to you on this. I was actually working on the courses when you asked, which is why I was slow to respond.

  • Hi Tim
    The problem I seem to have is that I forget the code, which I learn, and I believe that is due to not coding often enough. So I want to ask you if that is true, given that you are a developer. What activities, habits, and factors contribute to knowing some APIs, and is that something you have to be concerned about; further, how does this lesson help with learning the implementation of functionalities such as email, which you mentioned in lessor three I believe it was. I am not sure if this question has been asked; what is your recommendation on how to use the content you put together please? That is, this is my plan so far:
    1- Watch the youtube videos
    2- Read the APIs you mention in the videos
    3- Put as much of the code in as I can
    4- See if I can fit SQL server on my laptop, as I have 250G of a space, or try to use the text file method, or see if I can install a similar db solution on the other laptop ( an older, slower laptop with larger hard drive running Ubuntu ), and communicate between the two.
    What do you think? Am I missing anything?
    Sean

  • I forgot to add to the list…
    purchase the packet
    (optional) Modify the UI to web or app – I think you mean mobile app?

    • Tim Corey says:

      I’ll try to reply to both of your comments here. First, the best way to retain code is to use it repeatedly. That’s why I talk about practice all the time. If you just watch me do something and try to remember it, it most likely won’t happen (unless your memory is a lot better than mine). Practice will help you retain the information.

      As far as learning APIs, I’m not sure what you mean. I think you mean certain libraries or code bits. If that is the case, again, it comes down to practice. Use them repeatedly and intentionally. If, when you refer to APIs, you are referring to the web-based data connection, the only thing I recommend learning there is which ones exist. They constantly change and trying to remember how to use a specific API would be practically useless, especially since you won’t be using very many or very often.

      The best way to learn from this course is to watch the videos, do exactly the same thing I do (don’t just copy and paste the source code in), and then make sure you understand why you did what you did. If you come across something new, build a side project that utilizes the same techniques to make sure you have a good grasp on how to use it outside of the context of my application.

      As for SQL, I’m sure you can fit it in 250GB but in case you run out of room, you could also try an Azure SQL Server. You can get free credits for Azure from Microsoft. It is really easy to spin up a SQL Server on Azure. Then you just need the connection string and it will be no different than a local SQL Server. Just make sure you whitelist your IP address or the connection will fail. The Azure documentation will help you with that.

      When I talk about the two add-on courses (WFP and ASP.NET MVC), neither is a mobile app. One is a desktop app (WPF) and one is a web app (ASP.NET MVC). The term app is just short for application. It has been also turned into meaning a mobile application but that is really not the true meaning of the word.

  • Thanks. This helps a lot.

  • JIUDELLIO M DE SOUZA says:

    Hi Tim,

    About the Wpf add on. If i buy it, the videos lessons will be developing this App using wpf? Or it will still be in winforms and then you teach how to convert it to wpf?

    • Tim Corey says:

      The WPF add-on picks up where the main course ended. We start with the full working application that has WinForms. We create a new project in the solution that is for WPF. We build that new project in WPF. We reference the WinForm project as our design, but to be clear, we build the WPF user interface from scratch. There isn’t some type of converter or upgrade tool to change the WinForm project to a WPF project.

  • BingZL says:

    Hi Tim

    Please disregard the bug issue I have addressed in my previous comment. I have continued video 19 anyway all the way to the end, so I believe I just need to continue watching your video.

    Still, can you explain what is the reason to put keyword this in front of parameter List lines? and how can I have an access to course bonuses? Thank you!

    • Tim Corey says:

      The this keyword in this code:
      public static List ConvertToMatchupEntryModels(this List lines)
      turns this method into an extension method. That means it adds this method onto the List object so that it can be called directly. For instance, if I had a List called emailAddresses and I wanted to run the above method on that list, I would use the following code:
      emailAddresses.ConvertToMatchupEntryModel();
      Note that I didn’t have to pass the list in since it already knows about the list.

      As for the source code and other course bonuses, they are all provides as links in Lesson 1.

  • BingZL says:

    Hello Tim

    I have a question for you regarding the email design in this application. Let say if I what to make the email to look better how should I do it? It looks like it can be done by html. Should I go check out some html user guild? Thank you!

  • BingZL says:

    Hello Tim

    There is bug in the program that disables SCORE and TeamCompetingID in second round from updating in MatchupEntries in SQL. One of the culprit lines is: p.Add(“@id”, me.Id);. The Id is 0 for all Matchup Entries. I ran program with my and your source, the results all turned out to be the same. Then I kept looking the code over and over again. finally I found out why. You forgot to add -*- entry.Id = p.Get(“@id”); following the line, connection.Execute(“dbo.spMatchupEntries_Insert”, p, commandType: CommandType.StoredProcedure); -*- to method -*- private void SaveTournamentRounds(IDbConnection connection, TournamentModel model) -*-.

    Then, there came another bug, score for team in bye week should be null instead of 0 in MatchupEntries in SQL. and Scores for both teams in second round should be null before we entering the final scores. I will keep looking to see if I can come up with solution for myself. Thank you!

  • Alan says:

    Hi Tim,

    I’ve finally finished all 28 lessons, been really busy at work. Just like to say that even though I’m a C# developer (in WinForms too) the videos were still very helpful. Dapper, Papercut and the SMS bonus video were all very interesting to me as these were actually new. I purchased the MVC addon, so will be looking forward to that over the coming weeks, as MVC is very new to me. Please keep up the excellent work, can’t wait for a more intermediate course 🙂

  • Dwayne B says:

    Tim;

    Amazing work my friend. This course, can the data access ideas be moved to a web project? Meaning if I take this, can I muddle my way through connecting and accessing a database in an ASP.NET MVC Web application with Dapper? I can not find a clear, concise tutorial that shows the steps to add database functionality to your YouTube course “Introduction to ASP.NET MVC in C#: Basics, Advanced Topics, Tips, Tricks, Best Practices, and More”. Hell, it took me 8 videos of people with poor English and a few videos with no talking just music and “notepad” – that has the “bad typing” glitch in it. Just to figure out how to add a connection string, never mind that. I would really love to see the same course but add the database access concepts. I think I am about to buy, this class anyway. But I hope I’ll be able to integrate the ideas into an MVC web application with Drapper.

    • Tim Corey says:

      Absolutely. In fact, I created an add-on course where I replace the UI from this project with an ASP.NET MVC UI instead. The key to remember, though, is that your data access should not be directly connected to the UI (any UI). That means in my add-on course, I just work with the UI and never really address the data access because it is already done. I call the same methods in my ASP.NET MVC project as I do in my WinForms project. It shouldn’t matter which UI you choose, you should be able to access the database the same way.

  • Chris says:

    Hi Tim, Thank you for an excellent tutorial. This is a great way of getting to grips with C# and includes lots of tips and hints that you don’t get from books. So I can highly recommend this to anyone interested in learning C#.

    A couple of questions:-

    Can I use SQL server Express rather than Developer for the tutorial and other small projects. (I am retired and do small jobs for charities).

    Do you have a tutorial on interfacing with Access as I have various projects using Access.

    Your tutorial uses Visual Studio in a White on Black mode – is there a simple way of configuring 2017 community version. I can see under options a tedious way of doing this.

    Regards Chris

    • Tim Corey says:

      Yep, SQL Express will work just fine. As for tutorials about connecting to Access, I do not but the techniques I teach for connecting with SQL Server should work when connecting to Access (you just need an Access connection string). You cannot use stored procedures, but you can still do select statements or call queries. As for the color scheme I use, if you go to the Tools menu and select Options, the first option under the Environment section is General. In it, you will see color theme. I use the Dark theme.

  • Askar says:

    Tim, just wanted to thank you for the great course! I started it, but then got buried under work stuff. It is time to get back to a classroom! Can’t wait to finish WinForms so I can dig into MVC and WPF add-ons. MVC is a high interest to me. I watched Microsoft Virtual Academy, but they were talking a lot and really didn’t give much of useful information (lol). Thanks for making this tutorial affordable and extremely informative.

  • Taximaniac says:

    Great Course you have made here, watched and started using your youtube series, bought the course today to get the bonuses and to support you so you can make more good courses. Just because of your video and some google searches, I have started making a dll library for gathering data from game server XML files for Farming Simulator 17. Have come so far that I have managed to get data from the server stats XML file, so now only three files more to do. I must say as a real beginner I am proud of what I have accomplished and look forward to seeing my project come more to life.
    I added the project to my ms git repository at https://hauglandchristian.visualstudio.com/_git/FS17DediAppWin if anyone would look at it.

    I will buy the add-ons when I’ve finished the first course and have saved up some cash for it. keep up the good work Tim

    All the best
    Christian

    • Tim Corey says:

      That’s great! I’m glad you are really picking up the topics and also expanding on them to do new and interesting things.

      By the way, that repo is private so we can’t see it. You could make it a GitHub repo to share it. I’m not sure if VSTS can do anonymous viewing (haven’t tried since all of my company’s stuff is private).

Leave a Reply