I did away with using "SqlParameter" for the parameters too and I have the date working now.
Return SqlHelper.ExecuteNonQuery(ConnectionString, DatabaseOwner & ObjectQualifier & "AddUserRole", PortalId, UserId, RoleId, ExpiryDate.ToString("yyyy-MMM-dd hh:mm:ss"))
BUT... what I really need is to be able to make the field NULL.
The sProc has a default value of NULL (@ExpiryDate datetime = null), but if I don't pass a value in the function, I get the error "Parameter count does not match Parameter Value count."
If I pass "Null.NullDate", I get the error "SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM."
If I pass "Null.NullString", I get the error "String was not recognized as a valid DateTime."
When I search the DNN code to see how they do it, it looks like they use ""Null.NullDate", but it doesn't work for me. Any idea how I can pass a null parameter?