Tutorial_SPA_CSharp.ja - OpenTouryoProject/OpenTouryo GitHub Wiki
2016幎7æ19æ¥
æ¬ãã¥ãŒããªã¢ã«ã§ã®æŒç¿ã«æ²¿ã£ãŠãµã³ãã«ããã°ã©ã ãéçºããããšã§ãOpen æ£æ¢ã䜿çšããã·ã³ã°ã«ããŒãž ã¢ããªã±ãŒã·ã§ã³ã®éçºã®æµãã»ã¯ã©ã¹ã®äœææ¹æ³ã»åçš®å®çŸ©ãã¡ã€ã«ã®äœææ¹æ³ã»ããŒã«ã®äœ¿çšæ¹æ³ã»å®è¡çµæã®ç¢ºèªæ¹æ³ãªã©ãç¿åŸããããšãç®çãšããŠããŸãã
ãŸããæ¬ãã¥ãŒããªã¢ã«ã§ã¯ãäž»ã«ã·ã³ã°ã«ããŒãž ã¢ããªã±ãŒã·ã§ã³ãéçºããäžã§ã® Open æ£æ¢ã®å©çšæ¹æ³ã«ã€ããŠçŽ¹ä»ããŠããŸãããã®ãããã·ã³ã°ã«ããŒãž ã¢ããªã±ãŒã·ã§ã³ãã®ãã®ã«ã€ããŠã¯è©³çŽ°ã«ã¯è§£èª¬ããŠããŸãããã·ã³ã°ã«ããŒãž ã¢ããªã±ãŒã·ã§ã³ã«ã€ããŠç¥ãããæ¹ã¯ãå¥éãã€ã¯ããœããã®ãµã€ããåèããŠãã ããã
Open æ£æ¢ããã³ã·ã³ã°ã«ããŒãž ã¢ããªã±ãŒã·ã§ã³éçºãæ€èšããŠãã SEã»éçºè ã
æ¬ãã¥ãŒããªã¢ã«ã§ã¯ãOpen æ£æ¢ãã³ãã¬ãŒãã»ããŒã¹ (Visual Studio 2015 çš) ã«ä»å±ã®ãµã³ãã«ããã°ã©ã ãé¡æãšããOpen æ£æ¢ã䜿çšããã·ã³ã°ã«ããŒãž ã¢ããªã±ãŒã·ã§ã³ã®éçºã®æµãããé ãè¿œã£ãŠèª¬æããŸãã
æ¬ããã¥ã¡ã³ãã«èšèŒã®äŒç€Ÿåã»åååã¯ãå瀟ã®åæšãŸãã¯ç»é²åæšã§ãã
æ¬ããã¥ã¡ã³ãã¯ãã¯ãªãšã€ãã£ãã»ã³ã¢ã³ãº CC BY 2.1 JP ã©ã€ã»ã³ã¹ã®äžã§å©çšå¯èœã§ãã
3. æ¬ãã¥ãŒããªã¢ã«ã§ã®æŒç¿èª²é¡ã«ã€ããŠ
Open æ£æ¢ã¯ã.NET çšã®ã¢ããªã±ãŒã·ã§ã³ãã¬ãŒã ã¯ãŒã¯ã§ããOpen æ£æ¢ã¯ã.NET Framework 4.6 以äžã察象ã«ãC/S(Windows Forms, WPF)ãWeb(ASP.NET)ãRIA(Silverlight) ãªã©ãããŸããŸãªã¢ããªã±ãŒã·ã§ã³ã§å©çšã§ããŸãããŸããã·ã³ã°ã«ããŒãž ã¢ããªã±ãŒã·ã§ã³ (SPA) ã¯ãMVC ãã¿ãŒã³ ããã³ MVVM ãã¿ãŒã³ãå©çšãã Web ã¢ããªã±ãŒã·ã§ã³ãéçºããããã®ãASP.NET ã®ãã¬ãŒã ã¯ãŒã¯ã§ãã
Open æ£æ¢ã®ã¯ã©ã¹æ§æå³ãå³ 1-1 ã«ç€ºããŸããåŸæ¥ã® ASP.NET ãšæ¯ã¹ãŠãSPA ã§ãã£ãŠããOpen æ£æ¢æ¢åã® B å±€ãD å±€éšåã®æ§æã¯å€ãããŸããããããã£ãŠããããŸã§ã« ASP.NET 㧠Open æ£æ¢ãå©çšããããšã®ããéçºè ã«ãšã£ãŠã¯ãB å±€ãD å±€éšåã®éçºããŠããŠã掻ããããšãã§ããŸãã

å³ 1-1ãOpen æ£æ¢ã®ã¯ã©ã¹æ§æå³
æ¬ãã¥ãŒããªã¢ã«ã§ã¯ãå³ 1-1 ã®ã¯ã©ã¹æ§æå³ã«åŸããéçºè ãå®è£ ããç»é¢ã¯ã©ã¹ã»æ¥åããžãã¯ã¯ã©ã¹ã»DB ã¢ã¯ã»ã¹ã¯ã©ã¹ã®äœææ¹æ³ããé ãè¿œã£ãŠèª¬æããŸãããªããæ¬ãã¥ãŒããªã¢ã«ã§ã¯ããã¥ãŒã®äœæã« Razor æ§æã䜿çšããŸãã
æ¬ãã¥ãŒããªã¢ã«ã§ã¯ã以äžã®ç°å¢ãåæãšããŠããŸãã
- éçºç°å¢
- IDE
- Visual Studio 2015 (Express Edition ãå©çšã§ããŸã)
- ã¢ããªã±ãŒã·ã§ã³ ãã¬ãŒã ã¯ãŒã¯
- Open æ£æ¢ãã³ãã¬ãŒãã»ããŒã¹ (Visual Studio 2015 çš)
- IDE
- å®è¡ç°å¢
- ã©ã³ã¿ã€ã
- .NET Framework 4.6
- Web ãµãŒããŒ
- IIS Express
- DB
- SQL Server Express 2008 R2
- ã©ã³ã¿ã€ã
- ãã®ä»
- OS
- Windows 7
- éçºèšèª
- C#
- OS
ãããããããã€ã¯ããœããã®ãµã€ããªã©ãåèã«ãVisual Studio ãã€ã³ã¹ããŒã«ããŠãããŠãã ããã
次ã«ãOpen æ£æ¢ãã³ãã¬ãŒãã»ããŒã¹ãããŒã¿ããŒã¹ãã»ããã¢ããããŸãã
-
GitHub 㧠[Download ZIP] ãã¿ã³ãæŒäžã㊠OpenTouryoTemplates.zip ãå ¥æããããã解åã㊠Open æ£æ¢ãã³ãã¬ãŒãã»ããŒã¹ (Visual Studio 2015 çš) ãååŸããŸãã
-
root_VS2015 ãã©ã«ãã«ãã Readme.md ã®æé ã«åŸã£ãŠãOpen æ£æ¢ãã³ãã¬ãŒãã»ããŒã¹ãšãµã³ãã«ããŒã¿ããŒã¹ã®ã»ããã¢ãããè¡ããŸãã
æ¬ãã¥ãŒããªã¢ã«ã§ã¯ãOpen æ£æ¢ãã³ãã¬ãŒãã»ããŒã¹ã«ä»å±ã®ãµã³ãã«ããã°ã©ã ã«ãç»é¢ã»ããžãã¯ãè¿œå ãã圢ã§æŒç¿ãè¡ã£ãŠãããŸãããµã³ãã«ããã°ã©ã ã®æ§æãå³ 3-1 ã«ããã¥ãŒããªã¢ã«ã®ç»é¢é·ç§»å³ãå³ 3-2 ã«ç€ºããŸãã

å³ 3-1ããµã³ãã«ããã°ã©ã ã®æ§æ
æ¬ãã¥ãŒããªã¢ã«ã§ã¯ãDB ã¢ã¯ã»ã¹ã¯ã©ã¹ (DAO: Data Access Object) ãšããŠã以äžã«ç€ºã 3 çš®é¡ã®ã¯ã©ã¹ãäœæããŸããåã¯ã©ã¹ã®è©³çŽ°ã«ã€ããŠã¯ãOpen æ£æ¢ã®å©çšã¬ã€ãïŒãã¿ãŒãŠãŒã¹ãFAQ ç·šïŒãã芧ãã ããã
DB ã¢ã¯ã»ã¹ã¯ã©ã¹ | 説æ |
---|---|
èªåçæ DAO | Open æ£æ¢ä»å±ã® D å±€èªåçæããŒã«ã«ããçæãã DAO ã¯ã©ã¹ãããŒãã«ã»ãã¥ãŒã«å¯ŸããåçŽãª CRUD åŠçãè¡ãå Žåã«å©çšããã |
å ±é DAO | Open æ£æ¢æäŸã® DAO ã¯ã©ã¹ãè€æ°ããŒãã«ãçµåããçµæãååŸããå Žåãªã©ãD å±€èªåçæããŒã«ã§èªåçæã§ããªãåŠçãè¡ãå Žåã«å©çšããã |
DAO éçŽã¯ã©ã¹ | D å±€éšåã®ãã¡ãµãŒãã¯ã©ã¹ã1 ãã©ã³ã¶ã¯ã·ã§ã³ã§è€æ° DAO ã¯ã©ã¹ãå©çšããå Žåã«ãB å±€ããã®ãªã¯ãšã¹ããéçŽãããå Žåã«å©çšããã |

