我有两种方法可以将可空参数加载到SqlCommand中;
public static void LoadParameter<T>(Nullable<T> parameter, string name, SqlCommand cmd) where T : struct
{
if (parameter.HasValue)
cmd.Parameters.AddWithValue(name, parameter);
else
cmd.Parameters.AddWithValue(name, DBNull.Value);
}
和
public static void LoadParameter(string parameter, string name, SqlCommand cmd)
{
if (!string.IsNullOrEmpty(parameter))
cmd.Parameters.AddWithValue(name, parameter);
else
cmd.Parameters.AddWithValue(name, DBNull.Value);
}
我的问题是下一个: 我可以只使用一种方法来获得相同的结果吗? 我可以在这个(新的)方法中添加“no Nullables”参数并仍在工作吗? I.E. Int16,Int32,Int64等
谢谢!
答案 0 :(得分:4)
你可以做到
public static void LoadParameter<T>(T parameter, string name, SqlCommand cmd)
{
if (parameter != null && !string.Empty.Equals(parameter))
cmd.Parameters.AddWithValue(name, parameter);
else
cmd.Parameters.AddWithValue(name, DBNull.Value);
}
string.Equals
如果与非false
进行比较,则会返回string
,因此此代码应该有效。
答案 1 :(得分:0)
您可以这样做,但检查null不适用于值类型,例如int32将默认为0.您如何找到0是实数值还是空表示。如果您对每种值类型都有特定的大小写,那么您可以使用类似的
public void LoadParameter<T>(T parameter, string name, SqlCommand cmd)
{
switch (typeof(T).Name)
{
//TODO: case statements to handle different types.
}
}