Сравнение RPG с C# и SQL

В программе RPG (один из языков IBM для AS/400) я могу «выйти» в файл, чтобы увидеть, существует ли запись (скажем, определенная запись клиента) в файле. Если да, то я могу мгновенно обновить эту запись новыми данными. Если запись не существует, я могу написать новую запись. Код будет выглядеть так:

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/С#, мне интересно, есть ли способ сделать случайное извлечение из файла (что и делает «цепочка» в RPG). В основном я хочу увидеть, существует ли запись. Если это так, обновите запись с новой информацией. Если этого не произойдет, то я хочу написать новую запись. Я уверен, что это возможно, но не совсем уверен, как это сделать. Мы будем очень признательны за любые советы.


person Kevin    schedule 13.04.2010    source источник


Ответы (1)


RPG имеет внутреннюю связь с таблицами базы данных в системе. Это позволяет легко писать такие лаконичные операции.

С#, с другой стороны, требует, чтобы вы реализовали свои собственные подпрограммы базы данных (или использовали инфраструктуру, такую ​​как 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)
}
person Michael Rodrigues    schedule 14.04.2010
comment
Хм. Это очень хорошо, на самом деле. Я могу это использовать. Большое спасибо! - person Kevin; 14.04.2010