3

私は分析し、Windows サービス アプリケーションを作成しています。

Insert クエリを作成するときは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が重複しています。そこで、ShadowDeptTable にクエリを挿入しようとして、

また、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);
}
4

2 に答える 2