Сравнение RPG с C# и SQL
-
26-09-2019 - |
Вопрос
В программе 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)
}