2010-11-14 32 views
5

在基於現有AS400的系統之上構建基於.NET的報告解決方案時,我需要一些重要幫助和最佳實踐。從.NET與AS400(IBM i)通信時的最佳實踐

  • 什麼是最適合整合 技術(ODBC,OLE DB,ADO.NET) 和不依賴於我們所談論的是什麼版本 AS400的?是否 總是DB2數據庫還是那個 變化?通常使用哪些其他持久性系統?
  • 是否有可能在大型機中調用 程序,這些程序中有 邏輯,或者最好是在.NET層 中複製該邏輯,然後直接調用大型機DB?
  • 我想報告系統應該在線並直接調用大型機數據庫,或者有其他方式(例如文件導出等),這將是首選?
  • 在開始項目(AS400版本等)以消除問題之前,瞭解哪些技術細節非常重要。

基本上我對.NET/AS400項目的所有信息和經驗感興趣(並會投票)。我從來沒有做過,需要知道項目開始前的陷阱。

回答

2

如果您不熟悉OS/400,請準備好陡峭的學習曲線。嘗試並通過招募本地AS/400嚮導來減輕痛苦,這對於編寫奇數CL程序,獲得授權等是必不可少的。

我個人一直使用隨客戶端訪問提供的ODBC驅動程序,但僅用於讀取-只要。我無法證明這一點,但十年的AS/400編程告訴我,試圖從AS/400之外更新AS/400數據庫是個不錯的主意。

確實有可能從.NET應用程序調用AS/400 CL程序,並且如果業務邏輯已經在那裏編程,那麼使用它是有道理的;在.NET中重新創建它很昂貴,容易出錯並且速度會更慢。

相同的報告信息:如果可能,請使用現有的信息。

事情看出來的(其中的一些可能已經過時):

DB2 SQL具有其他SQL方言很多細微的差別。許多數據庫管理系統將接受

SELECT X, Y FROM A, B WHERE A.T=B.T 

等同於

SELECT X,Y FROM A INNER JOIN B ON A.T=B.T 

DB2可能會或可能不會看到它,這取決於表。如果沒有,前者可能非常緩慢。也就是說,如果您遇到性能問題,可以使用一些非常漂亮的工具來分析DB/2查詢計劃;你需要你的AS/400嚮導來使用它們,因爲它們有點模糊。

如果您處於國際環境中,處理代碼頁需要謹慎。製作確保所有您的AS/400具有相同的系統代碼頁。

如果您使用的是多AS/400設置,請注意可以透明地訪問本地和遠程表(使用直通)。

OS/400擁有悠久的廣泛後向支持歷史。只要所有與您通話的AS/400都在同一主要版本中,您通常不必擔心版本。它也是一個非常穩定的平臺;操作系統錯誤非常罕見並且很快得到修復。

如果您可以管理它,請使用*ALLOBJ權限訪問測試系統。這將使您能夠專注於手頭的問題並在以後處理安全問題。

HTH

3

好吧我幾年前曾經和.NET一起工作和連接到AS/400和大型機系統。我可能無法直接回答你的問題,但我可以讓你知道什麼對我有用,以及我過去做過的一些事情。

