Pergunta

Em um programa de RPG (um dos idiomas da IBM no AS/400), posso "fazer a corrente" para um arquivo para ver se existe um registro (digamos, um determinado registro do cliente) no arquivo. Se isso acontecer, posso atualizar esse registro instantaneamente com novos dados. Se o registro não existir, posso escrever um novo registro. O código seria assim:

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

Não estou familiarizado com o SQL/C#, estou me perguntando se existe uma maneira de fazer uma recuperação aleatória de um arquivo (que é o que a "cadeia" faz no RPG). Basicamente, quero ver se existe um registro. Se isso acontecer, atualize o registro com algumas novas informações. Caso contrário, quero escrever um novo registro. Tenho certeza de que é possível, mas não tenho certeza de como fazer isso. Qualquer conselho seria muito apreciado.

Foi útil?

Solução

O RPG possui conectividade intrínseca com as tabelas de banco de dados no sistema. Isso facilita escrever operações tão sucintas.

C#, por outro lado, exige que você implemente suas próprias rotinas de banco de dados (ou use uma estrutura como o LINQ).

Se eu estivesse fazendo isso, criaria uma classe responsável pela manipulação do banco de dados usando os objetos System.oledb.

Alguns métodos podem ser (ideia geral, não código real):

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
}

Então o seu principal método do mundo leu algo como

If (CheckExists("CustTable", "CustId", CustID)) {
    UpdateCredit(CustID, 10000)
} else {
    CreateCredit(CustId, 10000)
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top