In the past I've published some generic AddWithValue extensions to the IDbCommand interface that allow you go simplify your code on ADO.Net providers that don't support AddWithValue. Today I wanted to provide an extension that is specifically for the SqlCommand object that allows the passing in of an explicit SqlDbType instead of the generic DbType which should provide a more fine tuned experience for those that predominantly deal with SQL Server.
The following extensions would be used something like this:
VB.Net Usage
cmd.AddWithValue("@stack_trace", SqlDbType.VarChar, 1024, ex.StackTrace)
C# Usage
cmd.AddWithValue("@stack_trace", SqlDbType.VarChar, 1024, ex.StackTrace);
VB.Net
''' <summary>
''' Adds a parameter with length and value into the commands parameter collection.
''' </summary>
''' <param name="cmd"></param>
''' <param name="paramName"></param>
''' <param name="dbType"></param>
''' <param name="size"></param>
''' <param name="value"></param>
<Extension()> _
Public Sub AddWithValue(cmd As SqlCommand, paramName As String, dbType As SqlDbType, size As Integer, value As Object)
Dim param As New SqlParameter(paramName, dbType, size)
param.Value = value
cmd.Parameters.Add(param)
End Sub
C#
/// <summary>
/// Adds a parameter with length and value into the commands parameter collection.
/// </summary>
/// <param name="cmd"></param>
/// <param name="paramName"></param>
/// <param name="dbType"></param>
/// <param name="size"></param>
/// <param name="value"></param>
public static void AddWithValue(this SqlCommand cmd, string paramName, SqlDbType dbType, int size, object value)
{
SqlParameter param = new SqlParameter(paramName, dbType, size);
param.Value = value;
cmd.Parameters.Add(param);
}