這種類型的工作的一個通用術語是Enterprise Application Integration(EAI),所以你可以從頭開始閱讀。據我所知,在AS/400上可能不僅僅是DB2數據庫。有2種方式,使我們與綠屏(或舊的)應用程序的工作:直接

    1. 訪問數據源/存儲創建一個會話,發送擊鍵如F10,F4等的遺留應用程序用於瀏覽不同的屏幕,並從舊屏幕上的固定點抓取數據(有時稱爲屏幕抓取)。

    要部分地回答你的第一個問題,直接訪問數據源,我們創建的DSN,使用ODBC驅動程序是能獲得從2家公司在當時(數據源名稱),倫巴(由牆數據製作),以及Attachmate公司(由IBM認爲)。要創建ODBC DSN,通常要進入管理工具/數據源並添加一個系統DSN。您需要(舊系統)主機名,用戶名和密碼登錄。然後,我們在.NET應用程序中使用這些DSN創建與舊應用程序的連接。如果你有一個DSN,那麼你可以使用類似SQL Server DTS/SSIS的東西來從源代碼獲取數據並將其保存在某個位置,不管是數據庫,CSV文件,Excel文件等等。報表工具(Crystal/SQL Server Reporting Services)使用DSN直接訪問數據源,因此您可以直接從數據源報告。你也可以創建無DSN的連接,幾年前我們需要DSN。

    要部分回答你的第二個問題,可以調用並使用綠屏應用程序的邏輯,如果你想。綠色屏幕通常被劃分爲一定數量的行和列,我們使用稱爲HLLAPI的標準將來自Windows系統的擊鍵發送到傳統屏幕上的位置。我們使用倫巴這個作爲OCX控件可用,我敢肯定Attachmate也是。例如,您可以使用用戶標識和密碼文本框創建Winforms表單,然後爲舊應用創建會話,並且通常第一個屏幕將是登錄屏幕。然後使用綠色屏幕上用戶名和密碼字段的位置將用戶ID和密碼發送到這些位置,然後發送Enter鍵或任何需要登錄的鍵。然後您可以導航到另一個屏幕,例如搜索屏幕,發送數據和擊鍵以執行搜索,然後從綠色屏幕抓取結果數據。另一種方法是創建複製綠屏應用並直接從數據存儲獲取數據的Win/Web表單。這樣做的好處是,您不必知道傳統應用程序的按鍵/導航,這對於大型綠色屏幕系統可能會很麻煩。有沒有對或錯取決於具體情況。我們公司做了兩者的混合。

    對於你的第三個問題,它取決於你想要的報告類型。如果他們需要實時,那麼您可以直接連接到數據存儲。如果他們不需要實時,您可以每晚從傳統系統中進行數據傳輸並將數據存儲在SQL Server中,然後針對SQL Server數據運行報告。

    你的第四個問題的一個答案是,你肯定需要把你的手放在知道綠屏應用的人身上。您將花費數小時的時間瀏覽傳統應用程序的屏幕,以便了解知道系統的用戶是至關重要的。您還需要登錄ID和密碼等。

    最後,有一些第三方公司專門從源傳輸數據到目標,我的頭頂上是Data Mirror。另一種方法是使用像BizTalk或Tibco這樣的中間層集成產品,它們都從一個或多個來源獲取數據,並將其粘貼到一個或多個目的地,但這可能會根據您的要求進行矯正。

    希望幫助和好運:)

  • 2

    我用的是客戶端訪問(無論它叫現在)驅動程序連接到我相信是基於ADO.NET的服務器。通過我有的驅動版本(我們在V5R4上),你不能也不得不創建存儲過程來調用這些程序(這並不難)。我以爲我聽說你可以執行程序的最新版本,但我不確定。

    我只會看到另一件事是創建一個用戶只有當你需要做的事情你需要做的事情以防萬一有人拿到用戶名和密碼,他們不能做太多。我們設置了一個只讀(*USE)用戶和一個rwx(*CHANGE)用戶。

    0

    [抱歉,沒有看到這是一箇舊帖子。希望它仍然有用]

    我寫了綠屏和.Net應用程序。根據我的經驗..

    1. ODBC - 工作,但您需要在所有用戶PC上設置ODBC設置。 .NET數據提供程序更好,因爲更多.net特定的東西,並不需要在所有客戶端設置ODBC設置。在.400提供的.net提供者之前,我主要使用OLEDB。詳情請參考http://www-03.ibm.com/systems/i/software/access/windows/dotnet/

    2.使用存儲過程。存儲過程通常比將所有邏輯放入.net中更快。創建用RPG,CL,COBOL,C++等編寫的SQL或外部存儲過程...我不會重新編寫.net中的所有RPG舊邏輯,我只需稍微更改舊的RPG程序並將其存入外部存儲過程

    3.對於報告,再次使用傳回結果集的存儲過程。它的速度更快,更乾淨,並且與Crystal Report配合良好。

    4.技術細節。如果您有許多客戶端來安裝程序 - 使用Web服務 - 您無需在所有PC上安裝正確版本的客戶端訪問。

    請注意您的OS400版本。 如果使用OS400 V6R1及更高版本,請確保使用的客戶端訪問權限爲V5R4或更高 - 存儲過程在舊版客戶端訪問中可能無法正常工作。

    ODBC工作在較早的客戶端訪問,但我認爲.NET數據提供程序只適用於V5R3。

    如果您使用.NET Data Provider V6R1編譯.net程序,那麼您的用戶客戶端訪問也必須是V6R1。

    使用存儲過程儘可能的安全(不需要暴露的表),並簡化程序邏輯(可以重新使用RPG程序)

    在OS400的一面,請確保系統值QCCSID設置適當CCSID例如37英語。 ODBC,OLEDB,.net驅動程序會自動將適當的字符轉換/轉換爲.Net程序。永遠不要將該值留作65535.

    希望這有助於。

    +0

    如果沒有進行重要的測試,請不要將系統值QCCSID從65535更改。儘管如果聯網很重要,不要在65535下運行該系統是一個非常好的主意,但有些系統的應用程序卻依賴於它。 – user2338816 2015-03-07 01:36:35