Вопрос

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

Это было полезно?

Решение

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)
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top