次の方法で共有


データ アダプターを使用してホスト ファイル システムを更新する方法

HostFileDataAdapter.Update は、 DataSet オブジェクトからデータ ソースへの変更を解決するために呼び出されます。 Update メソッドは、Fill メソッドと同様に、DataSetのインスタンスを引数として受け取ります。

データ アダプターを使用してホスト ファイル システムを更新するには

  1. 更新する情報を含む DataSet オブジェクトを作成します。

    または、既存の DataSet オブジェクトのデータを、 DataSet.AcceptChangesの呼び出しで上書きすることもできます。

    DataSetDataTable、または DataRow オブジェクトでAcceptChangesを呼び出すと、DataRow オブジェクトのすべての元の値がDataRowの現在の値で上書きされることに注意してください。 行を一意として識別するフィールド値が変更された場合、 AcceptChangesを呼び出した後、元の値はデータ ソースの値と一致しなくなります。

    さらに、 HostFileCommand パラメーターを使用して、 DataSet オブジェクト内の変更された行ごとに SQL ステートメントの入力値と出力値を指定できます。

  2. 更新する DataSet オブジェクトを使用して、 HostFileDataAdapter.Updateを呼び出します。

    Update メソッドを呼び出すと、HostFileDataAdapterによって行われた変更が分析され、適切なコマンドが実行されます。 Update を呼び出し、その更新に関連する適切なコマンドが存在しない場合 (たとえば、削除済みの行に関連する DeleteCommand が存在しない場合) は、例外がスローされます。

  3. データセットをデータで更新する場合は、DataSet オブジェクトでHostFileDataAdapter.Fillを呼び出します。

    Updateメソッドは変更をデータ ソースに反映しますが、DataSetを最後に更新して以来、他のクライアントがデータ ソースでデータを変更している可能性があります。 テーブルに新しい行が追加され、更新された情報が既存の行に組み込まれます。

次のコード例では、 Fill コマンドと Update コマンドを使用してデータセットを更新する方法を示します。 ETCMLogging オブジェクトと HostFileUtils オブジェクトは、それぞれログ記録機能とユーティリティ機能を提供します。

public void BVTHFDataAdapterInsert(ETCMLogging.Logging logging, string host, string ccsid, string cnstring, HostFileUtils.Utils.HostFileType hostfiletype)  
        {  
            HostFileUtils.Utils u = new HostFileUtils.Utils();  
            logging.LogInfo(host + "::" + hostfiletype.ToString());  
            HostFileUtils.Utils.BvttestsVals[] Datavals = u.InitBvttestsVals();  
  
            try  
            {  
                HostFileConnection cn = new HostFileConnection(cnstring);  
                cn.Open();  
                String SELECT = u.CreateSQLCommand(host, hostfiletype, cnstring, "SELECT", "BVTTESTS");  
                HostFileDataAdapter hfda = new HostFileDataAdapter(SELECT, cn);  
                DataSet ds = new DataSet();                DataSet dsold = new DataSet();                hfda.Fill(ds);                hfda.Fill(dsold);  
                int[] cp = u.CheckColumns(SELECT, cn, logging);  
                u.ValidateDataSet(ds, logging, Datavals, cp);  
                object[] newrow = new object[5];  
                // ('REC129-1','REC129-2',129,1290,'129.645')  
                newrow[cp[0]] = "REC129-1";  
                newrow[cp[1]] = "REC129-2";  
                newrow[cp[2]] = 129;  
                newrow[cp[3]] = 1290;  
                newrow[cp[4]] = 129.645M;  
                ds.Tables[0].Rows.Add(newrow);                  
                int z = hfda.Update(ds);  
                if (z != 1)  
                {  
                    logging.LogFail("a unexpected number of updates::"+z.ToString());  
                }  
                DataSet ds1 = new DataSet();  
                hfda.Fill(ds1);  
                int j = 0;  
                int i = 0;  
                foreach (DataRow row in ds1.Tables[0].Rows)  
                {  
                    string rec = (string)ds1.Tables[0].Rows[j][cp[0]];  
                    if (!rec.Equals("REC129-1"))  
                    {  
                        u.CompareValues((string)ds1.Tables[0].Rows[j][cp[0]], Datavals[i].OUT1_CHAR1, logging);  
                        u.CompareValues((string)ds1.Tables[0].Rows[j][cp[1]], Datavals[i].OUT1_CHAR2, logging);  
                        u.CompareValues((short)ds1.Tables[0].Rows[j][cp[2]], Datavals[i].OUT1_SMALLINT, logging);  
                        u.CompareValues((int)ds1.Tables[0].Rows[j][cp[3]], Datavals[i].OUT1_INTEGER, logging);  
                        u.CompareValues((decimal)ds1.Tables[0].Rows[j][cp[4]], Datavals[i].OUT1_DECIMAL, logging);  
                        j++;  
                        i++;  
                    }  
                    else  
                    {  
                        u.CompareValues((string)ds1.Tables[0].Rows[j][cp[0]], "REC129-1", logging);  
                        u.CompareValues((string)ds1.Tables[0].Rows[j][cp[1]], "REC129-2", logging);  
                        u.CompareValues((short)ds1.Tables[0].Rows[j][cp[2]], 129, logging);  
                        u.CompareValues((int)ds1.Tables[0].Rows[j][cp[3]], 1290, logging);  
                        u.CompareValues((decimal)ds1.Tables[0].Rows[j][cp[4]], 129.645M, logging);  
                        j++;  
                    }  
                }  
                if (j == 0)  
                {  
                    logging.LogFail("No Rows on DataTable!");  
                }  
                z = 0;  
                z = hfda.Update(dsold);  
                if (z != 1)  
                {  
                    logging.LogFail("a unexpected number of updates::" + z.ToString());  
                }  
                DataSet ds2 = new DataSet();  
                hfda.Fill(ds2);  
                u.ValidateDataSet(ds2, logging, Datavals, cp);  
  
                cn.Close();  
            }  
            catch (Exception e)  
            {  
                logging.LogInfo(e.Message);  
                logging.LogFail(e.StackTrace);  
            }  
        }  

こちらもご覧ください

ホスト ファイル アダプターとデータセットの操作
BizTalk Adapter for Host Files の構成