HostFileDataAdapter.Update
は、 DataSet
オブジェクトからデータ ソースへの変更を解決するために呼び出されます。
Update
メソッドは、Fill
メソッドと同様に、DataSet
のインスタンスを引数として受け取ります。
データ アダプターを使用してホスト ファイル システムを更新するには
更新する情報を含む
DataSet
オブジェクトを作成します。または、既存の
DataSet
オブジェクトのデータを、DataSet.AcceptChanges
の呼び出しで上書きすることもできます。DataSet
、DataTable
、またはDataRow
オブジェクトでAcceptChanges
を呼び出すと、DataRow
オブジェクトのすべての元の値がDataRow
の現在の値で上書きされることに注意してください。 行を一意として識別するフィールド値が変更された場合、AcceptChanges
を呼び出した後、元の値はデータ ソースの値と一致しなくなります。さらに、
HostFileCommand
パラメーターを使用して、DataSet
オブジェクト内の変更された行ごとに SQL ステートメントの入力値と出力値を指定できます。更新する DataSet オブジェクトを使用して、
HostFileDataAdapter.Update
を呼び出します。Update
メソッドを呼び出すと、HostFileDataAdapter
によって行われた変更が分析され、適切なコマンドが実行されます。Update
を呼び出し、その更新に関連する適切なコマンドが存在しない場合 (たとえば、削除済みの行に関連するDeleteCommand
が存在しない場合) は、例外がスローされます。データセットをデータで更新する場合は、
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);
}
}