我有下面的代码片段在构建根据提供的字典的值的格式一套那里的条件我的WCF web服务。
public static Dictionary<string, string>[] VehicleSearch(Dictionary<string, string> searchParams, int maxResults)
{
string condition = "";
foreach (string key in searchParams.Keys)
{
//Split out the conditional in case multiple options have been set (i.e. SUB;OLDS;TOY)
string[] parameters = searchParams[key].Split(';');
if (parameters.Length == 1)
{
//If a single condition (no choice list) check for wildcards and use a LIKE if necessary
string predicate = parameters[0].Contains('%') ? " AND {0} LIKE @{0}" : " AND {0} = @{0}";
condition += String.Format(predicate, key);
}
else
{
//If a choice list, split out query into an IN condition
condition += string.Format(" AND {0} IN({1})", key, string.Join(", ", parameters));
}
}
SqlCommand cmd = new SqlCommand(String.Format(VEHICLE_QUERY, maxResults, condition));
foreach (string key in searchParams.Keys)
cmd.Parameters.AddWithValue("@" + key, searchParams[key]);
cmd.Prepare();
请注意,在字典中的值显式设置为字符串,它们被送进唯一项目AddWithValue
语句。 这会产生这样的SQL:
SELECT TOP 200 MVINumber AS MVINumber
, LicensePlateNumber
, VIN
, VehicleYear
, MakeG
, ModelG
, Color
, Color2
FROM [Vehicle_Description_v]
WHERE 1=1 AND VIN LIKE @VIN
和错误出来说,
System.InvalidOperationException:SqlCommand.Prepare方法需要的所有参数有一个明确设置类型。
所有的搜索,我已经做了说,我要告诉AddWithValue
说我准备值的类型,但我所有的准备值是字符串,我见过的所有的例子,当他们在处理不进行任何额外的东西字符串。 我在想什么?