我正在分析并制作Windows Service应用程序。
进行插入查询时,我使用 List<SqlParameter>
和addrange添加列。
在 List<SqlParameter> pmlist = new List<SqlParameter>(keys);
行中,它包含{@deptcode}。
然后 pmlist.AddRange(pms);
行,添加了PMS参数。
我前面提到的总线PMSlist已经具有{@DeptCode}
,因此PMLIST具有这样的值
pmlist = [0] {@DeptCode} [1] {@DeptCode} [2] {@DeptName}
[3] {@ParentDeptName} [4] {@ParentDeptCode} [5] {@DeptLevel}
deptCode是重复的。因此,它试图将查询插入Shadow -thepttable,
它也有5列,SQL异常。
如何删除或不获得重复的值?请帮我...
代码在下面。
//table : ShadowDeptTable , keys = {@DeptCode},
//pms = [0] {@DeptCode} [1] {@DeptName} [2] {@ParentDeptName}
// [3] {@ParentDeptCode} [4] {@DeptLevel}
public static int InsertOrUpdate(string table, SqlParameter[] keys, params SqlParameter[] pms)
{
int st = 0;
string constr = Util.GetPropVal(Words.PropConnectionString);
var obj = SqlHelper.ExecuteScalar(constr,CommandType.Text,sb.ToString(),keys);
StringBuilder sb=new StringBuilder();
sb = sb.Append("insert into " + table + "(");
//columns
string cols = null;
//values
string vals = null;
List<SqlParameter> pmlist = new List<SqlParameter>(keys);
pmlist.AddRange(pms);
cols = string.Join(",", pmlist.Select(a => "["+a.ParameterName.Substring(1, a.ParameterName.Length-1)+"]"));
vals = string.Join(",", pmlist.Select(a => "'" + a.Value + "'"));
sb = sb.Append(cols);
sb = sb.Append(") values(");
sb = sb.Append(vals);
sb = sb.Append(")");
obj = SqlHelper.ExecuteScalar(constr, CommandType.Text, sb.ToString());
return Convert.ToInt32(obj);
}
我没有将您的代码挖掘到很多。假设我们只是在谈论删除重复项。
如果要通过参数名称删除重复项,也许可以尝试以下操作:
var merged = keys.Union(pms).GroupBy(p => p.ParameterName).Select(e => e.First());
它将合并两个数组,按参数名称组,然后从每个组中选择第一个项目。
尝试使用除
以外List<SqlParameter> newPms = pms.Except(pmlist).ToList();
pmlist.AddRange(newPms);