å³ 3-2ããµã³ãã«ããã°ã©ã ã®ç»é¢é·ç§»å³
Open æ£æ¢ãçšããéçºã®æµãããé ãè¿œã£ãŠèª¬æããŸãã
-
C:\root\programs\C#\Samples\WebApp_sample\SPA_Sample\SPA_Sample.sln
ãéããŸãã -
Visual Studio ãèµ·åããOpen æ£æ¢ãã³ãã¬ãŒãã»ããŒã¹ïŒVisual Studio 2015 çšïŒã«ä»å±ã®ãµã³ãã«ããã°ã©ã ãéãããŠããããšã確èªããŠãã ããã
Open æ£æ¢ã§ã¯ãç»é¢ããéä¿¡ãããå ¥åããŒã¿ããåŒæ°ã¯ã©ã¹ããšåŒã°ãããªããžã§ã¯ãã«ä¿æããŠãæ¥åããžãã¯ãããŒã¿ã¢ã¯ã»ã¹ã¯ã©ã¹ãžãšåãæž¡ããŸãããŸããããŒã¿ã¢ã¯ã»ã¹ãæ¥åããžãã¯ã®çµæã¯ãæ»ãå€ã¯ã©ã¹ããšåŒã°ãããªããžã§ã¯ãã«ä¿æããŠãç»é¢ãžãšåãæž¡ããŸãã
SPA ã§ã¯ãå³ 1-1 ã«ç€ºããŸããããã«ãç»é¢ (View) ãã JSON 圢åŒã§éä¿¡ãããå ¥åããŒã¿ã Web API ãåãåããŸããWeb API ãåãåã£ãããŒã¿ãåŒæ°ã¯ã©ã¹ã«æ ŒçŽããŠãæ¥åããžãã¯ãããŒã¿ã¢ã¯ã»ã¹ã¯ã©ã¹ãžãšåãæž¡ããŸããæ¥åããžãã¯ãããŒã¿ã¢ã¯ã»ã¹ã¯ã©ã¹ã®çµæã®æ»ãå€ã¯ã©ã¹ã¯ãWeb API ã«è¿ãããWeb API ããããŸã JSON 圢åŒã«å€æãããŠç»é¢ (View) ãžãšè¿ãããŸãã
æ¬ç¯ã§ã¯ããã®åŒæ°ã¯ã©ã¹ãæ»ãå€ã¯ã©ã¹ãäœæããŸãã
-
Visual Studio ã®ãœãªã¥ãŒã·ã§ã³ ãšã¯ã¹ãããŒã©ãŒã§
Codes\Common
ãã©ã«ããéžæããããŒã«ããŒã®ããããžã§ã¯ã(P)ã-ãã¯ã©ã¹ã®è¿œå (C)ããéžæããŸãã -
OrderParameterValue.cs
ãšããååã®ã¯ã©ã¹ãè¿œå ããŸãã -
以äžã®ã³ãŒãã
OrderParameterValue.cs
ã«è¿œå ããOpen æ£æ¢ãæäŸããã¯ã©ã¹ãã€ã³ããŒãããŸããusing Touryo.Infrastructure.Business.Util; using Touryo.Infrastructure.Business.Common;
-
OrderParameterValue
ã¯ã©ã¹ã®å®£èšéšåã以äžã®ããã«ä¿®æ£ããOpen æ£æ¢ã®ãåŒæ°èŠªã¯ã©ã¹ 2ããç¶æ¿ãããŸããpublic class OrderParameterValue : MyParameterValue
-
OrderParameterValue
ã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿ã以äžã®ããã«ä¿®æ£ããŸããpublic OrderParameterValue(string screenId, string controlId, string methodName, string actionType, MyUserInfo user) : base(screenId, controlId, methodName, actionType, user) { }
-
ç»é¢ããæ¥åããžãã¯ã«æž¡ãå€ãšããŠã
OrderParameterValue
ã¯ã©ã¹ã«ä»¥äžã®ãã£ãŒã«ããè¿œå ããŸãã/// <summary>泚æ ID</summary> public string OrderId; /// <summary>泚ææ å ±ïŒãµããªïŒ</summary> public System.Data.DataTable Orders; /// <summary>泚ææ å ±ïŒæ现ïŒ</summary> public System.Data.DataTable OrderDetails;
-
4.2.1 é ãšåãããã«ã
Codes\Common
ãã©ã«ãã«ãOrderReturnValue.cs
ãšããååã®ã¯ã©ã¹ãè¿œå ããŸãã -
以äžã®ã³ãŒãã
OrderReturnValue.cs
ã«è¿œå ããOpen æ£æ¢ãæäŸããã¯ã©ã¹ãã€ã³ããŒãããŸããusing Touryo.Infrastructure.Business.Common;
-
OrderReturnValue
ã¯ã©ã¹ã®å®£èšéšåã以äžã®ããã«ä¿®æ£ããOpen æ£æ¢ã®ãæ»ãå€èŠªã¯ã©ã¹ 2ããç¶æ¿ãããŸããpublic class OrderReturnValue : MyReturnValue
-
ç»é¢ã«è¿ãå€ãšããŠã
OrderReturnValue
ã¯ã©ã¹ã«ä»¥äžã®ãã£ãŒã«ããè¿œå ããŸãã/// <summary>泚ææ å ±ïŒãµããªïŒ</summary> public System.Data.DataTable Orders; /// <summary>泚ææ å ±ïŒæ现ïŒ</summary> public System.Data.DataTable OrderDetails;
ããŒãã«ã»ãã¥ãŒã«å¯ŸããåçŽãª CRUD åŠçãè¡ãããŒã¿ã¢ã¯ã»ã¹ã¯ã©ã¹ãSQL ãã¡ã€ã«ã«ã€ããŠã¯ãOpen æ£æ¢ä»å±ã® D å±€èªåçæããŒã«ã§èªåçæãå¯èœã§ãã
-
C:\root\programs\C#\Frameworks\DaoGen_Tool\bin\Debug\DaoGen_Tool.exe
ãå®è¡ããD å±€èªåçæããŒã«ãèµ·åããŸãã -
以äžã®ããã«å€ãèšå®ãããååŸããã¿ã³ãã¯ãªãã¯ããŸãã
- ããŒã¿ãããã€ã: SQL Server Client
- æ¥ç¶æåå: Data Source=localhost\SQLExpress;Initial Catalog=Northwind;Integrated Security=true;
- ãã«ããŠã³: æŠèŠæ å ±
-
æ¥ç¶æååçã®æ å ±ã«èª€ãããªããã°ããDBMSã®ã¹ããŒãæ å ±ã®è¡šç€ºïŒæŠèŠæ å ±ïŒãã€ã¢ãã°ãã衚瀺ãããŸãã
æ¬ãã€ã¢ãã°ã衚瀺ãããããšã確èªãããéããããã¿ã³ãã¯ãªãã¯ããŠããã€ã¢ãã°ãéããŸãã
-
ãããŒãã«äžèŠ§ã®ååŸããã¿ã³ãã¯ãªãã¯ããŸãã
ããŒãã«å称ã«é¢ãã泚æãä¿ããã€ã¢ãã°ã衚瀺ãããŸããããOKããã¿ã³ãã¯ãªãã¯ããŠéããŠãã ããã
-
Northwind ããŒã¿ããŒã¹å ã®ããŒãã«ïŒãã¥ãŒããªã¹ãã«è¡šç€ºãããŸããæ¬ãã¥ãŒããªã¢ã«ã§ã¯ Orders ããŒãã«ãš Order Details ããŒãã«ã®ã¿äœ¿çšããŸãã®ã§ãOrders ããŒãã«ãOrder Details ããŒãã«ä»¥å€ãéžæããŠããåé€ããã¿ã³ãã¯ãªãã¯ããŸãã
-
ãªã¹ãå ã®é ç®ããOrders ããŒãã«ãš Order Details ããŒãã«ã®ã¿ã«ãªã£ãããšã確èªãããããŒãããã¿ã³ãã¯ãªãã¯ããŸãã
-
ãDå±€å®çŸ©æ å ±ãçæããã¿ã³ã掻æ§åãããŸãã®ã§ãåºåãšã³ã³ãŒãã£ã³ã°ãšããŠãutf-8ããéžæãããDå±€å®çŸ©æ å ±ãçæããã¿ã³ãã¯ãªãã¯ããŸãã
D å±€å®çŸ©æ å ±ãã¡ã€ã«ã®ä¿åãã€ã¢ãã°ã衚瀺ãããŸãã®ã§ã
C:\root\Info.csv
ã«ãã¡ã€ã«ãä¿åããŸãã -
D å±€å®çŸ©æ å ±ãã¡ã€ã«ãæ£åžžã«çæã§ããããšã瀺ããã€ã¢ãã°ã衚瀺ãããŸãã®ã§ããOKããã¿ã³ãã¯ãªãã¯ããŠéããŸãã
-
ãSTEP2ãžé·ç§»ããã¿ã³ãã¯ãªãã¯ããŸãã
-
ãã¹ããã2ãç»é¢ã衚瀺ãããŸãã®ã§ã以äžã®ããã«å€ãèšå®ãããããã°ã©ã ãçæããããã¿ã³ãã¯ãªãã¯ããŸãã
- D å±€å®çŸ©æ å ±ãã¡ã€ã«: C:\root\Info.csv
- ãœãŒã¹ãã³ãã¬ãŒããã©ã«ã: C:\root\files\tools\DGenTemplates
- åºåãã¡ã€ã«: C:\root
- äžèšä»¥å€ã¯ããã©ã«ãã®ãŸãŸ
-
DaoãSQL ãã¡ã€ã«ãæ£åžžã«çæã§ããããšã瀺ããã€ã¢ãã°ã衚瀺ãããŸãã®ã§ããOKããã¿ã³ãã¯ãªãã¯ããŠéããŸãã
-
C:\root
ãã©ã«ã以äžã«ãDao ãã¡ã€ã«ãSQL ãã¡ã€ã«ãçæãããŠããããšã確èªããŸããã泚æãOpen æ£æ¢ã§ã¯ãSQL ãã¡ã€ã«ãšããŠãæ¡åŒµåã
.sql
ã®ãã¡ã€ã«ãšã.xml
ã®ãã¡ã€ã«ããããïŒè©³ãã㯠Open æ£æ¢ã®èª¬ææžãã芧ãã ããïŒ -
èªåçæãã Dao ã¯ã©ã¹ããµã³ãã«ããã°ã©ã ã«å«ãããããVisual Studio ã§ãµã³ãã«ããã°ã©ã ãéãã
AppCode\sample\Dao
ãã©ã«ããéžæããããŒã«ããŒã®ããããžã§ã¯ã(P)ã-ãæ¢åã®é ç®ã®è¿œå (G)ããéžæããŸãã -
æ¢åé ç®ã®è¿œå ãã€ã¢ãã°ã§ã
C:\root\DaoOrders.cs
ãšC:\root\DaoOrder_Details.cs
ãã¡ã€ã«ãéžæãããè¿œå (A)ããã¿ã³ãã¯ãªãã¯ããŸãã -
C:\root
ãã©ã«ãçŽäžã«çæããã SQL ãã¡ã€ã«ã»XML ãã¡ã€ã«ããC:\root\files\resource\Sql
ãã©ã«ãã«ç§»åããŸãã -
D å±€èªåçæããŒã«ãçµäºããŸãã
D å±€èªåçæããŒã«ã§ã¯ãåçŽãª CRUD åŠçãè¡ã Dao ã¯ã©ã¹ã SQL ãã¡ã€ã«ãçæã§ããŸããããããè€æ°ã®ããŒãã«ãçµå (JOIN) ããã SQL ãªã©ãåçŽãª CRUD åŠçã§ã¯ãªã SQL ã¯ãåå¥ã«äœæããå¿ èŠããããŸãã
-
C:\root\files\resource\Sql
ãã©ã«ãã«ãSelectOrders.sql
ãã¡ã€ã«ãäœæããŸãã -
SelectOrders.sql
ã«ã以äžã® SQL æãèšè¿°ããŸããSELECT Orders.OrderID, Customers.CompanyName, Customers.ContactName, Employees.LastName As EmployeeLastName, Employees.FirstName As EmployeeFirstName, Orders.OrderDate FROM Orders INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID INNER JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID
æ¬ãã¥ãŒããªã¢ã«ã§ã¯ã以äžã® 3 ã€ã® Dao ã¯ã©ã¹ã䜿çšããŸãã
- DaoOrders
- Orders ããŒãã«ãžã®ã¢ã¯ã»ã¹çš
- DaoOrder_Details
- Order Details ããŒãã«ãžã®ã¢ã¯ã»ã¹çš
- CmnDao (Open æ£æ¢ã®å
±é Dao)
- 4.5.2 é ã§äœæãã SQL ãã¡ã€ã«ã䜿çšããã¢ã¯ã»ã¹çš
ãããã® Dao ã¯ã©ã¹ã®åŒã³åºããå¶åŸ¡ããæ¥åããžãã¯ã¯ã©ã¹ (B å±€ã¯ã©ã¹) ã«å¯Ÿããçªå£ (ãã¡ãµãŒã) ãšãªããDAO éçŽã¯ã©ã¹ãäœæããŸãã
-
Visual Studio ã®ãœãªã¥ãŒã·ã§ã³ ãšã¯ã¹ãããŒã©ãŒã§ã
Logic\Dao
ãã©ã«ããéžæããããŒã«ããŒã®ããããžã§ã¯ã(P)ã-ãã¯ã©ã¹ã®è¿œå (C)ããéžæããŸãã -
ConsolidatedLayerD.cs
ãšããååã®ã¯ã©ã¹ãè¿œå ããŸãã -
以äžã®ã³ãŒãã
ConsolidatedLayerD.cs
ã«è¿œå ããOpen æ£æ¢ãæäŸããã¯ã©ã¹ãã€ã³ããŒãããŸãã// Openæ£æ¢ using Touryo.Infrastructure.Business.Dao; using Touryo.Infrastructure.Public.Db; // åŒæ°ã»æ»ãå€ã¯ã©ã¹ using SPA_Sample.Codes.Common;
-
ConsolidatedLayerD
ã¯ã©ã¹ã®å®£èšéšåã以äžã®ããã«ä¿®æ£ããOpen æ£æ¢ã®ãDAO éçŽèŠªã¯ã©ã¹ããç¶æ¿ãããŸããpublic class ConsolidatedLayerD : BaseConsolidateDao
-
ConsolidatedLayerD
ã¯ã©ã¹ã«ã以äžã®ããã«ã³ã³ã¹ãã©ã¯ã¿ãäœæããŸããpublic ConsolidatedLayerD(BaseDam dam) : base(dam) { }
-
ConsolidatedLayerD
ã¯ã©ã¹ã«ã泚ææ å ±äžèŠ§ãååŸããGetOrders
ã¡ãœãããäœæããŸããpublic OrderReturnValue GetOrders(OrderParameterValue orderParameter) { // æ»ãå€ã¯ã©ã¹ãäœæãã OrderReturnValue returnValue = new OrderReturnValue(); // å ±é DAO ãäœæãã (SQL ãã¡ã€ã«ãšããŠã4.5.2 é ã§äœæãããã¡ã€ã«ã䜿çšãã) CmnDao dao = new CmnDao(this.Dam); dao.SQLFileName = "SelectOrders.sql"; // çµææ ŒçŽçšã® DataTable System.Data.DataTable table = new System.Data.DataTable(); // DB ãã泚ææ å ±äžèŠ§ãååŸããDataTable ã«æ ŒçŽãã dao.ExecSelectFill_DT(table); // æ»ãå€ã¯ã©ã¹ã«æ³šææ å ±äžèŠ§ãæ ŒçŽããB å±€ã¯ã©ã¹ã«è¿ã returnValue.Orders = table; return returnValue; }
-
åæ§ã«ã泚æ ID ãããšã«ã泚ææ å ±ã®è©³çŽ°ãååŸãã
GetOrderById
ã¡ãœãããäœæããŸããpublic OrderReturnValue GetOrderById(OrderParameterValue orderParameter) { // æ»ãå€ã¯ã©ã¹ãäœæãã OrderReturnValue returnValue = new OrderReturnValue(); // èªåçæãã D å±€ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãçæãã DaoOrders orderDao = new DaoOrders(this.Dam); DaoOrder_Details orderDetailsDao = new DaoOrder_Details(this.Dam); // 泚ææ å ±ã泚æ詳现æ å ±ãæ ŒçŽããããã® DataTable System.Data.DataTable orderTable = new System.Data.DataTable(); System.Data.DataTable orderDetailsTable = new System.Data.DataTable(); // ãã©ã¡ãŒã¿ãèšå®ãã orderDao.PK_OrderID = orderParameter.OrderId; orderDetailsDao.PK_OrderID = orderParameter.OrderId; // 泚æ ID ãããšã«æ³šææ å ±ãæ€çŽ¢ãã orderDao.D2_Select(orderTable); orderDetailsDao.D2_Select(orderDetailsTable); // æ»ãå€ã¯ã©ã¹ã«çµæã»ãããæ ŒçŽããB å±€ã¯ã©ã¹ã«è¿ã returnValue.Orders = orderTable; returnValue.OrderDetails = orderDetailsTable; return returnValue; }
-
åæ§ã«ãç»é¢ã§å ¥åãã泚ææ å ±ã DB ã«åæ ãã
UpdateOrder
ã¡ãœãããäœæããŸããpublic OrderReturnValue UpdateOrder(OrderParameterValue orderParameter) { // æ»ãå€ã¯ã©ã¹ãäœæãã OrderReturnValue returnValue = new OrderReturnValue(); // èªåçæãã D å±€ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãçæãã DaoOrders orderDao = new DaoOrders(this.Dam); DaoOrder_Details orderDetailsDao = new DaoOrder_Details(this.Dam); // 泚ææ å ±ã泚æ詳现æ å ±ãæ ŒçŽããããã® DataTable System.Data.DataTable orderTable = orderParameter.Orders; System.Data.DataTable orderDetailsTable = orderParameter.OrderDetails; // ã¬ã³ãŒãã®ç¶æ ã確èªããä¿®æ£ãããŠããã DB ãæŽæ°ãã if (orderTable.Rows[0].RowState == System.Data.DataRowState.Modified) { // 泚ææ å ±ïŒãµããªïŒæŽæ°çšã®ãã¿ã¡ãŒã¿ãèšå®ãã orderDao.PK_OrderID = orderTable.Rows[0]["OrderId"]; orderDao.Set_OrderDate_forUPD = orderTable.Rows[0]["OrderDate"]; orderDao.Set_RequiredDate_forUPD = orderTable.Rows[0]["RequiredDate"]; orderDao.Set_ShippedDate_forUPD = orderTable.Rows[0]["ShippedDate"]; orderDao.Set_ShipVia_forUPD = orderTable.Rows[0]["ShipVia"]; orderDao.Set_Freight_forUPD = orderTable.Rows[0]["Freight"]; orderDao.Set_ShipName_forUPD = orderTable.Rows[0]["ShipName"]; orderDao.Set_ShipAddress_forUPD = orderTable.Rows[0]["ShipAddress"]; orderDao.Set_ShipCity_forUPD = orderTable.Rows[0]["ShipCity"]; orderDao.Set_ShipRegion_forUPD = orderTable.Rows[0]["ShipRegion"]; orderDao.Set_ShipPostalCode_forUPD = orderTable.Rows[0]["ShipPostalCode"]; orderDao.Set_ShipCountry_forUPD = orderTable.Rows[0]["ShipCountry"]; // 泚ææ å ±ïŒãµããªïŒãæŽæ°ãã orderDao.D3_Update(); } foreach (System.Data.DataRow row in orderDetailsTable.Rows) { // ã¬ã³ãŒãã®ç¶æ ã確èªããä¿®æ£ãããŠããã DB ãæŽæ°ãã if (row.RowState == System.Data.DataRowState.Modified) { // 泚ææ å ±ïŒæ现ïŒæŽæ°çšã®ãã©ã¡ãŒã¿ãèšå®ãã orderDetailsDao.PK_OrderID = row["OrderId"]; orderDetailsDao.PK_ProductID = row["ProductId"]; orderDetailsDao.Set_UnitPrice_forUPD = row["UnitPrice"]; orderDetailsDao.Set_Quantity_forUPD = row["Quantity"]; orderDetailsDao.Set_Discount_forUPD = row["Discount"]; // 泚ææ å ±ïŒæ现ïŒãæŽæ°ãã orderDetailsDao.D3_Update(); } } // æ»ãå€ã¯ã©ã¹ãBå±€ã¯ã©ã¹ã«è¿ãïŒæŽæ°åŠçã®ãããæ»ãå€ã¯ãªãïŒ return returnValue; }
-
Visual Studio ã®ãœãªã¥ãŒã·ã§ã³ ãšã¯ã¹ãããŒã©ãŒã§ã
Logic\Business
ãã©ã«ããéžæããããŒã«ããŒã®ããããžã§ã¯ã(P)ã-ãã¯ã©ã¹ã®è¿œå (C)ããéžæããŸãã -
OrdersLogic.cs
ãšããååã®ã¯ã©ã¹ãè¿œå ããŸãã -
以äžã®ã³ãŒãã
OrdersLogic.cs
ã«è¿œå ããOpen æ£æ¢ãæäŸããã¯ã©ã¹ãåŒæ°ã»æ»ãå€ã¯ã©ã¹ãD å±€ã¯ã©ã¹ãã€ã³ããŒãããŸãã// æ¥åãã¬ãŒã ã¯ãŒã¯ using Touryo.Infrastructure.Business.Business; using Touryo.Infrastructure.Business.Common; using Touryo.Infrastructure.Business.Dao; using Touryo.Infrastructure.Business.Exceptions; using Touryo.Infrastructure.Business.Presentation; using Touryo.Infrastructure.Business.Util; // ãã¬ãŒã ã¯ãŒã¯ using Touryo.Infrastructure.Framework.Business; using Touryo.Infrastructure.Framework.Common; using Touryo.Infrastructure.Framework.Dao; using Touryo.Infrastructure.Framework.Exceptions; using Touryo.Infrastructure.Framework.Presentation; using Touryo.Infrastructure.Framework.Util; using Touryo.Infrastructure.Framework.Transmission; using Touryo.Infrastructure.Framework.RichClient.Presentation; // éšå using Touryo.Infrastructure.Public.Db; using Touryo.Infrastructure.Public.IO; using Touryo.Infrastructure.Public.Log; using Touryo.Infrastructure.Public.Str; using Touryo.Infrastructure.Public.Util; // åŒæ°ã»æ»ãå€ã¯ã©ã¹ using SPA_Sample.Codes.Common; // DAO ã¯ã©ã¹ using SPA_Sample.Codes.Dao;
-
OrdersLogic
ã¯ã©ã¹å®£èšéšåã以äžã®ããã«ä¿®æ£ããOpen æ£æ¢ã®ãæ¥å芪ã¯ã©ã¹ 2ããç¶æ¿ãããŸããpublic class OrdersLogic : MyFcBaseLogic
-
OrdersLogic
ã¯ã©ã¹ã«ã泚ææ å ±äžèŠ§ååŸçšã®UOC_GetOrders
ã¡ãœããã»æ³šæ ID ãããšã«æ³šææ å ±ã®è©³çŽ°ãååŸããããã®UOC_GetOrderById
ã¡ãœããã»æ³šææ å ±æŽæ°çšã®UOC_UpdateOrder
ã¡ãœãããäœæããŸãããã ããDAO ã¯ã©ã¹ã®åŒã³åºã㯠DAO éçŽã¯ã©ã¹ãè¡ããŸãã®ã§ãB å±€ã¯ã©ã¹ã¯ãP å±€ã¯ã©ã¹ãš DAO éçŽã¯ã©ã¹ã®äžç¶ã®ã¿ãè¡ããŸããprivate void UOC_GetOrders(OrderParameterValue orderParameter) { // DAO éçŽã¯ã©ã¹ãçæãã ConsolidatedLayerD facade = new ConsolidatedLayerD(this.GetDam()); // 泚ææ å ±äžèŠ§ãååŸãã OrderReturnValue returnValue = facade.GetOrders(orderParameter); // æ»ãå€ã¯ã©ã¹ãè¿ã this.ReturnValue = returnValue; } private void UOC_GetOrderById(OrderParameterValue orderParameter) { // DAO éçŽã¯ã©ã¹ãçæãã ConsolidatedLayerD facade = new ConsolidatedLayerD(this.GetDam()); // 泚ææ å ±ã®è©³çŽ°ãååŸãã OrderReturnValue returnValue = facade.GetOrderById(orderParameter); // æ»ãå€ã¯ã©ã¹ãè¿ã this.ReturnValue = returnValue; } private void UOC_UpdateOrder(OrderParameterValue orderParameter) { // DAO éçŽã¯ã©ã¹ãçæãã ConsolidatedLayerD facade = new ConsolidatedLayerD(this.GetDam()); // 泚ææ å ±ãDBã«ç»é²ãã OrderReturnValue returnValue = facade.UpdateOrder(orderParameter); // æ»ãå€ã¯ã©ã¹ãè¿ã this.ReturnValue = returnValue; }
ã泚æãOpen æ£æ¢ã®ãæ¥å芪ã¯ã©ã¹ 2ãã§ãã
MyFcBaseLogic
ã¯ã©ã¹ãç¶æ¿ãã B å±€ã¯ã©ã¹ã§ã¯ãP å±€ããåŒã³åºãããã¡ãœããåã¯UOC_xx
(xx ã¯ä»»æ) ãšããå¿ èŠããããŸããP å±€ãã âxxâ ã®éšåããã©ã¡ãŒã¿ãšããŠæž¡ãããšã§ãOpen æ£æ¢ã«ããUOC_xx
ã¡ãœããã«åŠçãæ¯ãåããããŸãã(åŸè¿°)
æ¬ç¯ã§ã¯ãç»é¢ããã®ãªã¯ãšã¹ããåãåããControllerã¯ã©ã¹ããç»é¢ã«è¡šç€ºããããŒã¿ãã³ãã³ããªã©ãå®çŸ©ãããViewModelããç»é¢è¡šç€ºãè¡ããViewããäœæããŸãã
ãªããæ¬ãã¥ãŒããªã¢ã«ã§ã¯ãVisual Studio ã® SPA ãã³ãã¬ãŒãã«æ¢å®ã§å梱ãããŠãããKnockoutããšåŒã°ãã JavaScript ãã¬ãŒã ã¯ãŒã¯ã䜿çšããŸãããã®ãããViewModel ããã³ View ã®äœæéšåã¯ããã® Knockout ãã¬ãŒã ã¯ãŒã¯ã®èšæ³ã«ããããå¿ èŠããããŸããããå®éã®æ¡ä»¶ã§ãAngular / Angular 2 / React ãªã©ãä»ã® JavaScript ãã¬ãŒã ã¯ãŒã¯ã䜿çšããå Žåã¯ã4.5.2 é ããã³ 4.5.3 é ããé©å®äœ¿çšãããã¬ãŒã ã¯ãŒã¯ã®èšæ³ã«èªã¿æ¿ããŠãã ãããïŒå³ 1-1 ã«ç€ºããå šäœçãªã¯ã©ã¹æ§æã¯ã䜿çšãã JavaScript ãã¬ãŒã ã¯ãŒã¯ã®å·®ç°ã«å€§ãã圱é¿ããŸããïŒ
ãŸããView ããã®ãªã¯ãšã¹ããåãä»ãã Web API ãäœæããŸããWeb API ãžã¯ JavaScript ãã¬ãŒã ã¯ãŒã¯ãä»ããŠãView ã®å ¥åããŒã¿ã JSON 圢åŒã§éä¿¡ãããŸãã
-
View ãš Web API ã®éã§åãæž¡ããã JSON ãã©ãŒããããå®çŸ©ããŸãããã®ãšãã
{ "åå": "å€" }
ã®ããã«ãJSON ããŒã¿ã®ååãšãã©ã®ãããªå€ (ããŒã¿å) ãéä¿¡ããããã決å®ããŸããæ¬ãã¥ãŒããªã¢ã«ã§ã¯ã以äžã®ããã«å®çŸ©ããŸãã-
äžèŠ§ååŸæ©èœ
-
View -> Web API
{} (åãæž¡ãããŒã¿ãªã)
-
Web API -> View
[{"OrderID": 泚æçªå·, "CustomerID": 顧客çªå·, "EmployeeID": åŸæ¥å¡çªå·, "OrderDate": 泚ææ¥, "RequiredDate": æèŠææ¥, "ShippedDate": åºè·æ¥, "ShipVia": 茞éæ¹æ³, "Freight": 茞éæ, "ShipName": ãå±ãå æ°å, "ShipAddress": ãå±ãå äœæ, "ShipCity": ãå±ãå éœåž, "ShipRegion": ãå±ãå å°æ¹, "ShipPostalCode": ãå±ãå éµäŸ¿çªå·, "ShipCountry": ãå±ãå åœå, "ProductID": ååçªå·, "UnitPrice": å䟡, "Quantity": æ°é, "Discount": å²åŒ}, âŠ] (泚ææ å ±ã®ãªã¹ã)
-
-
1 件ååŸ
-
View -> Web API
{"OrderID": 泚æçªå·}
-
Web API -> View
{"OrderID": 泚æçªå·, "CustomerID": 顧客çªå·, "EmployeeID": åŸæ¥å¡çªå·, "OrderDate": 泚ææ¥, "RequiredDate": æèŠææ¥, "ShippedDate": åºè·æ¥, "ShipVia": 茞éæ¹æ³, "Freight": 茞éæ, "ShipName": ãå±ãå æ°å, "ShipAddress": ãå±ãå äœæ, "ShipCity": ãå±ãå éœåž, "ShipRegion": ãå±ãå å°æ¹, "ShipPostalCode": ãå±ãå éµäŸ¿çªå·, "ShipCountry": ãå±ãå åœå, "ProductID": ååçªå·, "UnitPrice": å䟡, "Quantity": æ°é, "Discount": å²åŒ}
-
-
1 件æŽæ°
-
View -> Web API
{"OrderID": 泚æçªå·, "CustomerID": 顧客çªå·, "EmployeeID": åŸæ¥å¡çªå·, "OrderDate": 泚ææ¥, "RequiredDate": æèŠææ¥, "ShippedDate": åºè·æ¥, "ShipVia": 茞éæ¹æ³, "Freight": 茞éæ, "ShipName": ãå±ãå æ°å, "ShipAddress": ãå±ãå äœæ, "ShipCity": ãå±ãå éœåž, "ShipRegion": ãå±ãå å°æ¹, "ShipPostalCode": ãå±ãå éµäŸ¿çªå·, "ShipCountry": ãå±ãå åœå, "ProductID": ååçªå·, "UnitPrice": å䟡, "Quantity": æ°é, "Discount": å²åŒ}
-
Web API -> View
{æŽæ°ãããã¬ã³ãŒã件æ°}
-
-
-
å ã»ã©å®çŸ©ãã JSON ããŒã¿ãæ ŒçŽããããã®ãªããžã§ã¯ããäœæããŸããããã§ãå®çŸ©ãã JSON ããŒã¿ã®ååãšãããããã£ã®ååãåãããŠãããšãèªåçã«éä¿¡ããã JSON ããŒã¿ããªããžã§ã¯ãã«æ ŒçŽãããŸããVisual Studio ã®ãœãªã¥ãŒã·ã§ã³ ãšã¯ã¹ãããŒã©ãŒã§ã
Models
ãã©ã«ããéžæããããŒã«ããŒã®ããããžã§ã¯ã(P)ã-ãã¯ã©ã¹ã®è¿œå (C)ããéžæããŸãã -
WebApiOrderParams.cs
ãšããååã®ã¯ã©ã¹ãè¿œå ããŸãã -
WebApiOrderParams.cs
ã«ãJSON ãã©ãŒãããã§ããŒã¿ãéãããã®ããããã£ãè¿œå ããŸãã(å è¿°ã®ãšãããããããã£ã®ååã¯ãJSON ããŒã¿ã®ååã«åãããŠãããŸã)/// <summary>Order ID</summary> public string OrderId { get; set; } /// <summary>Product ID</summary> public string ProductId { get; set; } /// <summary>Unit Price</summary> public string UnitPrice { get; set; } /// <summary>Quantity</summary> public string Quantity { get; set; } /// <summary>Discount</summary> public string Discount { get; set; } /// <summary>Customer ID</summary> public string CustomerID { get; set; } /// <summary>Employee ID</summary> public string EmployeeID { get; set; } /// <summary>Order Date</summary> public string OrderDate { get; set; } /// <summary>Required Date</summary> public string RequiredDate { get; set; } /// <summary>Shipped Date</summary> public string ShippedDate { get; set; } /// <summary>Ship Via</summary> public string ShipVia { get; set; } /// <summary>Freight</summary> public string Freight { get; set; } /// <summary>Ship Name</summary> public string ShipName { get; set; } /// <summary>Ship Address</summary> public string ShipAddress { get; set; } /// <summary>Ship City</summary> public string ShipCity { get; set; } /// <summary>Ship Region</summary> public string ShipRegion { get; set; } /// <summary>Ship Postal Code</summary> public string ShipPostalCode { get; set; } /// <summary>Ship Country</summary> public string ShipCountry { get; set; }
-
次ã«ã泚ææ å ±ç»é¢ (View) ã衚瀺ããããã®ã³ã³ãããŒã©ãŒã¯ã©ã¹ãäœæããŸããVisual Studio ã§ã
Controllers
ãã©ã«ããå³ã¯ãªãã¯ãããè¿œå ã-ãã³ã³ãããŒã©ãŒããéžæããŸãã -
ã³ã³ãããŒã©ãŒã®è¿œå ãã€ã¢ãã°ã§ã以äžã®ããã«èšå®ãããè¿œå ããã¿ã³ãã¯ãªãã¯ããŸãã
- ã³ã³ãããŒã©ãŒå: OrderController
- ãã³ãã¬ãŒã: 空㮠MVC ã³ã³ãããŒã©ãŒ
-
次ã«ãViewModel ããã®ãªã¯ãšã¹ããåãåããæ¥åããžãã¯ã¯ã©ã¹ãåŒã³åºã Web API ã³ã³ãããŒã©ãŒã¯ã©ã¹ãäœæããŸãã
OrderController.cs
ã«ä»¥äžã®ã³ãŒããè¿œå ããOpenæ£æ¢ãæäŸããŠããåå空éãã€ã³ããŒãããŸãã// Open Touryo framework // Business using Touryo.Infrastructure.Business.Business; using Touryo.Infrastructure.Business.Common; using Touryo.Infrastructure.Business.Dao; using Touryo.Infrastructure.Business.Exceptions; using Touryo.Infrastructure.Business.Presentation; using Touryo.Infrastructure.Business.Util; // Framework using Touryo.Infrastructure.Framework.Business; using Touryo.Infrastructure.Framework.Common; using Touryo.Infrastructure.Framework.Dao; using Touryo.Infrastructure.Framework.Exceptions; using Touryo.Infrastructure.Framework.Presentation; using Touryo.Infrastructure.Framework.Util; using Touryo.Infrastructure.Framework.Transmission; // Public using Touryo.Infrastructure.Public.Db; using Touryo.Infrastructure.Public.IO; using Touryo.Infrastructure.Public.Log; using Touryo.Infrastructure.Public.Str; using Touryo.Infrastructure.Public.Util; // Logic inside application using SPA_Sample.Codes.Business; using SPA_Sample.Codes.Common; using SPA_Sample.Models; // System using System.Net; using System.Net.Http; using System.Web.Http; using System.Data;
-
OrderController.cs
ã® SPA_Sample.Controllers åå空éã«ã泚ææ å ±ãååŸãã Web API ã³ã³ãããŒã©ãŒã¯ã©ã¹ãäœæããŸãã(ããã§ãéä¿¡ããã JSON ããŒã¿ã®æ ŒçŽçšã«ãå ã»ã©äœæãã WebApiOrderParams ã¯ã©ã¹ãåŒæ°ã«æå®ããŸã)public class GetOrdersController : ApiController { public HttpResponseMessage Post(WebApiOrderParams param) { // Create an object of Parameter Value class OrderParameterValue orderParameterValue = new OrderParameterValue("OrdersList", string.Empty, "GetOrders", "SQL", new MyUserInfo("user01", "192.168.1.1")); // Create objects of Return Value class and Business logic class OrderReturnValue orderReturnValue; OrdersLogic logic = new OrdersLogic(); // Get the list of orders information and store in the return value object orderReturnValue = (OrderReturnValue)logic.DoBusinessLogic(orderParameterValue); if (orderReturnValue.ErrorFlag == true) { // If the Return Value object has error, display the possible error message string message = string.Empty; message = "ErrorMessageID:" + orderReturnValue.ErrorMessageID + ";"; message += "ErrorMessage:" + orderReturnValue.ErrorMessage + ";"; message += "ErrorInfo:" + orderReturnValue.ErrorInfo; Dictionary<string, string> dic = new Dictionary<string, string>(); dic.Add("Error", message); return Request.CreateResponse(HttpStatusCode.OK, dic); } else { // Display the list of orders information DataTable dt = orderReturnValue.Orders; List<Dictionary<string, string>> list = new List<Dictionary<string, string>>(); foreach (DataRow row in dt.Rows) { Dictionary<string, string> dic = new Dictionary<string, string>(); for (int index = 0; index < dt.Columns.Count; index++) { dic.Add(dt.Columns[index].ColumnName, row[index].ToString()); } list.Add(dic); } return Request.CreateResponse(HttpStatusCode.OK, list); } } }
ã泚æãäžèšã®ããã«ãWeb API ã³ã³ãããŒã©ãŒã®äœæã«ãããã以äžã®ã«ãŒã«ãããã
- ã¯ã©ã¹åã¯å¿ ããxxxControllerããšããå¿ èŠããããïŒãã® "xxx" ãã³ã³ãããŒã©ãŒåãšãªãïŒ
- ApiController ã¯ã©ã¹ãç¶æ¿ããå¿ èŠãããã
-
次ã«ã泚æ ID ãããšã«æ³šææ å ±ãšæ³šæ詳现æ å ±ãååŸããããã® Web API ã³ã³ãããŒã©ãŒã¯ã©ã¹ãäœæããŸãã
public class GetOrderByIdController : ApiController { public HttpResponseMessage Post(WebApiOrderParams param) { // Create an object of Parameter Value class OrderParameterValue orderParameterValue = new OrderParameterValue("OrderInformation", string.Empty, "GetOrderById", "SQL", new MyUserInfo("user01", "192.168.1.1")); // Send Order ID as search condition orderParameterValue.OrderId = param.OrderId; // Create objects of Return Value class and Business logic class OrderReturnValue orderReturnValue; OrdersLogic logic = new OrdersLogic(); // Get the order summary and order details information and store in the return value object orderReturnValue = (OrderReturnValue)logic.DoBusinessLogic(orderParameterValue); if (orderReturnValue.ErrorFlag == true) { // If the Return Value object has error, display the possible error message string message = string.Empty; message = "ErrorMessageID:" + orderReturnValue.ErrorMessageID + ";"; message += "ErrorMessage:" + orderReturnValue.ErrorMessage + ";"; message += "ErrorInfo:" + orderReturnValue.ErrorInfo; Dictionary<string, string> dic = new Dictionary<string, string>(); dic.Add("Error", message); return Request.CreateResponse(HttpStatusCode.OK, dic); } else { // Display the order information (summary) and order information (details) DataTable dtOrders = orderReturnValue.Orders; List<Dictionary<string, string>>[] list = new List<Dictionary<string, string>>[2]; list[0] = new List<Dictionary<string, string>>(); list[1] = new List<Dictionary<string, string>>(); foreach (DataRow row in dtOrders.Rows) { Dictionary<string, string> dic = new Dictionary<string, string>(); for (int index = 0; index < dtOrders.Columns.Count; index++) { dic.Add(dtOrders.Columns[index].ColumnName, row[index].ToString()); } list[0].Add(dic); } DataTable dtOrderDetails = orderReturnValue.OrderDetails; foreach (DataRow row in dtOrderDetails.Rows) { Dictionary<string, string> dic = new Dictionary<string, string>(); for (int index = 0; index < dtOrderDetails.Columns.Count; index++) { dic.Add(dtOrderDetails.Columns[index].ColumnName, row[index].ToString()); } list[1].Add(dic); } return Request.CreateResponse(HttpStatusCode.OK, list); } } }
-
åæ§ã«ã泚ææ å ±ãšæ³šæ詳现æ å ±ãæŽæ°ããããã® Web API ã³ã³ãããŒã©ãŒã¯ã©ã¹ãäœæããã
public class UpdateOrderController : ApiController { public HttpResponseMessage Post(WebApiOrderParams param) { // Create an object of Parameter Value class OrderParameterValue orderParameterValue = new OrderParameterValue("OrderInformation", string.Empty, "UpdateOrder", "SQL", new MyUserInfo("user01", "192.168.1.1")); // Set the parameters of order summary information orderParameterValue.OrderId = param.OrderId; orderParameterValue.CustomerID = param.CustomerID; orderParameterValue.EmployeeID = param.EmployeeID; orderParameterValue.OrderDate = param.OrderDate; orderParameterValue.RequiredDate = param.RequiredDate; orderParameterValue.ShippedDate = param.ShippedDate; orderParameterValue.ShipName = param.ShipName; orderParameterValue.ShipVia = param.ShipVia; orderParameterValue.ShipAddress = param.ShipAddress; orderParameterValue.ShipCountry = param.ShipCountry; orderParameterValue.ShipCity = param.ShipCity; orderParameterValue.ShipRegion = param.ShipRegion; orderParameterValue.ShipPostalCode = param.ShipPostalCode; orderParameterValue.Freight = param.Freight; // Set the parameters of order details information orderParameterValue.ProductId = param.ProductId; orderParameterValue.UnitPrice = param.UnitPrice; orderParameterValue.Quantity = param.Quantity; orderParameterValue.Discount = param.Discount; // Create objects of Return Value class and Business logic class OrderReturnValue orderReturnValue; OrdersLogic logic = new OrdersLogic(); // Update the order information (summary) and order information (details) orderReturnValue = (OrderReturnValue)logic.DoBusinessLogic(orderParameterValue); // Create an object of string to display message string message = string.Empty; Dictionary<string, string> dic = new Dictionary<string, string>(); if (orderReturnValue.ErrorFlag == true) { // If the Return Value object has error, display the possible error message message = "ErrorMessageID:" + orderReturnValue.ErrorMessageID + ";"; message += "ErrorMessage:" + orderReturnValue.ErrorMessage + ";"; message += "ErrorInfo:" + orderReturnValue.ErrorInfo; dic.Add("Error", message); return Request.CreateResponse(HttpStatusCode.OK, dic); } else { // Display the success message message = "Successfully updated order summary and order details information."; dic.Add("Message", message); return Request.CreateResponse(HttpStatusCode.OK, dic); } } }
-
Visual Studio ã®ãœãªã¥ãŒã·ã§ã³ ãšã¯ã¹ãããŒã©ãŒã§ã
Scripts\app
ãã©ã«ããéžæããããŒã«ããŒã®ããããžã§ã¯ã(P)ã-ãæ°ããé ç®ã®è¿œå (W)ããéžæããŸãã -
Order.viewmodel.js
ãšããååã® JavaScript ãã¡ã€ã«ãè¿œå ããŸãã -
Order.viewmodel.js
ã«ãOrderViewModel ã¡ãœãããäœæãããã¥ãŒã«ãã€ã³ããããããããã£ããã³ã³ãã³ããå®çŸ©ããŸããfunction OrderViewModel() { // Orders list, order summary and order details information (JSON format) this.dataOrders = ko.observableArray(); this.dataOrder = ko.observableArray(); this.dataOrderDetails = ko.observableArray(); // Success message this.Result = ko.observable(""); // Error message this.ErrorMessage = ko.observable(""); // Handles visibility Orders list, order summary and order details information this.CanDisplayOrders = ko.observable(true); this.CanDisplayOrderInfo = ko.observable(false); this.CanEditOrderInfo = ko.observable(false); this.DisplayOrders = function () { var self = this; self.CanDisplayOrders(true); self.CanDisplayOrderInfo(false); self.CanEditOrderInfo(false); }; this.DisplayOrderInfo = function () { var self = this; self.CanDisplayOrders(false); self.CanDisplayOrderInfo(true); self.CanEditOrderInfo(false); }; this.EditOrderInfo = function () { var self = this; self.CanDisplayOrders(false); self.CanDisplayOrderInfo(false); self.CanEditOrderInfo(true); }; // Gets the list of Orders this.GetOrders = function () { var self = this; // Reset the error message this.ErrorMessage(""); // Set the parameters in JSON format var param = {} // Ajax request $.ajax({ type: 'POST', url: '/api/GetOrders', data: param, dataType: 'json', success: function (data, dataType) { if (data.error) { // Set the error message self.ErrorMessage(data.error); } else { // Reset the Orders information self.ClearList(); // Enable visibility of Orders self.DisplayOrders(); // Set the list of Orders self.dataOrders(data); } }, error: function (XMLHttpRequest, textStatus, errorThrown) { // Set the error message self.ErrorMessage(XMLHttpRequest.responseText); } }); }; // Get the order summary and order details information this.GetOrderById = function (orderID) { var self = this; // Reset the error message this.ErrorMessage(""); // Set the parameters in JSON format var param = { OrderId: orderID } // Ajax request $.ajax({ type: 'POST', url: '/api/GetOrderById', data: param, dataType: 'json', success: function (data, dataType) { if (data.error) { // Set the error message self.ErrorMessage(data.error); } else { // Reset the orders information self.ClearList(); // Enable visibility of order information self.DisplayOrderInfo(); // Set the order information self.dataOrder(data[0]); self.dataOrderDetails(data[1]); } }, error: function (XMLHttpRequest, textStatus, errorThrown) { // Set the error message self.ErrorMessage(XMLHttpRequest.responseText); } }); }; // Enable the order summary and order details information to edit this.EditOrder = function (data) { var self = this; this.Result(""); self.EditOrderInfo(); self.dataOrderDetails(data); }; // Updates the selected order summary and order details information this.UpdateOrder = function () { var self = this; // Reset the error message this.ErrorMessage(""); // Set the parameters in JSON format var param = { OrderID: self.dataOrder()[0].orderID, CustomerID: self.dataOrder()[0].customerID, EmployeeID: self.dataOrder()[0].employeeID, OrderDate: self.dataOrder()[0].orderDate, RequiredDate: self.dataOrder()[0].requiredDate, ShippedDate: self.dataOrder()[0].shippedDate, ShipVia: self.dataOrder()[0].shipVia, Freight: self.dataOrder()[0].freight, ShipName: self.dataOrder()[0].shipName, ShipAddress: self.dataOrder()[0].shipAddress, ShipCity: self.dataOrder()[0].shipCity, ShipRegion: self.dataOrder()[0].shipRegion, ShipPostalCode: self.dataOrder()[0].shipPostalCode, ShipCountry: self.dataOrder()[0].shipCountry, ProductID: self.dataOrderDetails().productID, UnitPrice: self.dataOrderDetails().unitPrice, Quantity: self.dataOrderDetails().quantity, Discount: self.dataOrderDetails().discount } // Ajax request $.ajax({ type: 'POST', url: '/api/UpdateOrder', data: param, dataType: 'json', success: function (data, dataType) { if (data.error) { // Set the error message self.ErrorMessage(data.error); } else { // Set the success message self.Result(data.message); } }, error: function (XMLHttpRequest, textStatus, errorThrown) { // Set the error message self.ErrorMessage(XMLHttpRequest.responseText); } }); }; // Resets the orders list, order summary and order details information this.ClearList = function () { this.dataOrders([]); this.dataOrder([]); this.dataOrderDetails([]); }; } // Creates Order ViewModel var model = new OrderViewModel(); // Creates dialog to display error message model.ErrorMessage.subscribe(function (newValue) { if (newValue != '') { $('<div>' + newValue + '</div>').dialog({ title: 'Error!', modal: true, resizable: false, height: 600, width: 800, buttons: { 'OK': function (event) { $(this).dialog('close'); } } }); } }); // Activates knockout.js ko.applyBindings(model);
-
Visual Studio ã§
App_Start\BundleConfig.cs
ãéããOrder.viewmodel.js
ãžã®åç §ãå®çŸ©ããŸããbundles.Add(new ScriptBundle("~/bundles/Order").Include("~/Scripts/app/Order.viewmodel.js"));
-
OrderController
ã¯ã©ã¹ã® Index ã¡ãœãã (ã®ã©ãã) ã§å³ã¯ãªãã¯ããããã¥ãŒã®è¿œå ããéžæããŸãã -
ãã¥ãŒã®è¿œå ãã€ã¢ãã°ã§ä»¥äžã®ããã«èšå®ãããè¿œå ããã¿ã³ãã¯ãªãã¯ããŸãã
- ãã¥ãŒå: Index
- ãã¥ãŒãšã³ãžã³: Razor (CSHTML)
- å³å¯ã«åæå®ããããã¥ãŒãäœæãã: ãã§ãã¯ãªã
- éšåãã¥ãŒãšããŠäœæãã: ãã§ãã¯ãªã
- ã¬ã€ã¢ãŠããŸãã¯ãã¹ã¿ãŒããŒãžã䜿çšãã: ãã§ãã¯ãã
-
泚ææ å ±ã®äžèŠ§ãããã³æ³šææ å ±ãšæ³šæ詳现æ å ±ã衚瀺ãã泚ææ å ±ãšæ³šæ詳现æ å ±ãæŽæ°ããããã«ãã¥ãŒãå®çŸ©ããŸãã(ããã§ã¯ãViewModel ã«å®çŸ©ãããç»é¢è¡šç€ºå¯ã»äžå¯ãå€å®çšã® CanDisplayOrders ã¡ãœãããCanDisplayOrderInfo ã¡ãœãããCanEditOrderInfo ã¡ãœããã®çµæãããšã«ãç»é¢è¡šç€ºãåãæ¿ããŠããŸã)
<!--Title and header information--> @{ ViewBag.Title = "Open Touryo SPA Sample"; Layout = "~/Views/Shared/_Layout.cshtml"; } <div style="width:100%;padding:0.5em 0em;background:#f0f0f0;"> <b style="margin-left:0.4em;font-size:1.5em;">Open Touryo SPA Sample</b> </div> <!--Displays List of Orders--> <div style="width:100%;height:460px;margin-top:0.5em;overflow:scroll;display:none;" data-bind="visible: GetOrders(), style: { display: $root.CanDisplayOrders() === true ? 'block' : 'none' }"> <b style="margin-left:1em;">List of Orders:</b> <table style="width:100%;margin-top:0.5em;font-size:medium;"> <thead> <tr> <th style="width:8%;">Order ID</th> <th style="width:18%">Company Name</th> <th style="width:18%">Contact Name</th> <th style="width:18%">Employee Last Name</th> <th style="width:18%">Employee First Name</th> <th style="width:15%">Order Date</th> </tr> </thead> <tbody data-bind="foreach: dataOrders"> <tr> <td> <a data-bind="text: orderID, click: function(){ $root.GetOrderById($data.orderID) }" href="javascript:void(0)" /> </td> <td data-bind="text: companyName"></td> <td data-bind="text: contactName"></td> <td data-bind="text: employeeLastName"></td> <td data-bind="text: employeeFirstName"></td> <td data-bind="text: orderDate"></td> </tr> </tbody> </table> </div> <!--Displays the order summary and order details information--> <div style="width:100%;display:none;" data-bind="style: { display: CanDisplayOrderInfo() === true ? 'block' : 'none' }"> <!--Displays the Order information (Summary)--> <div style="width: 100%;margin-top:0.5em;"> <b style="margin-left:1em;">Order information (Summary):</b> <table style="width:100%;margin-top:0.5em;font-size:small;"> <thead> <tr> <th>Order ID</th> <th>Customer ID</th> <th>Employee ID</th> <th>Order Date</th> <th>Required Date</th> <th>Shipped Date</th> <th>Ship Via</th> <th>Freight</th> <th>Ship Name</th> <th>Ship Address</th> <th>ShipCity</th> <th>Ship Region</th> <th>Ship PostalCode</th> <th>Ship Country</th> </tr> </thead> <tbody data-bind="foreach: dataOrder"> <tr> <td data-bind="text: orderID"></td> <td data-bind="text: customerID"></td> <td data-bind="text: employeeID"></td> <td data-bind="text: orderDate"></td> <td data-bind="text: requiredDate"></td> <td data-bind="text: shippedDate"></td> <td data-bind="text: shipVia"></td> <td data-bind="text: freight"></td> <td data-bind="text: shipName"></td> <td data-bind="text: shipAddress"></td> <td data-bind="text: shipCity"></td> <td data-bind="text: shipRegion"></td> <td data-bind="text: shipPostalCode"></td> <td data-bind="text: shipCountry"></td> </tr> </tbody> </table> </div> <!--Displays the Order information (Details)--> <div style="width:100%; margin-top:0.5em;"> <b style="margin-left:1em;">Order information (Details):</b> <table style="width:100%;margin-top:0.5em; font-size:small;"> <thead> <tr> <th></th> <th>Order ID</th> <th>Product ID</th> <th>Unit Price</th> <th>Quantity</th> <th>Discount</th> </tr> </thead> <tbody data-bind="foreach: dataOrderDetails"> <tr> <td> <a data-bind="click: function () { $root.EditOrder($data) }" href="javascript:void(0)">Edit</a> </td> <td data-bind="text: orderID"></td> <td data-bind="text: productID"></td> <td data-bind="text: unitPrice"></td> <td data-bind="text: quantity"></td> <td data-bind="text: discount"></td> </tr> </tbody> </table> </div> <!--Action controls--> <div style="width:100%;margin:0.5em 0;"> <div style="float:right;"> <input type="button" id="button1" value="<< Back" data-bind="click: function () { $root.GetOrders() }" /> </div> </div> </div> <!--Displays the order summary and order details information to update--> <div style="width:100%;display:none;" data-bind="style: { display: CanEditOrderInfo() === true ? 'block' : 'none' }"> <!--Update the Order information (Summary)--> <fieldset style="border:1px solid #ddd;width:96%;padding-bottom:1em;"> <legend style="font-weight:bold;display:block;margin-left:3px;"> Update Order information (Summary) </legend> <table style="width:100%;font-size:small;" data-bind="foreach: dataOrder"> <tr> <td style="width:16%;"><b>Order ID</b></td> <td style="width:16%;"> <label style="padding:0.3em 0;background:#f0f0f0;" data-bind="text: orderID" /> </td> <td style="width:16%;"><b>Customer ID</b></td> <td style="width:16%"> <input type="text" data-bind="value: customerID" /> </td> <td style="width:16%;"><b>Employee ID</b></td> <td style="width:16%;"> <input type="text" data-bind="value: employeeID" /> </td> </tr> <tr> <td><b>Order Date</b></td> <td> <input type="text" data-bind="value: orderDate" /> </td> <td><b>Required Date</b></td> <td> <input type="text" data-bind="value: requiredDate" /> </td> <td><b>Shipped Date</b></td> <td> <input type="text" data-bind="value: shippedDate" /> </td> </tr> <tr> <td><b>Ship Via</b></td> <td> <input type="text" data-bind="value: shipVia" /> </td> <td><b>Freight</b></td> <td> <input type="text" data-bind="value: freight" /> </td> <td><b>Ship Name</b></td> <td> <input type="text" data-bind="value: shipName" /> </td> </tr> <tr> <td><b>Ship Address</b></td> <td> <input type="text" data-bind="value: shipAddress" /> </td> <td><b>Ship City</b></td> <td> <input type="text" data-bind="value: shipCity" /> </td> <td><b>Ship Region</b></td> <td> <input type="text" data-bind="value: shipRegion" /> </td> </tr> <tr> <td><b>Ship Postal Code</b></td> <td> <input type="text" data-bind="value: shipPostalCode" /> </td> <td><b>Ship Country</b></td> <td> <input type="text" data-bind="value: shipCountry" /> </td> </tr> </table> </fieldset> <!--Update the Order information (Details)--> <fieldset style="border:1px solid #ddd;width:96%;padding-bottom:1em;"> <legend style="font-weight:bold;display:block;margin-left:3px;"> Update Order information (Details) </legend> <table style="width:100%;font-size:small;" data-bind="foreach: dataOrderDetails"> <tr> <td style="width:16%;"><b>Order ID</b></td> <td style="width:16%;"> <label style="padding:0.3em 0;background:#f0f0f0;" data-bind="text: orderID" /> </td> <td style="width:16%;"><b>Product ID</b></td> <td style="width:16%;"> <label style="padding:0.3em 0;background:#f0f0f0;" data-bind="text: productID" /> </td> <td style="width:16%;"><b>Unit Price</b></td> <td style="width:16%;"> <input type="text" data-bind="value: unitPrice" /> </td> </tr> <tr> <td><b>Quantity</b></td> <td> <input type="text" data-bind="value: quantity" /> </td> <td><b>Discount</b></td> <td> <input type="text" data-bind="value: discount" /> </td> </tr> </table> </fieldset> <!--Action controls--> <div style="width:100%;margin:0.5em 0px;"> <div style="float:left;"> <input type="button" id="button2" value="Update Order Information" data-bind="click: UpdateOrder" /> </div> <div style="float:right;" data-bind="foreach: dataOrder"> <input type="button" id="button3" value="<< Back" data-bind="click: function () {$root.GetOrderById($data.orderID)}" /> </div> </div> <div style="width:100%;margin:0.5em 0;display:inline-block;"> <label id="labelMessage" style="color:#088608;font-weight:bold;" data-bind="text: Result" /> </div> </div> @section scripts{ @Scripts.Render("~/bundles/knockout") @Scripts.Render("~/bundles/jqueryval") @Scripts.Render("~/bundles/Order") }
-
ã¹ã¿ãŒãã¡ãã¥ãŒã®ãããã°ã©ã ãšãã¡ã€ã«ã®æ€çŽ¢ãããã¯ã¹ã§
services.msc
ãå®è¡ããŸãã -
ãµãŒãã¹ç»é¢ãããASP.NET ç¶æ ãµãŒãã¹ããå³ã¯ãªãã¯ãããéå§ããéžæããŸãã
-
ãASP.NET ç¶æ ãµãŒãã¹ãã®ç¶æ ããéå§ãã«ãªã£ãããšã確èªããŸãã
-
Visual Studio ã®ãœãªã¥ãŒã·ã§ã³ ãšã¯ã¹ãããŒã©ãŒã§ã
SPA_Sample
ãããžã§ã¯ããå³ã¯ãªãã¯ãããããããã£ããéžæããŸãã -
SPA_Sample
ãããžã§ã¯ãã®ããããã£ç»é¢ã§ããWebããéžæããéå§åäœã以äžã®ããã«èšå®ããŸãã- éå§åäœ: ããŒãžãæå®ãã
- ããŒãž: Order
-
Visual Studio ã§ãµã³ãã«ããã°ã©ã ããããã°å®è¡ããŸãã
-
泚ææ å ±ã®äžèŠ§ã衚瀺ãããããšã確èªããŸãã
-
Order ID åã®ãªã³ã¯ãã¯ãªãã¯ããéžæãã Order ID ã®æ³šææ å ±ãšæ³šæ詳现æ å ±ã衚瀺ãããããšã確èªããŸãã
-
泚æ詳现æ å ±ã®ãEditããªã³ã¯ãã¯ãªãã¯ããŸãã
ã泚æã
ããã§ããShip Regionãã®å€ã NULL ã®å Žåãã¬ã³ãŒãæŽæ°æã« Open æ£æ¢ã®ãšã©ãŒãçºçããŸãããããã£ãŠãããã§ã¯ããShip Regionãã NULL ã§ãªãããŒã¿ãéžæããŠãã ããããShip Regionãã®å€ã NULL ã®ããŒã¿ã«å¯ŸããŠãæŽæ°å¯èœã«ããã«ã¯ã4.3.1 é ã§èªåçæãã SQL ãã¡ã€ã«ãä¿®æ£ããå¿ èŠããããŸãã詳现ã«ã€ããŠã¯ Open æ£æ¢ã®å©çšã¬ã€ã (åçãã©ã¡ã¿ã©ã€ãºãã¯ãšãªç·š) ãåç §ããŠãã ããã -
泚ææ å ±ãšæ³šæ詳现æ å ±ã®ç·šéç»é¢ã衚瀺ãããããšã確èªããŸãã泚ææ å ±ãšæ³šæ詳现æ å ±ãç·šéãããUpdate Order Informationããã¿ã³ãã¯ãªãã¯ããŸãã
-
以äžã®ããã«ãæåã瀺ãã¡ãã»ãŒãžã衚瀺ããã泚ææ å ±ãšæ³šæ詳现æ å ±ãæŽæ°ãããããšã確èªããã
-
C:\root\files\resource\Log\ACCESS.yyyy-mm-dd.log
ãã¡ã¢åž³ãªã©ã§éããŸãã(yyyy-mm-dd ã«ã¯ãå®è¡æ¥ä»ãå ¥ããŸã) -
æ¥åããžãã¯ã®åŒã³åºãå±¥æŽãããã¬ãŒã¹ãã°ãšããŠèšé²ãããŠããããšã確èªããŸãã
[2016/08/22 00:11:07,450],[INFO ],[9],,user01,192.168.1.1,----->>,OrderDetails,,GetOrders, [2016/08/22 00:11:08,350],[INFO ],[9],,user01,192.168.1.1,<<-----,OrderDetails,,GetOrders,,890,94 [2016/08/22 00:11:18,092],[INFO ],[8],,user01,192.168.1.1,----->>,OrderDetails,,GetOrderById, [2016/08/22 00:11:18,574],[INFO ],[8],,user01,192.168.1.1,<<-----,OrderDetails,,GetOrderById,,481,47 [2016/08/22 00:11:24,337],[INFO ],[7],,user01,192.168.1.1,----->>,OrderDetails,,UpdateOrder, [2016/08/22 00:11:24,700],[INFO ],[7],,user01,192.168.1.1,<<-----,OrderDetails,,UpdateOrder,,362,16
-
C:\root\files\resource\Log\SQLTRACE.yyyy-mm-dd.log
ãã¡ã¢åž³ãªã©ã§éããŸãã(yyyy-mm-dd ã«ã¯ãå®è¡æ¥ä»ãå ¥ããŸã) -
Orders ããŒãã«ã»Order Details ããŒãã«ã«å¯Ÿãã SQL æããã¬ãŒã¹ãšããŠèšé²ãããŠããããšã確èªããŸããïŒä»¥äžã¯ SQL ãã¬ãŒã¹ãã°ãããSELECT æã®å®è¡ãã°ãæç²ãããã®ã§ãïŒ
[2016/08/22 00:11:08,349],[INFO ],[9],238,31,[commandText]:SELECT Orders.OrderID, Customers.CompanyName, Customers.ContactName, Employees.LastName As EmployeeLastName, Employees.FirstName As EmployeeFirstName, Orders.OrderDate FROM Orders INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID INNER JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID [commandParameter]: [2016/08/22 00:11:18,373],[INFO ],[8],114,16,[commandText]: -- DaoOrders_D2_Select -- 2016/8/3 æ¥ç« 倪é SELECT [OrderID], [CustomerID], [EmployeeID], [OrderDate], [RequiredDate], [ShippedDate], [ShipVia], [Freight], [ShipName], [ShipAddress], [ShipCity], [ShipRegion], [ShipPostalCode], [ShipCountry] FROM [Orders] WHERE [OrderID] = @OrderID [commandParameter]:OrderID=10250, [2016/08/22 00:11:18,573],[INFO ],[8],71,0,[commandText]: -- DaoOrder_Details_D2_Select -- 2016/8/3 æ¥ç« 倪é SELECT [OrderID], [ProductID], [UnitPrice], [Quantity], [Discount] FROM [Order Details] WHERE [OrderID] = @OrderID [commandParameter]:OrderID=10250, [2016/08/22 00:11:24,530],[INFO ],[7],122,0,[commandText]: -- DaoOrders_D3_Update -- 2016/8/3 æ¥ç« 倪é UPDATE [Orders] SET [CustomerID] = @Set_CustomerID_forUPD, [EmployeeID] = @Set_EmployeeID_forUPD, [OrderDate] = @Set_OrderDate_forUPD, [RequiredDate] = @Set_RequiredDate_forUPD, [ShippedDate] = @Set_ShippedDate_forUPD, [ShipVia] = @Set_ShipVia_forUPD, [Freight] = @Set_Freight_forUPD, [ShipName] = @Set_ShipName_forUPD, [ShipAddress] = @Set_ShipAddress_forUPD, [ShipCity] = @Set_ShipCity_forUPD, [ShipRegion] = @Set_ShipRegion_forUPD, [ShipPostalCode] = @Set_ShipPostalCode_forUPD, [ShipCountry] = @Set_ShipCountry_forUPD WHERE [OrderID] = @OrderID [commandParameter]:Set_ShipCity_forUPD=Rio de Janeiro,Set_CustomerID_forUPD=HANAR,OrderID=10250,Set_EmployeeID_forUPD=4,Set_ShippedDate_forUPD=7/12/1996 12:00:00 AM,Set_RequiredDate_forUPD=8/5/1996 12:00:00 AM,Set_ShipName_forUPD=Hanari Carnes,Set_ShipPostalCode_forUPD=05454-876,Set_ShipVia_forUPD=2,Set_ShipAddress_forUPD=Rua do Paco, 67,Set_ShipRegion_forUPD=RJ,Set_OrderDate_forUPD=7/8/1996 12:00:00 AM,Set_ShipCountry_forUPD=Brazil,Set_Freight_forUPD=65.8300, [2016/08/22 00:11:24,699],[INFO ],[7],39,0,[commandText]: -- DaoOrder_Details_D3_Update -- 2016/8/3 æ¥ç« 倪é UPDATE [Order Details] SET [UnitPrice] = @Set_UnitPrice_forUPD, [Quantity] = @Set_Quantity_forUPD, [Discount] = @Set_Discount_forUPD WHERE [OrderID] = @OrderID AND [ProductID] = @ProductID [commandParameter]:OrderID=10250,Set_Quantity_forUPD=35,Set_Discount_forUPD=0.15,Set_UnitPrice_forUPD=42.4000,ProductID=51,