Simply put, SQL Injection prevents malicious SQL statements form being possible to enter.
In the good old days, if you had a textbox accepting a name (or any other value), and there was no checking of what the user entered, it would be possible to comment out the running command (or to make it always run (SELECT * FROM Users WHERE UserName = 'ViagraFalls' OR 1=1 -- spits out all users, while SELECT * FROM Users WHERE UserName = 'a';DROP TABLE Users -- drops the table).
By requiring all parameters to SQL Stored Procedures to be added by using the cmd.Parameters.Add command, the user input is actually translated into a literal text-string, rather than potentially being harmless...
http://entropia-online.blogspot.com/