When Microsoft introduced an alpha version of the Microsoft .NET Framework to a small group of developers, the developers were immediately excited. Those of us attending this kickoff meeting understood the vision of .NET right away:
-
A common language runtime
-
Different languages with the same code base
-
Cross-language compatibility
-
Full object-oriented programming (OOP) for all languages
-
The chance to say goodbye to DLL hell
-
The chance to say goodbye to memory leaks
-
A truly integrated development environment, or IDE (even though the first alpha version crashed more often than it worked)
Most of us were anxious to get our hands on this new tool and couldn't wait to test its features for developing Web applications, dealing with disconnected data, building more powerful components, and creating applications easier, faster, and more reliably. Almost two years after that initial introduction and after using the public betas for over a year, we finally have the tool in our hands. We had the opportunity to build several large applications with late beta versions and were astounded at these applications' stability and the ease with which we could develop them. Naturally, we used the release version of the .NET Framework with our applications as soon as it was available. Again, we were amazed at the performance gains and even greater stability. One of the components we're going to present in Chapter 4 is a data access component for the data access layer. We created it in early betas, improved it over time, and compiled it in the release version. It has proven to be one of the most powerful and reliable tools we've ever seen. Millions of hits (data accesses to Microsoft SQL Server 7 and Microsoft SQL Server 2000 databases) have been handled by this component without the slightest indications of problems (obviously, after we debugged and performed initial testing). Even better, this component has taken advantage of the performance enhancements Microsoft ADO.NET can offer while decreasing the load on Web servers, middle-tier servers, and SQL servers in a way we never anticipated. This book offers you the full functionality and source code of this component and others for your own applications. In addition to being able to use the components we present in this book, you'll learn the details of how they were created so that you can extend and modify them if necessary.
Many of the early adopters of the technology—authors of Microsoft .NET books and attendees at .NET-centric conferences—share a common feeling: the fun is back in creating applications. Many years ago, we remember having to write applications in various assembler languages; passing individual bytes in and out of processor registers and stacks; packing code for applications into 8 or 16 KB of memory (that's kilobytes, not megabytes or gigabytes, which we're used to today); and creating accounting applications, calculators, games, and so on. That was tough as nails, but it was fun. Around the time when Microsoft Windows and Microsoft Windows 95 entered the scene, we started stepping on each other's toes with conflicting DLLs, quirky windows message calls, and pervasive memory leaks, to name a few issues, and the fun we experienced in the earlier days was slowly but surely dwindling away. We can truly say that it's back again.