2

RPGプログラム(AS / 400上のIBMの言語の1つ)では、ファイルに「チェーン」して、レコード(たとえば、特定の顧客レコード)がファイルに存在するかどうかを確認できます。もしそうなら、私はそのレコードを新しいデータで即座に更新することができます。レコードが存在しない場合は、新しいレコードを書き込むことができます。コードは次のようになります。

Customer  Chain CustFile   71 ;turn on indicator 71 if not found
          if    *in71         ;if 71 is "on"
          eval  CustID = Customer;
          eval  CustCredit = 10000;
          write CustRecord
          else                ;71 not on, record found.
          CustCredit = 10000;
          update CustRecord
          endif

SQL / C#にあまり詳しくないので、ファイルからランダムに取得する方法があるかどうか疑問に思っています(これは、RPGで「チェーン」が行うことです)。基本的に、レコードが存在するかどうかを確認したいと思います。含まれている場合は、新しい情報でレコードを更新します。そうでない場合は、新しいレコードを書きたいと思います。それは可能だと確信していますが、どうすればよいのかよくわかりません。アドバイスをいただければ幸いです。

4

1 に答える 1

5

RPGには、システム上のデータベーステーブルへの本質的な接続があります。これにより、このような簡潔な操作を簡単に作成できます。

一方、C#では、独自のデータベースルーチンを実装する(またはLINQなどのフレームワークを使用する)必要があります。

これを行う場合は、System.OLEDBオブジェクトを使用してデータベース操作を担当するクラスを作成します。

一部のメソッドは次のようになります(実際のコードではなく、一般的なアイデア)。

public boolean CheckExists(string TableName, string ColumnName, int ID) {
  //Connect to database
  // Create Command with query  "SELECT COUNT(1) FROM " + TableName.Replace(";","") + " WHERE " + ColumnName.Replace(";","") + " = " + ID 

  Return int.Parse(myQuery.ExecuteScalar) > 0

 //disconnect

}


 public boolean UpdateCredit(int CustID, int newCredit) {
  //Connect to database
  // Create Command with query  "UPDATE CustTable SET CustCredit = " + newCredit.ToString() + " WHERE = CustId = " + CustID 

  myQuery.ExecuteNonQuery

//disconnect

}

public boolean CreateCredit(int CustID, int newCredit) {
  //Connect to database
  // Create Command with query  "INSERT INTO CustTable (CustID, CustCredit) VALUES (" + CustId.ToString + ", " + newCredit.ToString + ")"

  myQuery.ExecuteNonQuery

  //disconnect
}

次に、メインメソッドの世界は次のようなものを読みます

If (CheckExists("CustTable", "CustId", CustID)) {
    UpdateCredit(CustID, 10000)
} else {
    CreateCredit(CustId, 10000)
}
于 2010-04-14T00:26:07.013 に答える