操作データベースでは、パラメータの数を制御するために必要な場合に、クエリ内のパラメータは、それ以外の場合はエラーになり、1000以上のことはできませんので、我々は、クエリで作っているという点に注意を払う必要があります:
配列を分解するための拡張メソッド:
/// <まとめ> /// アレイの数がグループ化される(クエリ1000個のエントリを超えることはできません) /// </要約> /// <PARAM NAME = "リスト"> </ PARAM> /// < paramの名前= "サイズ"> 番号</ param>の プライベートリスト<リスト< ロング >> GroupListBySize(一覧< ロング >一覧、int型のサイズ) { リスト <リスト< ロング >> listArr = 新しい新しいリスト<リスト< ロング >> ( ); INT arrSize = list.Count()%のサイズ== 0 list.Count()/サイズ:リスト?。)(カウント/サイズ+ 1 。 以下のために(int型 i = 0 ; iは<arrSize iは++ ) { リスト < 長い >サブ= 新しいリスト< ロング > (); 以下のために(int型 J =サイズを*; J <=大きさ*(I + 1) - 1 ; J ++ ) { 場合(j <= list.Count() - 1 ) { sub.Add(リスト[J])。 } } listArr.Add(サブ)。 } 返すlistArrを。 }
例えば:配列の長さは2500サイズ我々は1000渡し、3つの配列、長さに分解される(数に応じて分割数)であり、それぞれ、1000,1000,500。
サービス層インタフェースのメソッド:
/// <要約> /// 根据ID批量修改状态 /// </要約> /// <戻る> </戻り> パブリック ブール ButchChangeState(<リスト長い > IDS、INTの状態) { 場合(ids.Count > 0 ) { 場合(ids.Count()> 1000年) { VARのリスト= GroupListBySize(IDS、1000年)。 foreachの(VARのリストでリスト) { dal.ButchChangeState(リスト、状態)。 } } 他 { dal.ButchChangeState(IDS、状態)。 } を返す 真。 } 他 { 戻り 偽。} }
データベースの相互作用:
/// <まとめ> /// 変性状態/// / 0:実行、1:実行、2:実行は失敗し、3:発行する /// </要約> /// <PARAM NAME = " IDS "> </ param>の /// <PARAM NAME ="国家「> </ param>の /// <戻り値> </戻り値> 公共 BOOL ButchChangeState(一覧< ロング > IDS、int型の状態) { IF(IDS。 COUNT> 0 ) { 文字 idStr = 文字列 .join(" " 、IDS); // このような( "12"として配列リスト引用符の各要素のために、「32" 、 "5456"、 "876455") の文字列 idString = ストリング .Format(" '{0}' "、idStr.Replace(" "、" '' " )); 文字列のSQL = $ " 更新COMMAND_ACCESSLOGはWORKSTATE = {状態}を設定し、STRING1 =は:DOWNSENDTIME({idString})内のcommandId " 。 OracleParameterの[]パラメータ = { 新規のOracleParameter(" :DOWNSENDTIME "、OracleDbType.Varchar2、1024 ) }。 DateTime.Now.ToString(); VaRの行= DbHelperOra.ExecuteSql(SQL、パラメータ)。 リターン行> 0?真:偽; } 他 { 戻り 偽。} }