UserGuide_DynamicParameterizedQuery.ja - OpenTouryoProject/OpenTouryo GitHub Wiki
2026幎7ææŽæ°ç
- Open æ£æ¢ãçšããã¢ããªã±ãŒã·ã§ã³éçºãè¡ããSEã»éçºè
æ¬ããã¥ã¡ã³ãã¯ããã¬ãŒã ã¯ãŒã¯ã®æã€åçãã©ã¡ã¿ã©ã€ãºãã»ã¯ãšãªæ©èœã®å©ç𿹿³ã«ã€ããŠçºããŠããŸãã
æ¬ããã¥ã¡ã³ãã«èšèŒã®äŒç€Ÿåã»åååã¯ãå瀟ã®åæšãŸãã¯ç»é²åæšã§ãã
1. åçãã©ã¡ã¿ã©ã€ãºãã»ã¯ãšãªã®èšè¿°æ¹æ³
2. åçãã©ã¡ã¿ã©ã€ãºãã»ã¯ãšãªåæããŒã«ã®å©ç𿹿³
- 2.1 æŠèŠ
- 2.2 åºæ¬çãªå©ç𿹿³
- 2.3 ãã®ä»ãGUI ããã«æäœæ¹æ³
- 2.4 éçãã©ã¡ã¿ã©ã€ãºãã»ã¯ãšãªå®è¡æ©èœ
3. ããŒã¿ã¢ã¯ã»ã¹åŠçã®å®è£ æ¹æ³
"Open æ£æ¢" ã®åçãã©ã¡ã¿ã©ã€ãºãã»ã¯ãšãªã¯ãXML ã¿ã°ã䜿çšããã¯ãšãªèšè¿°ã«ãŒã«ãæ¡çšããŠããããã®ã¯ãšãªèšè¿°ã«ãŒã«ã«åŸã£ãŠã¯ãšãªãèšè¿°ããAPI ãããã©ã¡ã¿ãèšå®ããããšã§ãJOINã»WHERE å¥ããæ¡ä»¶åŒã®æå¹åã»ç¡å¹åãªã©ãå¶åŸ¡ã§ããŸãã以äžã«èšè¿°äŸã瀺ããŸãã
<?xml version="1.0" encoding="shift_jis" ?>
<ROOT>
SELECT DISTINCT ctm.companyname, ctm.contactname, ctm.contacttitle FROM orders AS o
INNER JOIN customers AS ctm ON o.customerid = ctm.customerid
<JOIN name="j1">
INNER JOIN shippers AS s ON o.shipvia = s.shipperid
</JOIN>
<JOIN name="j2">
INNER JOIN [order details] AS od ON o.orderid = od.orderid
INNER JOIN products AS p ON od.productid = p.productid
INNER JOIN categories AS cgy ON p.categoryid = cgy.categoryid
</JOIN>
<WHERE>WHERE<IF>s.companyname=@p1</IF><IF>AND cgy.categoryname=@p2</IF></WHERE>
ORDER BY [<VAL name="COLUMN"/>] <VAL name="SEQUENCE"/>
</ROOT>å³ 1.1-1ã"Open æ£æ¢" ã®åçãã©ã¡ã¿ã©ã€ãºãã»ã¯ãšãªã®èšè¿°äŸ
ãªããåçãã©ã¡ã¿ã©ã€ãºãã»ã¯ãšãª (XML) ã®äœæã«ã¯ Visual Studio ãå©çšã§ããŸããã¿ã°ã®ç·æ°ã 200 åãè¶ ãããšæ§èœçã«è² è·ãé«ããªãã®ã§æ³šæããŸãã
以äžãåçãã©ã¡ã¿ã©ã€ãºãã»ã¯ãšãªéšã®æŠèŠã説æããŸãã
<?xml version="1.0" encoding="shift_jis" ?>
<ROOT>
SELECT DISTINCT ctm.companyname, ctm.contactname, ctm.contacttitle FROM orders AS o
INNER JOIN customers AS ctm ON o.customerid = ctm.customerid
<JOIN name="j1">
INNER JOIN shippers AS s ON o.shipvia = s.shipperid
</JOIN>
<JOIN name="j2">
INNER JOIN [order details] AS od ON o.orderid = od.orderid
INNER JOIN products AS p ON od.productid = p.productid
INNER JOIN categories AS cgy ON p.categoryid = cgy.categoryid
</JOIN>
<WHERE>WHERE<IF>s.companyname=@p1</IF><IF>AND cgy.categoryname=@p2</IF></WHERE>
ORDER BY [<VAL name="COLUMN"/>] <VAL name="SEQUENCE"/>
</ROOT>-
JOIN å¥ã®å¶åŸ¡ãå¯èœïŒ
<JOIN>ã¿ã°ã¯ JOIN å¥ã®æå¹ã»ç¡å¹ãå¶åŸ¡ããã -
WHERE å¥ã®å¶åŸ¡ãå¯èœïŒ
<IF>ã¿ã°ã¯æ€çŽ¢æ¡ä»¶ã®æå¹ã»ç¡å¹ãå¶åŸ¡ããããŸã<WHERE>ã¿ã°ã¯æ€çŽ¢æ¡ä»¶ããã¹ãŠç¡å¹ãšãªã£ãå Žå㯠WHERE å¥èªäœãåé€ããã -
ä»»æã®æååæ¿å
¥ãå¯èœïŒ
<VAL>ã¿ã°ã¯ä»»æã®æååæ¿å ¥ãå¯èœãªãããã©ã®ãããªãã¿ãŒã³ã® SQL æŽåœ¢ã«ã察å¿å¯èœã§ããããã ãå©çšã®é㯠SQL ã€ã³ãžã§ã¯ã·ã§ã³ãçºçããªããã®æ³šæãå¿ èŠã«ãªãã
äžèš SQL å®çŸ©ãããã°ã©ã äžããå©çšããå Žåã¯ã次ã®ããã« API ã䜿çšããŠãã©ã¡ã¿ãèšå®ããŸãã
this.SetSqlByFile2("ãã¡ã€ã«å");
// ãã©ã¡ã¿ã©ã€ãºãã»ã¯ãšãªã®ãã©ã¡ã¿ã«å¯ŸããŠãåçã«å€ãèšå®ããã
this.SetParameter("j1", true);
this.SetParameter("j2", true);
this.SetParameter("p1", "United Package");
this.SetParameter("P2", "Beverages");
// ãŠãŒã¶å®çŸ©ãã©ã¡ã¿ã眮æããã
this.SetUserParameter("COLUMN", "ctm.companyname");
this.SetUserParameter("SEQUENCE", "DESC");ãã©ã¡ã¿æå®ã«ããæŽåœ¢ããã SQLïŒäžèšäŸã®å®è¡çµæïŒ:
SELECT DISTINCT ctm.companyname, ctm.contactname, ctm.contacttitle FROM orders AS o
INNER JOIN customers AS ctm ON o.customerid = ctm.customerid
INNER JOIN shippers AS s ON o.shipvia = s.shipperid
INNER JOIN [order details] AS od ON o.orderid = od.orderid
INNER JOIN products AS p ON od.productid = p.productid
INNER JOIN categories AS cgy ON p.categoryid = cgy.categoryid
WHERE s.companyname=@p1 AND cgy.categoryname=@p2
ORDER BY ctm.[companyname] DESCå³ 1.1-2ã"Open æ£æ¢" ã®åçãã©ã¡ã¿ã©ã€ãºãã»ã¯ãšãªã®æŠèŠèª¬æïŒ1ïŒ
ãµãã¯ãšãªã IN å¥ã®ãã©ã¡ã¿ãªã¹ããå¶åŸ¡ã§ããŸãã<SUB> ã¿ã°ã§ãµãã¯ãšãªãã<LIST> ã¿ã°ã« ArrayList ãæå®ããããšã§ IN å¥ã®ãã©ã¡ã¿ãªã¹ãã®èªåå±éãå¯èœã§ãã
<?xml version="1.0" encoding="shift_jis" ?>
<ROOT>
SELECT * FROM PRODUCTS
<WHERE>WHERE
<SUB name="SUB1">CATEGORYID IN(SELECT CATEGORYID FROM CATEGORIES
<WHERE>WHERE
<SUB name="SUB2">CATEGORYID IN(SELECT CATEGORYID FROM CATEGORIES
<WHERE>WHERE
<IF name="ISNOTNULL1">CATEGORYID IS NOT NULL
<ELSE>CATEGORYID IS NULL</ELSE>
</IF>
</WHERE>)
</SUB>
<IF name="ISNOTNULL2">AND CATEGORYID IS NOT NULL
<ELSE>AND CATEGORYID IS NULL</ELSE>
</IF>
</WHERE>)
</SUB>
<IF name="ISNOTNULL3">AND CATEGORYID IS NOT NULL
<ELSE>AND CATEGORYID IS NULL</ELSE>
</IF>
<LIST>AND CATEGORYID IN(@PLIST)</LIST>
AND DISCONTINUED = @BIT
</WHERE>
ORDER BY [<VAL name="COLUMN"/>] <VAL name="SEQUENCE"/>
</ROOT>- ãµãã¯ãšãªã®å¶åŸ¡ãå¯èœïŒ
<SUB>ã¿ã°ã䜿çšããããšã§ããµãã¯ãšãªãå¶åŸ¡ã§ããããµãã¯ãšãªå éšã«ã¯ãéåžžéãã<IF>ã¿ã°ãã<WHERE>ã¿ã° ,etc. ããã¹ãã§ããã - ELSEæ¡ä»¶ãæå®å¯èœïŒ
<IF>ã¿ã°ã«ã¯ã<ELSE>ã¿ã°ããã¹ãå¯èœã§ããïŒäž»ã« IS NULL æ¡ä»¶ãå®è£ ããããã«å©çšããïŒããã®<ELSE>ã¿ã°ãæå¹ã«ããããã®ELSEæ¡ä»¶ã®èšå®æ¹æ³ã«ã€ããŠã¯ã1.2ç¯ã®<IF>ã<ELSE>ã¿ã°ã®èª¬æé ãåç §ã®ããšã - INå¥ã®ãã©ã¡ã¿ãªã¹ããæå®å¯èœïŒ
<LIST>ã¿ã°ã« ArrayList ãæå®ããããšã§ãINå¥ã®ãã©ã¡ã¿ãªã¹ãã®èªåå±éãå¯èœã§ããã
äžèš SQL å®çŸ©ãããã°ã©ã äžããå©çšããå Žåã¯ã次ã®ããã« API ã䜿çšããŠãã©ã¡ã¿ãèšå®ããŸãã
this.SetSqlByFile2("ãã¡ã€ã«å");
// ãã©ã¡ã¿ ã©ã€ãºã ã¯ãšãªã®ãã©ã¡ã¿ã«å¯ŸããŠãåçã«å€ãèšå®ããã
this.SetParameter("SUB1", true);
this.SetParameter("SUB2", true);
this.SetParameter("ISNOTNULL1", true);
this.SetParameter("ISNOTNULL2", true);
this.SetParameter("ISNOTNULL3", true);
this.SetParameter("PLIST", new ArrayList(new short[] { 1, 2, 3, 4, 5, 6, 7, 8 }));
this.SetParameter("BIT", true);
// ãŠãŒã¶å®çŸ©ãã©ã¡ã¿ã眮æããã
this.SetUserParameter("COLUMN", "SUPPLIERID");
this.SetUserParameter("SEQUENCE", "DESC");ãã©ã¡ã¿æå®ã«ããæŽåœ¢ããã SQLïŒäžèšäŸã®å®è¡çµæïŒ:
SELECT * FROM PRODUCTS WHERE
CATEGORYID IN(SELECT CATEGORYID FROM CATEGORIES
WHERE CATEGORYID IN(SELECT CATEGORYID FROM CATEGORIES
WHERE CATEGORYID IS NOT NULL) AND CATEGORYID IS NOT NULL)
AND CATEGORYID IS NOT NULL
AND CATEGORYID IN(@PLIST_1, @PLIST_2, @PLIST_3, @PLIST_4, @PLIST_5, @PLIST_6, @PLIST_7, @PLIST_8)
AND DISCONTINUED = @BIT
ORDER BY [SUPPLIERID] DESCå³ 1.1-3ã"Open æ£æ¢" ã®åçãã©ã¡ã¿ã©ã€ãºãã»ã¯ãšãªã®æŠèŠèª¬æïŒ2ïŒ
"Open æ£æ¢" ã®åçãã©ã¡ã¿ã©ã€ãºãã»ã¯ãšãªã§äœ¿çšãã XML ã¿ã°ãã以äžã®è¡š 1.2-1 ã«ç€ºããŸãã
衚 1.2-1ã"Open æ£æ¢" ã®åçãã©ã¡ã¿ã©ã€ãºãã»ã¯ãšãªã§äœ¿çšãã XML ã¿ã°
| é çª | ã¿ã°åç§° | ã¿ã°è¡šèš | 説æïŒãã¹ãã«ã€ã㊠[1] |
|---|---|---|---|
| ïŒ | ROOT ã¿ã° | <ROOT>âŠ</ROOT> |
ã¯ãšãªå®çŸ©ã¯å šãŠããã®ã¿ã°ã®äžã«åãããROOT ã¿ã°ã¯ãROOT ã¿ã°ä»¥å€ã®å šãŠã®ã¿ã°ããã¹ãã§ããã |
| ïŒ | VAL ã¿ã° | <VAL name="xxx"/> |
ãã©ã¡ã¿ã«èšå®ããæååãžçœ®æãããä»»æã®æååæ¿å ¥ãå¯èœããã©ã¡ã¿å㯠name 屿§ã«æå®ãã (ã¿ã°å ãã©ã¡ã¿)ãnullïŒæªèšå®ã®å Žåã¯ç¡å¹ã«ãªãåé€ããããSQL ã€ã³ãžã§ã¯ã·ã§ã³ãå¯èœãªããããŠãŒã¶å ¥åãçŽæ¥æå®ããªãããã¹ãäžå¯ã |
| ïŒ | INSCOL ã¿ã° | <INSCOL name="xxx">âŠ</INSCOL> |
INSERT å¥ã®ã«ã©ã ãªã¹ãå°çš (éåžžã¯èªåçæ SQL ã§ã®ã¿å©çš)ãname 屿§ã®ã¿ã°å ãã©ã¡ã¿ãèšå®ãããŠããã°ã«ã©ã æ å ±ãæå¹åãã«ã©ã æ å ±ãš VAL ã¿ã°ã®ã¿ãã¹ãå¯èœã |
| ïŒ | IF ã¿ã° |
<IF>âŠ</IF> / <IF name="xxx">âŠ</IF>
|
WHERE å¥å
ã®æ¡ä»¶åŒãå²ããæ¡ä»¶åŒã®æå¹ã»ç¡å¹ãå¶åŸ¡ãããããã¹ãå
ãã©ã¡ã¿ (å
é ã®ãã©ã¡ã¿ 1 ã€) ãèšå®ãããã°æå¹ãæªèšå®ãªãç¡å¹ãname 屿§ã®ã¿ã°å
ãã©ã¡ã¿ã¯ true/false ãèš±å¯ (false ã§ ELSE æå¹ãç¡ããã°ãšã©ãŒ)ãæ¡ä»¶åŒã»ELSEã»VAL ã¿ã°ã®ã¿ãã¹ãå¯èœã äŸïŒ <IF>AND XXX=@P1<ELSE>AND XXX IS NULL</ELSE></IF>
|
| ïŒ | ELSE ã¿ã° | <ELSE>âŠ</ELSE> |
IF ã¿ã°ã§ ELSE ãæå¹ã«ãªãå Žåã®æ¡ä»¶åŒãèšè¿°ãããããã¹ãå
ã»ã¿ã°å
ãã©ã¡ã¿ã¯èšè¿°äžå¯ (XXX IS NULL ãªã©ã®æ¡ä»¶åŒãèšè¿°)ãæ¡ä»¶åŒã»VAL ã¿ã°ã®ã¿ãã¹ãå¯èœã |
| ïŒ | SELECT-CASE-DEFAULT ã¿ã° | <SELECT name="xxx"><CASE value="A">âŠ</CASE><DEFAULT>âŠ</DEFAULT></SELECT> |
name 屿§ã®ãã©ã¡ã¿å€ã«ãã£ãŠãäžèŽãã CASEãè¥ãã㯠DEFAULT ã®ã¹ããŒãã¡ã³ããæå¹ã«ãã (DEFAULT ã¯çç¥å¯èœ)ãnullïŒæªèšå®ãªãåé€ãVAL ã¿ã°ã®ã¿ãã¹ãå¯èœã |
| ïŒ | LIST ã¿ã° | <LIST>âŠINå¥ã®æ¡ä»¶åŒâŠ</LIST> |
IN å¥ã®æ¡ä»¶åŒãå²ãããã©ã¡ã¿ãªã¹ãã®æå®ãš IN å¥ã®æå¹ã»ç¡å¹ãå¶åŸ¡ãããããã¹ãå
ãã©ã¡ã¿ããã©ã¡ã¿åã«äœ¿çšãå€ã¯ ArrayList å (å®è¡æã« @å_1, @å_2⊠ãšå±é)ãèŠçŽ æ° 0ïŒnullïŒæªèšå®ãªãåé€ãIN å¥ã®æ¡ä»¶åŒãš VAL ã¿ã°ã®ã¿ãã¹ãå¯èœã |
| ïŒ | JOIN ã¿ã° | <JOIN name="xxx">âŠJOINå¥âŠ</JOIN> |
JOIN å¥ã®æå¹ã»ç¡å¹ãå¶åŸ¡ããããã©ã¡ã¿å€ true ã§æå¹ãfalse/null/æªèšå®ã§åé€ (ä»ã®å€ã¯ãšã©ãŒ)ãROOTã»PARAMã»DIV 以å€ã®å šã¿ã°ããã¹ãå¯èœã |
| ïŒ | SUB ã¿ã° | <SUB name="xxx">âŠãµãã¯ãšãªã®æ¡ä»¶åŒâŠ</SUB> |
WHERE å¥å ã®ãµãã¯ãšãªã®æ¡ä»¶åŒã®æå¹ã»ç¡å¹ãå¶åŸ¡ããããã©ã¡ã¿å€ true ã§æå¹ãfalse/null/æªèšå®ã§åé€ãROOTã»PARAMã»DIV 以å€ã®å šã¿ã°ããã¹ãå¯èœã |
| 10 | WHERE ã¿ã° | <WHERE>âŠWHEREå¥âŠ</WHERE> |
IF/LIST/SUB ã®åŠçã§ WHERE å¥å ã«æ¡ä»¶åŒãç¡ããªãå ŽåããWHERE AND æ¡ä»¶åŒãçã®äžæ£ãªç¶æ ã«ãªãåŸãå ŽåãäžèŠãª WHERE å¥ãæŒç®å (ANDãOR) ãåé€ãããROOTã»PARAMã»DIV 以å€ã®å šã¿ã°ããã¹ãå¯èœã |
| 11 | DELCMA ã¿ã° | <DELCMA>âŠã«ã³ãåºåãã®ãªã¹ãâŠ</DELCMA> |
çæããæååã®ååŸã«äœåã«ä»äžãããã«ã³ããåé€ãã (éåžžã¯èªåçæã®æŽæ°ç³» SQL ã§ã®ã¿å©çš)ãROOTã»PARAMã»DIV 以å€ã®å šã¿ã°ããã¹ãå¯èœã |
| 12 | PARAM ã¿ã° | <PARAM>âŠãã©ã¡ã¿æ
å ±âŠ</PARAM> |
åæããŒã«ã§ãPARAM ã¿ã°éã«æå®ãããã©ã¡ã¿å€ã§ãã¹ãå®è¡ããããã«äœ¿çšãã (èšè¿°ã«ãŒã«ã¯äžèš)ããã©ã¡ã¿ã®èšè¿°ãš DIV ã¿ã°ã®ã¿ãã¹ãå¯èœã |
| 13 | DIV ã¿ã° | <DIV/> |
PARAM ã¿ã°å ã§ãã©ã¡ã¿ãåºåãããã«äœ¿çšããããã¹ãäžå¯ã |
PARAM ã¿ã°ã®ãã©ã¡ã¿èšè¿°ã«ãŒã«ïŒïŸïŸïŸïŸïŸå, âŠ<DIV/> ã§åºåãïŒ:
- ãŠãŒã¶å®çŸ©ãã©ã¡ã¿ (VAL ã¿ã°)ïŒ
P1, xxx<DIV/> - éåžžã®ãã©ã¡ã¿ïŒ
P1, String, xxx<DIV/>/P2, Int32, 123<DIV/> - é
åã®ãã©ã¡ã¿ïŒ
P1, String[], xxx, yyy, zzz<DIV/> - ArrayList åã®ãã©ã¡ã¿ïŒ
P1, String, xxx, yyy, zzz<DIV/>ïŒå€ã®ãªã¹ãã 2 ã€ä»¥äžïŒ - DBNull åã®ãã©ã¡ã¿ïŒ
P1, DBNull[, ä»»æ]<DIV/> - null ã®ãã©ã¡ã¿ïŒ
P1, ïŒä»»æïŒ, null<DIV/>
è£è¶³1ïŒããã¹ãå ãã©ã¡ã¿ (@p ãªã©ã® DBMS ã®ãã©ã¡ã¿) ã¯ãã¿ã°ã®åŠçåŸããã©ã¡ã¿ã®ã³ã¬ã¯ã·ã§ã³ã«æ®ããã (DBMS ã®ãã©ã¡ã¿ã¯è€æ°åæã«äœçšãããã)ãã¿ã°å ãã©ã¡ã¿ (ã¿ã°ã® name 屿§) ã¯åŠçåŸã«æ¶å»ãããããã®ãããããã¹ãå ãã©ã¡ã¿ã¯å šãŠã®ã¿ã°ã«äœçšããã¿ã°å ãã©ã¡ã¿ã¯æåã® 1 ã€ã®ã¿ã°ã«ããäœçšããªã [2]ã
PARAM ã¿ã°ã§äœ¿çšããæååãšåã®å¯Ÿå¿ãã以äžã®è¡š 1.2-2 ã«ç€ºããŸãã
衚 1.2-2ãPARAM ã¿ã°ã§äœ¿çšããæåå
| é çª | ãã©ã¡ã¿ã®åå | åã衚ãæåå (éåžžæïŒé åæ) | å€ã衚ãæåå (ã®å¶é) |
|---|---|---|---|
| ïŒ | System.Boolean | BooleanïŒBoolean[] | ãtrueãorãfalseãã®æååã®ã¿æå®å¯èœ |
| ïŒ | System.Byte | ByteïŒByte[] | Byte ã«åãŸãæå |
| ïŒ | System.UInt16 | UInt16ïŒUInt16[] | UInt16 ã«åãŸãæ°å€ã衚ãæåå |
| ïŒ | System.UInt32 | UInt32ïŒUInt32[] | UInt32 ã«åãŸãæ°å€ã衚ãæåå |
| ïŒ | System.UInt64 | UInt64ïŒUInt64[] | UInt64 ã«åãŸãæ°å€ã衚ãæåå |
| ïŒ | System.SByte | SByteïŒSByte[] | SByte ã«åãŸãæå |
| ïŒ | System.Int16 | Int16ïŒInt16[] | Int16 ã«åãŸãæ°å€ã衚ãæåå |
| ïŒ | System.Int32 | Int32ïŒInt32[] | Int32 ã«åãŸãæ°å€ã衚ãæåå |
| ïŒ | System.Int64 | Int64ïŒInt64[] | Int64 ã«åãŸãæ°å€ã衚ãæåå |
| 10 | System.Decimal | DecimalïŒDecimal[] | Decimal ã«åãŸãæ°å€ã衚ãæåå |
| 11 | System.Single | SingleïŒSingle[] | Single ã«åãŸãæ°å€ã衚ãæåå |
| 12 | System.Double | DoubleïŒDouble[] | Double ã«åãŸãæ°å€ã衚ãæåå |
| 13 | System.Char | CharïŒChar[] | Char ã«åãŸãæå |
| 14 | System.String | StringïŒString[] | ä»»æã®æåå |
| 15 | System.DateTime | DateTimeïŒDateTime[] | DateTime (æ¥ä»å) ã«å€æå¯èœãªæåå |
| 16 | System.DBNull | DBNullïŒãµããŒãããªã | ïŒ |
| 17 | null å€ã®å Žå | ïŒïŒãµããŒãããªã | ãnullããšããæååã®ã¿æå®å¯èœ |
DB ã®ãã£ãŒã«ãã« null å€ ãèšå®ããå Žå InsertãUpdate ã®ã¯ãšãªã®ãã©ã¡ã¿ã«ãDBNullãèšå®ãããWhere å¥ã®æ¡ä»¶ã®ãã©ã¡ã¿ã«ã¯ãDBNullãã䜿çšã§ããªãã®ã§æ³šæããïŒéåžžãSQL äžã§ IS NULL ãšæå®ããïŒããŸããåçãã©ã¡ã¿ã©ã€ãºãã»ã¯ãšãªã®ãã©ã¡ã¿ã«ãnullãã䜿çšããå Žåã¯ãã¿ã°ãç¡å¹ã«ãããããªåäœã«ãªãïŒIF-ELSE ã¿ã°ã§ã¯ãELSE ãæå¹ã«ãªãïŒã
â» é çª 16 ã®æå®äŸ
- P1 , DBNull ,
- P1 , DBNull , xxx
- P1 , DBNull , yyy
â» é çª 17 ã®æå®äŸ
- P1 , , null
- P1 , xxx , null
- P1 , yyy , null
è£è¶³2ïŒãåçãã©ã¡ã¿ã©ã€ãºãã»ã¯ãšãªãã® XML äžã«ã<ã>ãã®æŒç®åããããš XML ã®ã¿ã°ãšèªèããæ§æãã§ãã¯ã§ãšã©ãŒãšãªããŸãããã®ãããXML äžã«ã<ã>ãã®æŒç®åãèšè¿°ããå Žåã¯
<>ãå©çšããŸã (ææ°ããŒãžã§ã³ã§ã¯ CDATA ã»ã¯ã·ã§ã³<![CDATA[âŠ]]>ã䜿çšã§ããŸã)ã
åçãã©ã¡ã¿ã©ã€ãºãã»ã¯ãšãªã§ã¯ã2WAY-SQL [3] ãå®çŸããå°çšã®ããŒã« (åçãã©ã¡ã¿ã©ã€ãºãã»ã¯ãšãªåæããŒã«) ã䜿çšããŠãã¯ãšãªäžã«åã蟌ãã ãã©ã¡ã¿æ å ±ãããšã«ã¯ãšãªã®å®è¡ããã¹ãã§ããŸãã
- ã©ã³ã¿ã€ã ã« .NET Framework 2.0 ãå¿ èŠã§ãã
- ã€ã³ã¹ããŒã«ã¯äžèŠã§ããã©ã«ã ã³ããŒã§å©çšã§ããŸããé 眮ãããã©ã«ãçŽäžã®ãDPQuery_Tool.exeããããã« ã¯ãªãã¯ããŠå®è¡ããŸãã
- ããŒã¿ ãããã€ãã® DLL ã¯ãã©ã«ãã«å梱ãããŠãããããå šãŠã®ããŒã¿ ãããã€ã (SQLClientãODP.NETãDB2.NET) ãå®è¡ç°å¢ã«ã€ã³ã¹ããŒã«ããŠãããªããŠãå©çšå¯èœã§ã (ãã ãæªã€ã³ã¹ããŒã«ã®ãããã€ããéžæã»æ¥ç¶ãããšãšã©ãŒ)ã
åºæ¬çãªå©ç𿹿³ã¯ãæ¬¡ã®æµãã«ãªããŸãã
- ã³ã³ã ããã¯ã¹ããããŒã¿ ãããã€ããéžæããã
- ããã¹ã ããã¯ã¹ã«æ¥ç¶æååãå ¥åããã
- æ¥ç¶ãã¿ã³ãæŒã㊠DB ã«æ¥ç¶ããã
- å®è¡ããã¯ãšãªãçŽæ¥å ¥åããããã¯ãšãª ãã¡ã€ã«ãäœæ (æå®) ããã
- å ¥åããã¯ãšãª (æå®ããã¯ãšãª ãã¡ã€ã«) ãå®è¡ããã
å³ 2.2-1ãåçãã©ã¡ã¿ã©ã€ãºãã»ã¯ãšãªåæããŒã«
ãªããåçãã©ã¡ã¿ã©ã€ãºãã»ã¯ãšãªäžã«ã¯ã以äžã®ããã« <PARAM> ã¿ã°ã«ãããã©ã¡ã¿æ
å ±ãåã蟌ãå¿
èŠããããŸãã
<?xml version="1.0" encoding="shift_jis" ?>
<ROOT>
SELECT DISTINCT ctm.companyname, ctm.contactname, ctm.contacttitle FROM orders AS o
INNER JOIN customers AS ctm ON o.customerid = ctm.customerid
<JOIN name="j1">INNER JOIN shippers AS s ON o.shipvia = s.shipperid</JOIN>
<JOIN name="j2">
INNER JOIN [order details] AS od ON o.orderid = od.orderid
INNER JOIN products AS p ON od.productid = p.productid
INNER JOIN categories AS cgy ON p.categoryid = cgy.categoryid
</JOIN>
<WHERE>WHERE<IF>s.companyname=@p1</IF><IF>AND cgy.categoryname=@p2</IF></WHERE>
ORDER BY [<VAL name="COLUMN"/>] <VAL name="SEQUENCE"/>
<PARAM>
j1, Boolean, true<DIV/>
j2, Boolean, true<DIV/>
p1, String, United Package<DIV/>
p2, String, Beverages<DIV/>
COLUMN, ctm.companyname<DIV/>
SEQUENCE, DESC<DIV/>
</PARAM>
</ROOT><?xml version="1.0" encoding="shift_jis" ?>
<ROOT>
SELECT * FROM PRODUCTS
<WHERE>WHERE
<SUB name="SUB1">CATEGORYID IN(SELECT CATEGORYID FROM CATEGORIES
<WHERE>WHERE
<SUB name="SUB2">CATEGORYID IN(SELECT CATEGORYID FROM CATEGORIES
<WHERE>WHERE
<IF name="ISNOTNULL1">CATEGORYID IS NOT NULL
<ELSE>CATEGORYID IS NULL</ELSE>
</IF>
</WHERE>)
</SUB>
<IF name="ISNOTNULL2">AND CATEGORYID IS NOT NULL
<ELSE>AND CATEGORYID IS NULL</ELSE>
</IF>
</WHERE>)
</SUB>
<IF name="ISNOTNULL3">AND CATEGORYID IS NOT NULL
<ELSE>AND CATEGORYID IS NULL</ELSE>
</IF>
<LIST>AND CATEGORYID IN(@PLIST)</LIST>
AND DISCONTINUED = @BIT
</WHERE>
ORDER BY [<VAL name="COLUMN"/>] <VAL name="SEQUENCE"/>
<PARAM>
SUB1, Boolean, true<DIV/>
SUB2, Boolean, true<DIV/>
ISNOTNULL1, Boolean, true<DIV/>
ISNOTNULL2, Boolean, true<DIV/>
ISNOTNULL3, Boolean, true<DIV/>
PLIST, Int16, 1, 2, 3, 4, 5, 6, 7, 8<DIV/>
BIT, Boolean, true<DIV/>
COLUMN, SUPPLIERID<DIV/>
SEQUENCE, DESC<DIV/>
</PARAM>
</ROOT>å³ 2.2-2ã<PARAM> ã¿ã°ã«ãããã©ã¡ã¿æ
å ±ã®åã蟌ã¿
ã¯ãšãªå®è¡æãåçãã©ã¡ã¿ã©ã€ãºãã»ã¯ãšãªã§ããããéçãã©ã¡ã¿ã©ã€ãºãã»ã¯ãšãªãSQL ã§ããããèªåå€å®ãããã¯ãšãªã®å®çŸ©ã«åã£ãæ¹æ³ã§èªåå®è¡ãããŸãã
å®è¡çµæã¯æ¬¡ã®ãã€ã¢ãã°ã«è¡šç€ºãããŸãããã€ã¢ãã°ã«ã¯ 3 ã€ã®ã¿ããããããããããçµæã¿ãïŒSQL å®è¡çµæããSQL ã¿ãïŒå®è¡ããã SQLããLOG ã¿ãïŒãã°åºåããã SQLãã確èªã§ããŸãã
å³ 2.2-3ãå®çŸ©ã«åã£ãæ¹æ³ã§èªåå®è¡
å³ 2.2-4ãSQL å®è¡çµæ
å³ 2.2-5ãå®è¡ããã SQL
å³ 2.2-6ããã°åºåããã SQL
[èšå®] ã°ã«ãŒã ããã¯ã¹ã§ã¯ãèšå®ã®æ°èŠäœæãããã»ãŒãã»ããŒããã§ããŸããã»ãŒãã»ããŒãå ã¯ã¹ããã 1 ã 5 ãŸã§çšæãããŠããã[ã¹ãããéžæ] ã³ã³ã ããã¯ã¹ã§éžæã§ããŸãã
å³ 2.3-1ã[èšå®] ã°ã«ãŒãããã¯ã¹
å³ 2.3-2ãæ°èŠäœææã®å ¥åãã€ã¢ãã°
èšå®ãæ°èŠäœæããåŸã«ã[ããŒã¿ ãããã€ãéžæ] ã³ã³ã ããã¯ã¹ã§ããŒã¿ ãããã€ãã倿Žãããšãæ¥ç¶æååã®äŸãèªåçã«çµã¿ç«ãŠãããŸããå¿ èŠã«å¿ããŠä¿®æ£ãã[æ¥ç¶] ãã¿ã³ã§æ¥ç¶ã確èªãããã[åæ] ããŠãã [èšå®ã®ã»ãŒã] ãã¿ã³ã§ä¿åããŠãããšè¯ãã§ãããã
[ãã©ã³ã¶ã¯ã·ã§ã³] ã°ã«ãŒã ããã¯ã¹ã§ã¯ããã©ã³ã¶ã¯ã·ã§ã³ã«é¢ãã詳现ãªå¶åŸ¡ãå¯èœã§ãã
å³ 2.3-3ã[ãã©ã³ã¶ã¯ã·ã§ã³] ã°ã«ãŒãããã¯ã¹
- [åé¢ã¬ãã«] ã³ã³ã ããã¯ã¹ã§åé¢ã¬ãã«ãéžæã§ããŸã (DBMS ã«ãã£ãŠã¯ãµããŒããããªãåé¢ã¬ãã«ãããããã®å Žåã¯ãšã©ãŒ ã¡ãã»ãŒãžã衚瀺ãããŸã)ã
- [å¶åŸ¡æ¹åŒ] ã³ã³ã ããã¯ã¹ã§ãã©ã³ã¶ã¯ã·ã§ã³å¶åŸ¡æ¹åŒããAutoãã»ãManualãããéžæã§ããŸãã
- AutoïŒã¯ãšãªå®è¡ã®ãã³ã«ãã©ã³ã¶ã¯ã·ã§ã³ãéå§ãããå®è¡åŸã«èªåçã«ã³ããã (ãšã©ãŒæã¯ããŒã«ããã¯) ãããã
- ManualïŒã¯ãšãªã®å®è¡ã«é¢ä¿ãªãã[éå§] ã [ã³ããã]ã»[ããŒã«ããã¯] ãã¿ã³ã§æåå¶åŸ¡ããã
- [ã€ã³ã¿ãŒãã§ã€ã¹] ã³ã³ã ããã¯ã¹ã§ã¯ãã¯ãšãªãå®è¡ããéã«äœ¿çšãã API ãéžæããŸãã
[ã¯ãšãª ãã¡ã€ã«] ã°ã«ãŒã ããã¯ã¹ã§ã¯ãSQL ã®æ°èŠäœæã»ç·šéãå¯èœã§ãã
å³ 2.3-4ã[ã¯ãšãª ãã¡ã€ã«] ã°ã«ãŒãããã¯ã¹
ã¯ãšãª ãã¡ã€ã«âŠ[ãéã]ã[ãéãã]ã[ãäžæžãä¿å]ã[ã«ä¿å] ã® 4 ã€ã®ãã¿ã³ãå©çšã§ããŸã ([ãéã] 㯠SQL ãã¡ã€ã«ã Form ã«ãã©ãã°ïŒããããããåäœã§ä»£æ¿å¯èœãã·ã§ãŒã ã«ãããå²ãåœãŠæžã¿)ããã®ä»ãå³ã¯ãªãã¯ã®ã³ã³ããã¹ã ã¡ãã¥ãŒããããµã³ãã«ããã³ãã¬ãŒããã¿ã°ã®æ¿å ¥ãå¯èœã§ãã
å³ 2.3-5ãåçãã©ã¡ã¿ã©ã€ãºãã»ã¯ãšãªã®ãµã³ãã«ããã³ãã¬ãŒããã¿ã°ã®æ¿å ¥
[ã€ã³ã¿ãŒãã§ã€ã¹] ã³ã³ã ããã¯ã¹ã®äžéšã«ãã 2 ã€ã®èšå®é ç®ãå®è¡ãªãã·ã§ã³ã§ãã
å³ 2.3-6ãå®è¡ãªãã·ã§ã³
- [åæšæž¬ã¢ãŒãïŒåæå®ïŒ] ãã§ã㯠ããã¯ã¹ïŒåæå®çšã¡ãœããã®ãã¹ãã®éã«ãã§ãã¯ãã (éåžžã¯åæå®çšã¡ãœããã䜿çšããå¿ èŠã¯ãªã)ãDB éšåã® SetParameter ã¡ãœãã (åæå®ããã®ãªãŒããŒããŒã) ãå®è¡ãããã
- [é åãã€ã³ãæ°æå®] ã¹ãã³ ããã¯ã¹ïŒODP.NET ã§å©çšå¯èœãªé åãã€ã³ãã䜿çšããå Žåã0 以äžã®å€ãæå®ãã (OracleCommand.ArrayBindCount ã«èšå®ããã)ã
åçãã©ã¡ã¿ã©ã€ãºãã»ã¯ãšãªåæããŒã«ã§ã¯ãéçãã©ã¡ã¿ã©ã€ãºãã»ã¯ãšãªãSQL ã®å®è¡ããµããŒãããŸããéçãã©ã¡ã¿ã©ã€ãºãã»ã¯ãšãªã®å Žåããã©ã¡ã¿èšå®çšã® SQL ã³ã¡ã³ãã䜿çšããŠãã©ã¡ã¿ãèšå®ã§ããŸãã
SELECT * FROM Employees
WHERE
FirstName=@FN
AND LastName=@LN1
AND EmployeeID IN (SELECT EmployeeID FROM Employees WHERE LastName=@LN2)
AND ReportsTo IN ( @P1 , @P2 )
ORDER BY %COLUMN% %SEQUENCE%
/*PARAM* FN, String, Nancy *PARAM*/
/*PARAM* LN1, String, Davolio *PARAM*/
/*PARAM* LN2, String, Davolio *PARAM*/
/*PARAM* P1, String, 2 *PARAM*/
/*PARAM* P2, String, 5 *PARAM*/
/*PARAM* COLUMN, EmployeeID *PARAM*/
/*PARAM* SEQUENCE, DESC *PARAM*/å³ 2.4ãéçãã©ã¡ã¿ã©ã€ãºãã»ã¯ãšãªãžã®ãã©ã¡ã¿èšå®æ¹æ³
ã¯ãšãªã¯ãåçãã©ã¡ã¿ã©ã€ãºãã»ã¯ãšãªã§ããããéçãã©ã¡ã¿ã©ã€ãºãã»ã¯ãšãªãSQL ã§ããããèªåå€å®ãããå®çŸ©ã«åã£ãæ¹æ³ã§èªåå®è¡ãããŸãããã®ãããåçãã©ã¡ã¿ã©ã€ãºãã»ã¯ãšãªã§ãã£ãŠãã¯ãšãªå®è¡æ¹æ³ã¯å€ãããŸããã
ã¯ãšãªãèšå®ãã API:
// -- ãã¡ã€ã«ããèªã¿èŸŒãå Žåã
this.SetSqlByFile(
Path.Combine(GetConfigParameter.GetConfigValue("sqlTextFilePath"), "ãã¡ã€ã«å"));
// -- ãã¡ã€ã«ãåã蟌ãŸãããªãœãŒã¹ããèªã¿èŸŒãå Žåã
// åã蟌ãŸãããªãœãŒã¹ããèªã¿èŸŒãå Žåãæ¬¡ã®èšå®ãå¿
èŠã«ãªãã
// MyBaseDao.UseEmbeddedResource = true;
this.SetSqlByFile2("ãã¡ã€ã«å");å³ 3-2ïŒçŽæ¥æå®ãã
// -- çŽæ¥æå®ããå Žåã
this.SetSqlByCommand("åçãã©ã¡ã¿ã©ã€ãºãã»ã¯ãšãª");å³ 3-1ïŒãã¡ã€ã«ããèªã¿èŸŒã
ãã©ã¡ã¿ãèšå®ãã API:
// ãã©ã¡ã¿ã©ã€ãºãã»ã¯ãšãªã®ãã©ã¡ã¿ã«å¯ŸããŠãåçã«å€ãèšå®ããïŒå
é èšå·ã¯èšå®äžèŠ [6]ïŒã
this.SetParameter("P1", testParameter.ShipperID);å³ 3-3ïŒéåžžã®ãã©ã¡ã¿
// ãŠãŒã¶å®çŸ©ãã©ã¡ã¿ã眮æããïŒ%XXXX% ã VAL ã¿ã°ãæå®ã®æååã§çœ®æããïŒã
this.SetUserParameter("UP1", "XXXXX");å³ 3-4ïŒãŠãŒã¶å®çŸ©ãã©ã¡ã¿
SQL ãå®è¡ãã API:
// -- 远å ãæŽæ°ãåé€ã®å ŽåïŒä»¶æ°ã確èªã§ããïŒ
obj = this.ExecInsUpDel_NonQuery();
// -- ïŒã»ã«åã®æ
å ±ãè¿ã SELECT ã¯ãšãªãå®è¡ããå Žå
obj = this.ExecSelectScalar();
// -- ããŒãã«ïŒor ã¬ã³ãŒãïŒã®æ
å ±ãè¿ã SELECT ã¯ãšãªïŒåŒæ° = ããŒã¿ããŒãã«ïŒ
obj = new DataTable();
this.ExecSelectFill_DT((DataTable)obj);
// -- ããŒãã«ïŒor ã¬ã³ãŒãïŒã®æ
å ±ãè¿ã SELECT ã¯ãšãªïŒåŒæ° = ããŒã¿ã»ããïŒ
obj = new DataSet();
this.ExecSelectFill_DS((DataSet)obj);
// -- ããŒã¿ãªãŒããè¿ã
IDataReader idr = (IDataReader)this.ExecSelect_DR();å³ 3-5ïŒSQL ã®å®è¡ã«ã¯ä»¥äžã® 5 ã€ã®ã¡ãœãããå©çšã§ãã
ãã®ããã«åçãã©ã¡ã¿ã©ã€ãºãã»ã¯ãšãªã§ãã£ãŠããéçãã©ã¡ã¿ã©ã€ãºãã»ã¯ãšãªãSQL ã®å Žåã«å©çšãã API ãšå€ãããŸãã [7]ã
API ã«é¢ãã詳现ã¯ããå©çšã¬ã€ã (éçºè ç·š)ãã® 3 ç« ïŒãDå±€ãã¬ãŒã ã¯ãŒã¯ã®å©ç𿹿³ããåç §ããŠãã ããã
- å šãŠã®ã¿ã°ã¯ãã³ã¡ã³ããš CDATA ã»ã¯ã·ã§ã³ã®ãã¹ããå¯èœãšãªã£ãŠããã
- è€æ°ã®çš®é¡ã®ã¿ã°ã«è·šã£ãŠäœ¿çšã§ããããã¿ã°å ã»ããã¹ãå ãã©ã¡ã¿ã§æ··åšã§ããããªã©ãèæ ®ãããšä»æ§ãè€éã«ãªãããã
- 2WAY-SQL ã¯ããã€ã³ãã£ã³ã°ã®æ å ±ã SQL ã³ã¡ã³ãã§åã蟌ãããšã§ãéåžžã® SQL ãšããŠçŽã«å®è¡ (ãã¹ã) ã§ãããšããç¹åŸŽãæã€ã
- [åæšæž¬ã¢ãŒã] ãã§ã㯠ããã¯ã¹ã¯ãåæå®ã® API ã®ãã¹ãçšã«èšããããŠãããããéåžžã¯äœ¿çšããå¿ èŠã¯ãªããAPI ã«æå®ããåæ å ±ã¯ãèŠå®ã®åæšæž¬ã¢ã«ãŽãªãºã ã§èªåçã«æšæž¬ããã (.NETå â åããŒã¿ ãããã€ãåºæã® DBType)ã
- ã¡ãã»ãŒãžã»ããã¯ã¹ã®ãã£ãã·ã§ã³ã«ã¯ãå®è¡ãã SQL ã®ååŸå æ å ± (TextBox ããããéããŠãããã¡ã€ã«ããã) ã衚瀺ãããããã¡ã€ã«ããå®è¡ããå Žåã¯ãTextBox äžã®å 容ããã¡ã€ã«ã«ä¿åããŠããå®è¡ããªããšãç°ãªã SQL ãå®è¡ãããããæ³šæã
- DB2 ã®ããŒã¿ ãããã€ãã¯ãä» (OracleãSQL Server) ãšç°ãªããã©ã¡ã¿åã«ãã©ã¡ã¿ã®å é èšå·ãå«ããããšãå¿ é ã ãããã®å·®ç°ã¯ D å±€éšåã§åžåããŠãããHiRDB ã®ããŒã¿ ãããã€ãã¯é çªãã€ã³ãã®ã¿ãµããŒãã ããæ¬ãã¬ãŒã ã¯ãŒã¯ã§ã¯ååãã€ã³ãã®ã¿å¯èœã
- API ã«é¢ãã詳现ã¯ããå©çšã¬ã€ã (éçºè ç·š)ãã® 3 ç« ãåç §ã
ïŒä»¥äžïŒ