VB2008´ÓÈëÃŵ½¾«Í¨(PDF¸ñʽӢÎÄ°æ)-µÚ107²¿·Ö
°´¼üÅÌÉÏ·½Ïò¼ü ¡û »ò ¡ú ¿É¿ìËÙÉÏÏ·ҳ£¬°´¼üÅÌÉ쵀 Enter ¼ü¿É»Øµ½±¾ÊéĿ¼ҳ£¬°´¼üÅÌÉÏ·½Ïò¼ü ¡ü ¿É»Øµ½±¾Ò³¶¥²¿£¡
¡ª¡ª¡ª¡ªÎ´ÔĶÁÍꣿ¼ÓÈëÊéÇ©ÒѱãÏ´μÌÐøÔĶÁ£¡
Upon¡¡opening¡¡the¡¡file£»¡¡you¡¡would¡¡know¡¡that¡¡the¡¡winner¡¡is¡¡nobody¡£¡¡The¡¡process¡¡of¡¡finding¡¡out¡¡¡¡
who¡¡the¡¡winner¡¡is¡¡involves¡¡more¡¡steps£»¡¡but¡¡a¡¡relational¡¡database¡¡knows¡¡how¡¡to¡¡manage¡¡these¡¡¡¡
types¡¡of¡¡relations¡¡quite¡¡effectively¡£¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡WHY¡¡THE¡¡THOUSANDS¡¡OF¡¡APIS£»¡¡LIBRARIES£»¡¡AND¡¡TECHNIQUES£¿¡¡
¡¡¡¡¡¡In¡¡the¡¡space¡¡of¡¡12¡¡years£»¡¡the¡¡following¡¡data¡access¡¡technologies¡¡have¡¡emerged£º¡¡Open¡¡Database¡¡Connectivity¡¡¡¡
¡¡¡¡¡¡£¨ODBC£©£»¡¡Remote¡¡Data¡¡Objects¡¡£¨RDO£©£»¡¡the¡¡Jet¡¡Database¡¡Engine£»¡¡Data¡¡Access¡¡Object¡¡£¨DAO£©£»¡¡ActiveX¡¡Data¡¡Object¡¡¡¡
¡¡¡¡¡¡£¨ADO£©£»¡¡Object¡¡Linking¡¡and¡¡Embedding£»¡¡Database¡¡£¨OLE¡¡DB£©£»¡¡ADO£»¡¡and¡¡Language¡¡Integrated¡¡Query¡¡£¨LINQ£©¡£¡¡¡¡
¡¡¡¡¡¡This¡¡means¡¡that¡¡every¡¡2¡¡years£»¡¡a¡¡new¡¡database¡¡technology¡¡is¡¡introduced¡£¡¡Each¡¡database¡¡technology¡¡has¡¡libraries¡¡to¡¡¡¡
¡¡¡¡¡¡make¡¡it¡¡easier¡¡to¡¡write¡¡code¡£¡¡The¡¡result¡¡is¡¡an¡¡amazing¡¡number¡¡of¡¡ways¡¡to¡¡access¡¡a¡¡piece¡¡of¡¡technology¡¡that¡¡is¡¡¡¡
¡¡¡¡¡¡nearly¡¡40¡¡years¡¡old¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡So¡¡why¡¡do¡¡we¡¡have¡¡so¡¡many¡¡ways¡¡to¡¡access¡¡and¡¡manipulate¡¡the¡¡database£¿¡¡Wouldn¡¯t¡¡we£»¡¡as¡¡developers£»¡¡¡¡
¡¡¡¡¡¡get¡¡our¡¡act¡¡together¡¡and¡¡work¡¡toward¡¡a¡¡mon¡¡approach¡¡to¡¡manipulating¡¡a¡¡relational¡¡database£¿¡¡I¡¡can¡¯t¡¡give¡¡¡¡
¡¡¡¡¡¡a¡¡logical¡¡and¡¡accepted¡¡answer¡¡as¡¡to¡¡why¡¡there¡¡are¡¡so¡¡many¡¡data¡access¡¡technologies¡£¡¡But¡¡I¡¡can¡¡tell¡¡you¡¡what¡¡¡¡
¡¡¡¡¡¡I¡¡think¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡For¡¡any¡¡real¡¡production¡¡application£»¡¡it¡¡is¡¡not¡¡unmon¡¡to¡¡have¡¡tables¡¡that¡¡have¡¡30¡¡columns¡£¡¡When¡¡¡¡
¡¡¡¡¡¡writing¡¡code¡¡to¡¡add£»¡¡delete£»¡¡and¡¡modify¡¡a¡¡row¡¡in¡¡a¡¡table¡¡that¡¡has¡¡30¡¡fields£»¡¡you¡¡are£»¡¡for¡¡the¡¡most¡¡part£»¡¡trying¡¡to¡¡¡¡
¡¡¡¡¡¡figure¡¡out¡¡which¡¡field¡¡goes¡¡to¡¡which¡¡piece¡¡of¡¡data¡£¡¡Thus£»¡¡people¡¡try¡¡to¡¡automate¡¡the¡¡job¡£¡¡After¡¡all£»¡¡it¡¡is¡¡more¡¡¡¡
¡¡¡¡¡¡interesting¡¡to¡¡work¡¡through¡¡a¡¡threading¡¡bug¡¡than¡¡an¡¡incorrect¡field¡placement¡¡bug¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Another¡¡issue¡¡is¡¡a¡¡technology¡¡mismatch¡¡between¡¡a¡¡programming¡¡language¡¡and¡¡a¡¡relational¡¡database¡£¡¡A¡¡¡¡
¡¡¡¡¡¡relational¡¡database¡¡treats¡¡data¡¡as¡¡a¡¡set¡£¡¡There¡¡are¡¡no¡¡individual¡¡pieces¡¡of¡¡data¡¡in¡¡a¡¡relational¡¡database¡£¡¡Programming¡¡¡¡
¡¡¡¡¡¡languages¡¡treat¡¡data¡¡as¡¡individuals¡£¡¡Even¡¡in¡¡a¡¡collection¡¡class£»¡¡you¡¡have¡¡an¡¡individual¡¡class¡¡managing¡¡a¡¡set¡¡of¡¡¡¡
¡¡¡¡¡¡individual¡¡references¡£¡¡This¡¡causes¡¡a¡¡mismatch£»¡¡and¡¡trying¡¡to¡¡bind¡¡to¡¡the¡¡two¡¡technologies¡¡is¡¡difficult¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡So¡¡when¡¡you¡¡are¡¡writing¡¡database¡¡code£»¡¡you¡¡are¡¡trying¡¡to¡¡automate¡¡the¡¡fitting¡¡of¡¡a¡¡square¡¡peg¡¡into¡¡a¡¡round¡¡¡¡
¡¡¡¡¡¡hole¡£¡¡You¡¡get¡¡many¡¡extremely¡¡creative¡¡ideas¡¡and¡¡results£»¡¡but¡¡at¡¡the¡¡end¡¡of¡¡the¡¡day£»¡¡you¡¡are¡¡still¡¡fitting¡¡a¡¡square¡¡¡¡
¡¡¡¡¡¡peg¡¡into¡¡a¡¡round¡¡hole¡£¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡The¡¡essence¡¡of¡¡the¡¡problem¡¡when¡¡dealing¡¡with¡¡sets¡¡of¡¡data¡¡in¡¡a¡¡programming¡¡language¡¡is¡¡how¡¡to¡¡¡¡
¡¡¡¡¡¡integrate¡¡the¡¡two¡£¡¡There¡¡is¡¡light¡¡at¡¡the¡¡end¡¡of¡¡the¡¡tunnel£»¡¡in¡¡the¡¡form¡¡of¡¡programming¡¡language¡¡alterations¡¡¡¡
¡¡¡¡¡¡such¡¡as¡¡LINQ¡£¡¡LINQ¡¡will¡¡be¡¡discussed¡¡in¡¡the¡¡next¡¡chapter¡£¡¡¡¡
Accessing¡¡Relational¡¡Databases¡¡
Regardless¡¡of¡¡the¡¡database¡¡implementation¡¡that¡¡you¡¡use£»¡¡a¡¡mon¡¡architecture¡¡is¡¡employed£»¡¡¡¡
as¡¡illustrated¡¡in¡¡Figure¡¡14¡1¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Page¡¡398¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
376¡¡¡¡¡¡¡¡¡¡¡¡¡¡CH¡¡AP¡¡T¡¡E¡¡R¡¡¡¡¡¡1¡¡4¡¡¡¡¡¡¡ö¡¡¡¡¡¡¡¡L¡¡E¡¡A¡¡R¡¡N¡¡I¡¡N¡¡G¡¡¡¡¡¡A¡¡B¡¡OU¡¡T¡¡¡¡¡¡R¡¡E¡¡L¡¡A¡¡TI¡¡O¡¡N¡¡AL¡¡¡¡¡¡DA¡¡TA¡¡B¡¡AS¡¡E¡¡¡¡¡¡D¡¡AT¡¡A¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Figure¡¡14¡1¡£¡¡mon¡¡database¡¡architecture¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Most¡¡relational¡¡database¡¡servers¡¡are¡¡separate¡¡applications¡¡that¡¡run¡¡on¡¡their¡¡own¡£¡¡To¡¡interact¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡with¡¡a¡¡running¡¡relational¡¡database£»¡¡the¡¡database¡¡vendor¡¡provides¡¡a¡¡database¡¡driver¡£¡¡In¡¡£»¡¡a¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡database¡¡driver¡¡is¡¡a¡¡piece¡¡of¡¡proprietary¡¡code¡¡that¡¡talks¡¡to¡¡the¡¡relational¡¡database¡¡server£»¡¡but¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡exposes¡¡its¡¡functionality¡¡using¡¡the¡¡ADO¡¡layer¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡The¡¡ADO¡¡layer¡¡is¡¡a¡¡technology¡¡that¡¡abstracts¡¡the¡¡database¡¡client¡¡into¡¡a¡¡neutral¡¡set¡¡of¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡interfaces¡£¡¡By¡¡itself£»¡¡ADO¡¡does¡¡not¡¡implement¡¡any¡¡technologies£»¡¡but¡¡it¡¡defines¡¡the¡¡inter
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡faces¡¡that¡¡a¡¡database¡¡needs¡¡to¡¡have¡¡implemented¡£¡¡ADO¡¡is¡¡similar¡¡to¡¡the¡¡lighting¡¡manager¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡application¡¡introduced¡¡in¡¡Chapter¡¡8£»¡¡where¡¡specific¡¡lighting¡¡implementations¡¡need¡¡to¡¡imple
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ment¡¡interfaces¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡The¡¡ADO¡¡code¡¡can¡¡be¡¡accessed¡¡directly¡¡in¡¡your¡¡application¡¡by¡¡your¡¡code¡£¡¡However£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡doing¡¡that¡¡means¡¡accessing¡¡the¡¡individual¡¡rows£»¡¡columns£»¡¡and¡¡database¡¡tables¡£¡¡It¡¡is¡¡not¡¡a¡¡difficult¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡undertaking£»¡¡but¡¡it¡¡means¡¡you¡¡need¡¡to¡¡do¡¡everything¡¡manually¡£¡¡With¡¡respect¡¡to¡¡the¡¡lottery¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡example£»¡¡it¡¡means¡¡manipulating¡¡the¡¡lottery¡¡winners¡¡and¡¡the¡¡lottery¡¡draws¡¡tables¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Visual¡¡Basic¡¡Express¡¡and¡¡other¡¡Visual¡¡Studio¡¡editions¡¡have¡¡a¡¡number¡¡of¡¡tools¡¡that¡¡will¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡generate¡¡code¡¡that¡¡automatically¡¡binds¡¡to¡¡tables¡¡and¡¡rows£»¡¡reducing¡¡the¡¡amount¡¡of¡¡work¡¡that¡¡you¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡need¡¡to¡¡do¡£¡¡In¡¡Figure¡¡14¡1£»¡¡the¡¡user¡¡code¡¡has¡¡arrows¡¡pointing¡¡to¡¡both¡¡the¡¡Visual¡¡Studio¨Cgenerated¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡code¡¡and¡¡the¡¡ADO¡¡code¡£¡¡These¡¡arrows¡¡indicate¡¡that¡¡your¡¡code¡¡does¡¡not¡¡need¡¡to¡¡use¡¡the¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Visual¡¡Studio¨Cgenerated¡¡code£»¡¡it¡¡is¡¡optional¡£¡¡But¡¡the¡¡advantage¡¡of¡¡using¡¡the¡¡Visual¡¡Studio¡¡code¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡is¡¡that¡¡it¡¡reduces¡¡the¡¡amount¡¡of¡¡grunt¡¡work¡¡that¡¡your¡¡code¡¡needs¡¡to¡¡do¡£¡¡The¡¡Visual¡¡Studio¨C¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡generated¡¡code¡¡is¡¡a¡¡thin¡¡functional¡¡layer¡¡on¡¡top¡¡of¡¡the¡¡ADO¡¡code¡¡that¡¡maps¡¡directly¡¡to¡¡the¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡tables¡¡that¡¡you¡¡are¡¡manipulating¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡When¡¡you¡¡are¡¡developing¡¡an¡¡application¡¡that¡¡accesses¡¡a¡¡relational¡¡database£»¡¡you¡¡need¡¡to¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡consider¡¡the¡¡following¡¡issues£º¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ADO¡¡drivers¡¡£º¡¡When¡¡you¡¡write¡¡ADO¡¡code£»¡¡you¡¡will¡¡need¡¡an¡¡ADO¡¡driver¡¡for¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡each¡¡database¡£¡¡Thus£»¡¡if¡¡you¡¡wish¡¡to¡¡use¡¡MySQL£»¡¡you¡¡will¡¡need¡¡a¡¡MySQL¡¡driver¡£¡¡However£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡for¡¡the¡¡most¡¡part£»¡¡the¡¡code¡¡that¡¡you¡¡write¡¡in¡¡your¡¡application¡¡will¡¡remain¡¡identical£»¡¡regard
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡less¡¡of¡¡which¡¡type¡¡of¡¡database¡¡you¡¡are¡¡using¡£¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Abstraction¡¡£º¡¡There¡¡will¡¡always¡¡be¡¡differences¡¡in¡¡the¡¡code¡¡used¡¡to¡¡access¡¡different¡¡relational¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡databases¡£¡¡Be¡¡prepared¡¡to¡¡abstract¡¡your¡¡database¡¡code¡¡if¡¡you¡¡access¡¡the¡¡database¡¡directly¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡using¡¡ADO¡£¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Page¡¡399¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡C¡¡HA¡¡P¡¡TE¡¡R¡¡¡¡¡¡1¡¡4¡¡¡¡¡¡¡ö¡¡¡¡¡¡¡¡L¡¡E¡¡AR¡¡N¡¡I¡¡N¡¡G¡¡¡¡¡¡AB¡¡O¡¡U¡¡T¡¡¡¡R¡¡E¡¡L¡¡AT¡¡IO¡¡N¡¡A¡¡L¡¡¡¡¡¡D¡¡AT¡¡AB¡¡A¡¡SE¡¡¡¡¡¡D¡¡A¡¡TA¡¡377¡¡
Designing¡¡a¡¡Database¡¡Using¡¡Visual¡¡Basic¡¡Express¡¡
Visual¡¡Basic¡¡Express¡¡is¡¡very¡¡helpful¡¡when¡¡designing¡¡and¡¡building¡¡database¡¡applications¡£¡¡It¡¡provides¡¡¡¡
interface¡based¡¡tools¡¡for¡¡designing¡¡the¡¡database£»¡¡managing¡¡connections£»¡¡and¡¡managing¡¡data¡¡¡¡
access¡£¡¡
¡¡¡¡¡¡¡¡¡¡With¡¡Visual¡¡Basic¡¡Express£»¡¡you¡¡can¡¡directly¡¡integrate¡¡the¡¡ADO¡¡drivers¡¡for¡¡only¡¡Microsoft¡¡¡¡
SQL¡¡Server¡£¡¡£¨This¡¡does¡¡not¡¡mean¡¡you¡¡cannot¡¡use¡¡a¡¡different¡¡ADO¡¡driver¡¡using¡¡code¡££©¡¡If¡¡you¡¡¡¡
want¡¡to¡¡use¡¡the¡¡GUI¡¡tools¡¡for¡¡a¡¡database¡¡driver¡¡other¡¡than¡¡for¡¡SQL¡¡Server£»¡¡you¡¡will¡¡need¡¡to¡¡upgrade¡¡¡¡
your¡¡Visual¡¡Studio¡¡edition¡£¡¡For¡¡this¡¡chapter¡¯s¡¡examples£»¡¡we¡¯ll¡¡use¡¡the¡¡SQL¡¡Server¡¡Express¡¡Edition¡¡¡¡
driver¡¡£¨http£º//msdn¡£microsoft¡£/vstudio/express/sql/£©¡£¡¡
¡¡¡¡¡¡¡¡¡¡You¡¡can¡¡add¡¡the¡¡GUI¡¡tool¡based¡¡database¡¡support¡¡to¡¡any¡¡Visual¡¡Basic¡¡project¡¡type¡£¡¡For¡¡this¡¡¡¡
chapter£»¡¡we¡¯ll¡¡use¡¡a¡¡console¡¡project¡¡called¡¡DatabaseConsoleEx¡£¡¡
¡¡¡¡¡¡¡¡¡¡After¡¡you¡¡have¡¡created¡¡the¡¡¡¡DatabaseConsoleEx¡¡console¡¡project¡¡in¡¡Visual¡¡Basic¡¡Express¡¡¡¡
£¨using¡¡the¡¡procedure¡¡outlined¡¡in¡¡Chapter¡¡1£©£»¡¡you¡¡can¡¡set¡¡up¡¡the¡¡database£»¡¡and¡¡then¡¡add¡¡tables¡¡¡¡
to¡¡your¡¡new¡¡database¡£¡¡
Configuring¡¡the¡¡Data¡¡Source¡¡
Using¡¡the¡¡Visual¡¡Basic¡¡Express¡¡Data¡¡Source¡¡Configuration¡¡Wizard£»¡¡you¡¡can¡¡add¡¡a¡¡database¡¡as¡¡¡¡
your¡¡data¡¡source£»¡¡set¡¡up¡¡the¡¡database¡¡connection£»¡¡and¡¡select¡¡database¡¡objects¡¡to¡¡include¡¡in¡¡the¡¡¡¡
project¡£¡¡Follow¡¡these¡¡steps¡¡to¡¡use¡¡the¡¡wizard£º¡¡
¡¡¡¡¡¡¡¡¡¡1¡£¡¡¡¡Select¡¡Data¡¡¡¡Add¡¡New¡¡Data¡¡Source¡¡to¡¡start¡¡the¡¡Data¡¡Source¡¡Configuration¡¡Wizard¡£¡¡
¡¡¡¡¡¡¡¡¡¡2¡£¡¡¡¡Choose¡¡Database¡¡as¡¡the¡¡data¡¡source¡¡and¡¡click¡¡Next¡£¡¡
¡¡¡¡¡¡¡¡¡¡3¡£¡¡¡¡You¡¯re¡¡asked¡¡to¡¡choose¡¡a¡¡data¡¡connection¡£¡¡When¡¡choosing¡¡the¡¡data¡¡connection£»¡¡you¡¡are¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡defining¡¡the¡¡connection¡¡settings¡¡to¡¡your¡¡relational¡¡database¡£¡¡Since¡¡we¡¡are¡¡creating¡¡a¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡new¡¡database¡¡in¡¡this¡¡example£»¡¡click¡¡the¡¡New¡¡Connection¡¡button¡£¡¡
¡¡¡¡¡¡¡¡¡¡4¡£¡¡¡¡Choose¡¡Microsoft¡¡SQL¡¡Server¡¡Database¡¡File¡¡and¡¡click¡¡Continue¡£¡¡
¡¡¡¡¡¡¡¡¡¡5¡£¡¡¡¡In¡¡the¡¡Add¡¡Connection¡¡dialog¡¡box£»¡¡fill¡¡in¡¡the¡¡database¡¡file¡¡name¡£¡¡For¡¡this¡¡example£»¡¡enter¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡the¡¡name¡¡lottery¡£¡¡Visual¡¡Basic¡¡Express¡¡will¡¡automatically¡¡add¡¡an¡¡¡£mdf¡¡extension¡¡to¡¡the¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡file¡¡name¡¡to¡¡indicate¡¡that¡¡it¡¡is¡¡a¡¡SQL¡¡Server¡¡file¡¡and¡¡save¡¡it¡¡in¡¡your¡¡My¡¡Documents¡¡folder¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡by¡¡default¡£¡¡Click¡¡OK¡¡to¡¡add¡¡the¡¡connection¡¡and¡¡select¡¡Yes¡¡when¡¡asked¡¡to¡¡choose¡¡to¡¡create¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡the¡¡file¡¡if¡¡it¡¡doesn¡¯t¡¡exist¡£¡¡
¡¡¡¡¡¡¡¡¡¡6¡£¡¡¡¡The¡¡Choose¡¡Your¡¡Data¡¡Connection¡¡screen¡¡reappears¡¡with¡¡your¡¡data¡¡connection¡¡filled¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡in¡£¡¡Click¡¡Next¡£¡¡
¡¡¡¡¡¡¡¡¡¡7¡£¡¡¡¡Since¡¡we¡¯re¡¡using¡¡a¡¡SQL¡¡Server¡¡Express¡¡Edition¡¡driver¡¡for¡¡this¡¡example£»¡¡the¡¡dialog¡¡box¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡shown¡¡in¡¡Figure¡¡14¡2¡¡appears¡£¡¡It¡¡asks¡¡if¡¡the¡¡database¡¡file¡¡can¡¡be¡¡copied¡¡into¡¡the¡¡project¡£¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Click¡¡Yes¡£¡¡¡¡
¡¡¡¡¡¡¡¡¡¡8¡£¡¡¡¡You¡¡are¡¡asked¡¡if¡¡you¡¡want¡¡the¡¡application¡¡configuration¡¡information¡¡added¡¡to¡¡the¡¡project¡£¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Click¡¡Next¡¡to¡¡add¡¡the¡¡information¡£¡¡
¡¡¡¡¡¡¡¡¡¡9¡£¡¡¡¡The¡¡Choose¡¡Your¡¡Database¡¡Objects¡¡screen¡¡appears¡£¡¡Since¡¡this¡¡is¡¡a¡¡SQL¡¡Server¡¡Express¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Edition¡¡file£»¡¡it¡¡doesn¡¯t¡¡have¡¡any¡¡tables¡£¡¡If¡¡the¡¡database¡¡connection¡¡referenced¡¡a¡¡relational¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡database¡¡that¡¡already¡¡existed£»¡¡database¡¡objects¡¡would¡¡be¡¡available¡£¡¡Click¡¡Finish¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Page¡¡400¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
378¡¡¡¡¡¡¡¡¡¡¡¡¡¡CH¡¡AP¡¡T¡¡E¡¡R¡¡¡¡¡¡1¡¡4¡¡¡¡¡¡¡ö¡¡¡¡¡¡¡¡L¡¡E¡¡A¡¡R¡¡N¡¡I¡¡N¡¡G¡¡¡¡¡¡A¡¡B¡¡OU¡¡T¡¡¡¡¡¡R¡¡E¡¡L¡¡A¡¡TI¡¡O¡¡N¡¡AL¡¡¡¡¡¡DA¡¡TA¡¡B¡¡AS¡¡E¡¡¡¡¡¡D¡¡AT¡¡A¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Figure¡¡14¡2¡£¡¡Adding¡¡the¡¡SQL¡¡Server¡¡Express¡¡Edition¡¡file¡¡to¡¡the¡¡local¡¡project¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Visual¡¡Basic¡¡Express¡¡will¡¡rebuild¡¡your¡¡project¡£¡¡When¡¡it¡¡is¡¡finished£»¡¡the¡¡result¡¡will¡¡be¡¡similar¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡to¡¡the¡¡project¡¡structure¡¡shown¡¡in¡¡Figure¡¡14¡3¡£¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Figure¡¡14¡3¡£¡¡Modifications¡¡made¡¡to¡¡the¡¡Visual¡¡Basic¡¡Express¡¡project¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡The¡¡Visual¡¡Basic¡¡Express¡¡project¡¡contains¡¡a¡¡reference¡¡to¡¡a¡¡file¡¡that¡¡is¡¡provided¡¡by¡¡Microsoft¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡SQL¡¡Server¡¡Express¡¡Edition¡£¡¡The¡¡diagram¡¡shown¡¡earlier¡¡in¡¡Figure¡¡14¡1¡¡indicates¡¡that¡¡a¡¡database¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡server¡¡is¡¡another¡¡process¡¡that¡¡you¡¡access¡¡using¡¡a¡¡client¡¡library¡£¡¡In¡¡about¡¡80£¥¡¡of¡¡the¡¡cases£»¡¡th