2

在一个 RPG 程序(AS/400 上的一种 IBM 语言)中,我可以“链接”到一个文件以查看文件中是否存在一条记录(例如,某个客户记录)。如果是这样,那么我可以立即使用新数据更新该记录。如果记录不存在,我可以写一条新记录。代码如下所示:

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 回答