engine/sqlite/sqlite_port.htm
author teknolog
Sat, 27 Feb 2010 16:41:36 +0000
changeset 20 c92d8384952c
parent 2 29cda98b007e
permissions -rw-r--r--
Fix so only actually added feeds are counted during import

<html xmlns:v="urn:schemas-microsoft-com:vml"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:w="urn:schemas-microsoft-com:office:word"
xmlns:m="http://schemas.microsoft.com/office/2004/12/omml"
xmlns="http://www.w3.org/TR/REC-html40">

<head>
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
<meta name=ProgId content=Word.Document>
<meta name=Generator content="Microsoft Word 12">
<meta name=Originator content="Microsoft Word 12">
<link rel=File-List href="sqlite_port-Dateien/filelist.xml">
<link rel=Edit-Time-Data href="sqlite_port-Dateien/editdata.mso">
<!--[if !mso]>
<style>
v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style>
<![endif]--><!--[if gte mso 9]><xml>
 <o:DocumentProperties>
  <o:Author>SieMatic</o:Author>
  <o:LastAuthor>SieMatic</o:LastAuthor>
  <o:Revision>2</o:Revision>
  <o:Created>2008-02-26T10:24:00Z</o:Created>
  <o:LastSaved>2008-02-26T10:24:00Z</o:LastSaved>
  <o:Pages>7</o:Pages>
  <o:Words>2063</o:Words>
  <o:Characters>13003</o:Characters>
  <o:Company>SieMatic Möbelwerke GmbH</o:Company>
  <o:Lines>108</o:Lines>
  <o:Paragraphs>30</o:Paragraphs>
  <o:CharactersWithSpaces>15036</o:CharactersWithSpaces>
  <o:Version>12.00</o:Version>
 </o:DocumentProperties>
</xml><![endif]-->
<link rel=themeData href="sqlite_port-Dateien/themedata.thmx">
<link rel=colorSchemeMapping href="sqlite_port-Dateien/colorschememapping.xml">
<!--[if gte mso 9]><xml>
 <w:WordDocument>
  <w:GrammarState>Clean</w:GrammarState>
  <w:TrackMoves>false</w:TrackMoves>
  <w:TrackFormatting/>
  <w:HyphenationZone>21</w:HyphenationZone>
  <w:PunctuationKerning/>
  <w:ValidateAgainstSchemas/>
  <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
  <w:IgnoreMixedContent>false</w:IgnoreMixedContent>
  <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
  <w:DoNotPromoteQF/>
  <w:LidThemeOther>DE</w:LidThemeOther>
  <w:LidThemeAsian>X-NONE</w:LidThemeAsian>
  <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
  <w:Compatibility>
   <w:BreakWrappedTables/>
   <w:SnapToGridInCell/>
   <w:WrapTextWithPunct/>
   <w:UseAsianBreakRules/>
   <w:DontGrowAutofit/>
   <w:DontUseIndentAsNumberingTabStop/>
   <w:FELineBreak11/>
   <w:WW11IndentRules/>
   <w:DontAutofitConstrainedTables/>
   <w:AutofitLikeWW11/>
   <w:HangulWidthLikeWW11/>
   <w:UseNormalStyleForList/>
  </w:Compatibility>
  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
  <m:mathPr>
   <m:mathFont m:val="Cambria Math"/>
   <m:brkBin m:val="before"/>
   <m:brkBinSub m:val="&#45;-"/>
   <m:smallFrac m:val="off"/>
   <m:dispDef/>
   <m:lMargin m:val="0"/>
   <m:rMargin m:val="0"/>
   <m:defJc m:val="centerGroup"/>
   <m:wrapIndent m:val="1440"/>
   <m:intLim m:val="subSup"/>
   <m:naryLim m:val="undOvr"/>
  </m:mathPr></w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
 <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"
  DefSemiHidden="true" DefQFormat="false" DefPriority="99"
  LatentStyleCount="267">
  <w:LsdException Locked="false" Priority="0" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Normal"/>
  <w:LsdException Locked="false" Priority="9" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="heading 1"/>
  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/>
  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/>
  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/>
  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/>
  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/>
  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/>
  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/>
  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 1"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 2"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 3"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 4"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 5"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 6"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 7"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 8"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 9"/>
  <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/>
  <w:LsdException Locked="false" Priority="10" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Title"/>
  <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/>
  <w:LsdException Locked="false" Priority="11" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/>
  <w:LsdException Locked="false" Priority="22" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Strong"/>
  <w:LsdException Locked="false" Priority="20" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/>
  <w:LsdException Locked="false" Priority="59" SemiHidden="false"
   UnhideWhenUsed="false" Name="Table Grid"/>
  <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/>
  <w:LsdException Locked="false" Priority="1" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/>
  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading"/>
  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List"/>
  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid"/>
  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1"/>
  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2"/>
  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1"/>
  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2"/>
  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1"/>
  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2"/>
  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3"/>
  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List"/>
  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading"/>
  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List"/>
  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid"/>
  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 1"/>
  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 1"/>
  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 1"/>
  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/>
  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/>
  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/>
  <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/>
  <w:LsdException Locked="false" Priority="34" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/>
  <w:LsdException Locked="false" Priority="29" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Quote"/>
  <w:LsdException Locked="false" Priority="30" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/>
  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/>
  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/>
  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/>
  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/>
  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 1"/>
  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/>
  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 1"/>
  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/>
  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 2"/>
  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 2"/>
  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 2"/>
  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/>
  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/>
  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/>
  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/>
  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/>
  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/>
  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/>
  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 2"/>
  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/>
  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 2"/>
  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/>
  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 3"/>
  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 3"/>
  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 3"/>
  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/>
  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/>
  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/>
  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/>
  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/>
  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/>
  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/>
  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 3"/>
  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/>
  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 3"/>
  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/>
  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 4"/>
  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 4"/>
  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 4"/>
  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/>
  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/>
  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/>
  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/>
  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/>
  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/>
  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/>
  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 4"/>
  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/>
  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 4"/>
  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/>
  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 5"/>
  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 5"/>
  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 5"/>
  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/>
  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/>
  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/>
  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/>
  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/>
  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/>
  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/>
  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 5"/>
  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/>
  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 5"/>
  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/>
  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 6"/>
  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 6"/>
  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 6"/>
  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/>
  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/>
  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/>
  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/>
  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/>
  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/>
  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/>
  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 6"/>
  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/>
  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 6"/>
  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/>
  <w:LsdException Locked="false" Priority="19" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/>
  <w:LsdException Locked="false" Priority="21" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/>
  <w:LsdException Locked="false" Priority="31" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/>
  <w:LsdException Locked="false" Priority="32" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/>
  <w:LsdException Locked="false" Priority="33" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Book Title"/>
  <w:LsdException Locked="false" Priority="37" Name="Bibliography"/>
  <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/>
 </w:LatentStyles>
</xml><![endif]-->
<style>
<!--
 /* Font Definitions */
 @font-face
	{font-family:Wingdings;
	panose-1:5 0 0 0 0 0 0 0 0 0;
	mso-font-charset:2;
	mso-generic-font-family:auto;
	mso-font-pitch:variable;
	mso-font-signature:0 268435456 0 0 -2147483648 0;}
@font-face
	{font-family:"Cambria Math";
	panose-1:2 4 5 3 5 4 6 3 2 4;
	mso-font-charset:0;
	mso-generic-font-family:roman;
	mso-font-pitch:variable;
	mso-font-signature:-1610611985 1107304683 0 0 159 0;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-pitch:variable;
	mso-font-signature:-1610611985 1073750139 0 0 159 0;}
@font-face
	{font-family:Tahoma;
	panose-1:2 11 6 4 3 5 4 4 2 4;
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-pitch:variable;
	mso-font-signature:1627400839 -2147483648 8 0 66047 0;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
	{mso-style-unhide:no;
	mso-style-qformat:yes;
	mso-style-parent:"";
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:10.0pt;
	margin-left:0cm;
	line-height:115%;
	mso-pagination:widow-orphan;
	font-size:11.0pt;
	font-family:"Calibri","sans-serif";
	mso-fareast-font-family:Calibri;
	mso-bidi-font-family:"Times New Roman";
	mso-fareast-language:EN-US;}
p.MsoCommentText, li.MsoCommentText, div.MsoCommentText
	{mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-link:"Kommentartext Zchn";
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:10.0pt;
	margin-left:0cm;
	line-height:115%;
	mso-pagination:widow-orphan;
	font-size:10.0pt;
	font-family:"Calibri","sans-serif";
	mso-fareast-font-family:Calibri;
	mso-bidi-font-family:"Times New Roman";
	mso-fareast-language:EN-US;}
span.MsoCommentReference
	{mso-style-noshow:yes;
	mso-style-priority:99;
	mso-ansi-font-size:8.0pt;
	mso-bidi-font-size:8.0pt;}
a:link, span.MsoHyperlink
	{mso-style-priority:99;
	color:blue;
	text-decoration:underline;
	text-underline:single;}
a:visited, span.MsoHyperlinkFollowed
	{mso-style-noshow:yes;
	mso-style-priority:99;
	color:purple;
	text-decoration:underline;
	text-underline:single;}
p
	{mso-style-noshow:yes;
	mso-style-priority:99;
	mso-margin-top-alt:auto;
	margin-right:0cm;
	mso-margin-bottom-alt:auto;
	margin-left:0cm;
	mso-pagination:widow-orphan;
	font-size:12.0pt;
	font-family:"Times New Roman","serif";
	mso-fareast-font-family:"Times New Roman";}
code
	{mso-style-noshow:yes;
	mso-style-priority:99;
	font-family:"Courier New";
	mso-ascii-font-family:"Courier New";
	mso-fareast-font-family:"Times New Roman";
	mso-hansi-font-family:"Courier New";
	mso-bidi-font-family:"Courier New";}
pre
	{mso-style-priority:99;
	mso-style-link:"HTML Vorformatiert Zchn";
	margin:0cm;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
	font-size:12.0pt;
	font-family:"Courier New";
	mso-fareast-font-family:"Times New Roman";
	color:black;}
p.MsoCommentSubject, li.MsoCommentSubject, div.MsoCommentSubject
	{mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-parent:Kommentartext;
	mso-style-link:"Kommentarthema Zchn";
	mso-style-next:Kommentartext;
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:10.0pt;
	margin-left:0cm;
	line-height:115%;
	mso-pagination:widow-orphan;
	font-size:10.0pt;
	font-family:"Calibri","sans-serif";
	mso-fareast-font-family:Calibri;
	mso-bidi-font-family:"Times New Roman";
	mso-fareast-language:EN-US;
	font-weight:bold;}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
	{mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-link:"Sprechblasentext Zchn";
	margin:0cm;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:8.0pt;
	font-family:"Tahoma","sans-serif";
	mso-fareast-font-family:Calibri;
	mso-fareast-language:EN-US;}
p.codeblock, li.codeblock, div.codeblock
	{mso-style-name:codeblock;
	mso-style-unhide:no;
	mso-margin-top-alt:auto;
	margin-right:0cm;
	mso-margin-bottom-alt:auto;
	margin-left:0cm;
	mso-pagination:widow-orphan;
	font-size:12.0pt;
	font-family:"Times New Roman","serif";
	mso-fareast-font-family:"Times New Roman";}
span.HTMLVorformatiertZchn
	{mso-style-name:"HTML Vorformatiert Zchn";
	mso-style-priority:99;
	mso-style-unhide:no;
	mso-style-locked:yes;
	mso-style-link:"HTML Vorformatiert";
	mso-ansi-font-size:12.0pt;
	mso-bidi-font-size:12.0pt;
	font-family:"Courier New";
	mso-ascii-font-family:"Courier New";
	mso-fareast-font-family:"Times New Roman";
	mso-hansi-font-family:"Courier New";
	mso-bidi-font-family:"Courier New";
	color:black;}
span.KommentartextZchn
	{mso-style-name:"Kommentartext Zchn";
	mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-unhide:no;
	mso-style-locked:yes;
	mso-style-link:Kommentartext;
	mso-ansi-language:DE;}
span.KommentarthemaZchn
	{mso-style-name:"Kommentarthema Zchn";
	mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-unhide:no;
	mso-style-locked:yes;
	mso-style-parent:"Kommentartext Zchn";
	mso-style-link:Kommentarthema;
	mso-ansi-language:DE;
	font-weight:bold;}
span.SprechblasentextZchn
	{mso-style-name:"Sprechblasentext Zchn";
	mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-unhide:no;
	mso-style-locked:yes;
	mso-style-link:Sprechblasentext;
	mso-ansi-font-size:8.0pt;
	mso-bidi-font-size:8.0pt;
	font-family:"Tahoma","sans-serif";
	mso-ascii-font-family:Tahoma;
	mso-hansi-font-family:Tahoma;
	mso-bidi-font-family:Tahoma;
	mso-ansi-language:DE;}
span.GramE
	{mso-style-name:"";
	mso-gram-e:yes;}
.MsoChpDefault
	{mso-style-type:export-only;
	mso-default-props:yes;
	mso-ascii-font-family:Calibri;
	mso-fareast-font-family:Calibri;
	mso-hansi-font-family:Calibri;}
@page Section1
	{size:595.3pt 841.9pt;
	margin:70.85pt 70.85pt 2.0cm 70.85pt;
	mso-header-margin:35.4pt;
	mso-footer-margin:35.4pt;
	mso-paper-source:0;}
div.Section1
	{page:Section1;}
 /* List Definitions */
 @list l0
	{mso-list-id:711465342;
	mso-list-type:hybrid;
	mso-list-template-ids:-398029370 -1506878708 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l0:level1
	{mso-level-start-at:0;
	mso-level-number-format:bullet;
	mso-level-text:\F0D8;
	mso-level-tab-stop:none;
	mso-level-number-position:left;
	text-indent:-18.0pt;
	font-family:Wingdings;
	mso-fareast-font-family:"Times New Roman";
	mso-bidi-font-family:"Courier New";}
@list l1
	{mso-list-id:1152210869;
	mso-list-type:hybrid;
	mso-list-template-ids:1896245118 489165068 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l1:level1
	{mso-level-start-at:0;
	mso-level-number-format:bullet;
	mso-level-text:\F0D8;
	mso-level-tab-stop:none;
	mso-level-number-position:left;
	text-indent:-18.0pt;
	font-family:Wingdings;
	mso-fareast-font-family:"Times New Roman";
	mso-bidi-font-family:"Courier New";}
@list l2
	{mso-list-id:2131390884;
	mso-list-type:hybrid;
	mso-list-template-ids:-835441590 1095827004 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l2:level1
	{mso-level-start-at:0;
	mso-level-number-format:bullet;
	mso-level-text:\F0D8;
	mso-level-tab-stop:none;
	mso-level-number-position:left;
	margin-left:21.4pt;
	text-indent:-18.0pt;
	font-family:Wingdings;
	mso-fareast-font-family:"Times New Roman";
	mso-bidi-font-family:"Courier New";}
ol
	{margin-bottom:0cm;}
ul
	{margin-bottom:0cm;}
-->
</style>
<!--[if gte mso 10]>
<style>
 /* Style Definitions */
 table.MsoNormalTable
	{mso-style-name:"Normale Tabelle";
	mso-tstyle-rowband-size:0;
	mso-tstyle-colband-size:0;
	mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-qformat:yes;
	mso-style-parent:"";
	mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
	mso-para-margin:0cm;
	mso-para-margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:10.0pt;
	font-family:"Calibri","sans-serif";}
</style>
<![endif]--><!--[if gte mso 9]><xml>
 <o:shapedefaults v:ext="edit" spidmax="2050"/>
</xml><![endif]--><!--[if gte mso 9]><xml>
 <o:shapelayout v:ext="edit">
  <o:idmap v:ext="edit" data="1"/>
  <o:rules v:ext="edit">
   <o:r id="V:Rule4" type="connector" idref="#_x0000_s1033"/>
   <o:r id="V:Rule6" type="connector" idref="#_x0000_s1036"/>
  </o:rules>
 </o:shapelayout></xml><![endif]-->
</head>

<body lang=DE link=blue vlink=purple style='tab-interval:35.4pt'>

<div class=Section1>

<p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span lang=EN-US
style='mso-ansi-language:EN-US'>SQLite implementation for Symbian OS with an ADO.NET
Provider for Red Five Labs’ .NET Compact Framework 1.0<o:p></o:p></span></b></p>

<p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span lang=EN-US
style='mso-ansi-language:EN-US'>Converting SQLite to S60<o:p></o:p></span></b></p>

<p class=MsoNormal><span lang=EN-US style='mso-ansi-language:EN-US'>Red Five Labs’
Net60, a .NET Compact Framework Version 1.0, introduces .NET programming to the
great family of Symbian S60 smartphones. Now it is possible to run a managed .NET
application, written for Windows Mobile, on S60 smartphones. Unfortunately,
however, the .NET Compact Framework 1.0 does not provide any form of database
support. This is first supported in the .NET Compact Framework 2.0 together
with the SQL Server Compact Edition. This SQL Server only runs on Windows
Mobile <span class=GramE>devices which means</span> another database system is
needed to provide database functionality to Symbian devices. Enter SQLite for
S60.<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='mso-ansi-language:EN-US'>SQLite is a
popular open source, stand-alone database system that was written in C and is
available for Windows, Windows Mobile, OS2 and <span class=GramE>Unix</span> operating
systems. It is ACID compliant and supports the SQL-92 standard. The Symbian OS at
present does not provide a database system, however in the future Symbian OS
Version 9.4 will support a SQLite implementation. <o:p></o:p></span></p>

<p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span lang=EN-US
style='mso-ansi-language:EN-US'><o:p>&nbsp;</o:p></span></b></p>

<p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span lang=EN-US
style='mso-ansi-language:EN-US'>PIPS for S60 made porting SQLite to Symbian OS
possible<o:p></o:p></span></b></p>

<p class=MsoNormal><span lang=EN-US style='mso-ansi-language:EN-US'>At the
beginning of 2007 Symbian published the P.I.P.S. SDK (<a
href="http://developer.symbian.com/wiki/display/oe/P.I.P.S.+Home">http://developer.symbian.com/wiki/display/oe/P.I.P.S.+Home</a>
) for the S60 and UIQ platforms. P.I.P.S. is the implementation of the POSIX
Interface for Symbian OS that provides C Libraries like STDIO or STDLIB. With
the Open C SDK it is possible to port the SQLite library written in ANSI C to
Symbian OS. To do such a conversion of an existing ANSI C project knowledge of
programming for Symbian OS is needed. A good description of the conversion of
SQLite to S60 is the article on Dr.Dobbs (<a
href="http://www.ddj.com/mobile/198702204?pgno=2">http://www.ddj.com/mobile/198702204?pgno=2</a>)
and describes how such a port of SQLite could be done. By following these
instructions, it was easy to create a project that could compile the C files of
the SQLite project. <o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='mso-ansi-language:EN-US'>Note, the
PIPS SDK for S60 must be installed to the PC to compile the SqliteS60 project
whilst the PIPS_s60_1_2_SS .SIS must be installed on the device.<o:p></o:p></span></p>

<p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span lang=EN-US
style='mso-ansi-language:EN-US'><o:p>&nbsp;</o:p></span></b></p>

<p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span lang=EN-US
style='mso-ansi-language:EN-US'>Converting SQLite .C files to .CPP files<o:p></o:p></span></b></p>

<p class=MsoNormal><span lang=EN-US style='mso-ansi-language:EN-US'>Before the
SQLite source could be completely compiled, the file IO operations had to be
rewritten. This part of SQLite is not platform independent and uses the native
OS operations to open, read and write files.<span style='mso-spacerun:yes'> 
</span>The first step was to rewrite the file operations with the STDIO
implementation.<span style='mso-spacerun:yes'>  </span>For example the <b
style='mso-bidi-font-weight:normal'>OpenDatabase</b> method was modified to use
the <b style='mso-bidi-font-weight:normal'>fopen</b> method of POSIX. Unfortunately
this did not result in the outcome that was expected. <span
style='mso-spacerun:yes'> </span>On the test device this implementation does
not run. After analyzing this, it seems to be that the ANSI C file IO methods
cause the error. <span style='mso-spacerun:yes'> </span>The Symbian API is an
object oriented programming interface, therefore to use the native file IO <span
class=GramE>classes,</span> the SQLite source must be converted from .C files
to .CPP files. Renaming the files was easy, but after renaming the source files
over 500 compiler errors were output. Most of these were language differences
between C and C++ and could be solved quickly. After resolving these problems,
programming the OS routines with the Symbian file IO classes could begin.<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='mso-ansi-language:EN-US'>For this
part a new file was created and added to the SQLiteS60 project
(os_symbian.cpp). This file includes all methods that SQLite expects for file
IO. The conversion of the existing C files of the SQLite project to CPP files
makes the SQLiteS60 project very different from the main source. As a result of
this, the implementations for the other OS operations, i.e. for OS2, Windows and
Mac, were deleted from this project. SQLite uses a structure to reference the
correct OS operations and is implemented in every OS implementation. Due to this
practice, only a compiler switch is needed to generate a run-able SQLite library
for the specific operating system. As this structure is not used in the S60
conversion project, it has also been removed from the code and the Symbian IO
methods are directly connected to the OS methods in the file os.cpp.<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='mso-ansi-language:EN-US'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='mso-ansi-language:EN-US'>A simple
example to open or create a file with native Symbian methods is shown in the
following code snippet.<o:p></o:p></span></p>

<div style='mso-element:para-border-div;border:solid #CCCCCC 1.0pt;mso-border-alt:
solid #CCCCCC .75pt;padding:3.0pt 3.0pt 3.0pt 3.0pt;background:#EEEEEE;
margin-left:3.4pt;margin-right:3.4pt'><pre style='margin-top:3.4pt;margin-right:
0cm;margin-bottom:3.4pt;margin-left:0cm;text-align:justify;line-height:110%;
background:#EEEEEE;border:none;mso-border-alt:solid #CCCCCC .75pt;padding:0cm;
mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span lang=EN-US style='font-size:
7.5pt;line-height:110%;mso-ansi-language:EN-US'>RFs fileSession;<o:p></o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
lang=EN-US style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'>RFile file;<span style='mso-spacerun:yes'>   </span><o:p></o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
lang=EN-US style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'><o:p>&nbsp;</o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
class=GramE><span lang=EN-US style='font-size:7.5pt;line-height:110%;
mso-ansi-language:EN-US'>fileSession.Connect(</span></span><span lang=EN-US
style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'>);<o:p></o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
lang=EN-US style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'><o:p>&nbsp;</o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
lang=EN-US style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'>TInt err=<span
class=GramE>file.Open(</span>fsSession,fileName,shareMode);<o:p></o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
class=GramE><span lang=EN-US style='font-size:7.5pt;line-height:110%;
mso-ansi-language:EN-US'>if</span></span><span lang=EN-US style='font-size:
7.5pt;line-height:110%;mso-ansi-language:EN-US'> (err==KErrNotFound) // file does not exist - create it<o:p></o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
lang=EN-US style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'>{<o:p></o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
lang=EN-US style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'><span style='mso-spacerun:yes'>    </span><span
class=GramE>err=</span>file.Create(fsSession,fileName,shareMode);<o:p></o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
lang=EN-US style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'>}<o:p></o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
lang=EN-US style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'><o:p>&nbsp;</o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
lang=EN-US style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'>// do read and write operations<o:p></o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
lang=EN-US style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'><o:p>&nbsp;</o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
class=GramE><span lang=EN-US style='font-size:7.5pt;line-height:110%;
mso-ansi-language:EN-US'>file.Close(</span></span><span lang=EN-US
style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'>);<o:p></o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
class=GramE><span lang=EN-US style='font-size:7.5pt;line-height:110%;
mso-ansi-language:EN-US'>fileSession.Close(</span></span><span lang=EN-US
style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'>);<o:p></o:p></span></pre></div>

<p class=MsoNormal><span lang=EN-US style='mso-ansi-language:EN-US'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='mso-ansi-language:EN-US'>The RFs
class defines the file server session. Any file operation in controlled by an
instance of this class. After this instance is created, the file can be opened
over the RFile class. The RFile class contains all file IO operations. By using
these two classes to extend the <b style='mso-bidi-font-weight:normal'>sqlite3_file</b>
structure, the SQLite file IO operations can use the class instances of RFs and
RFile as shown in the struct below.<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='mso-ansi-language:EN-US'><o:p>&nbsp;</o:p></span></p>

<div style='mso-element:para-border-div;border:solid #CCCCCC 1.0pt;mso-border-alt:
solid #CCCCCC .75pt;padding:3.0pt 3.0pt 3.0pt 3.0pt;background:#EEEEEE;
margin-left:3.4pt;margin-right:3.4pt'><pre style='margin-top:3.4pt;margin-right:
0cm;margin-bottom:3.4pt;margin-left:0cm;text-align:justify;line-height:110%;
background:#EEEEEE;border:none;mso-border-alt:solid #CCCCCC .75pt;padding:0cm;
mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span class=GramE><span lang=EN-US
style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'>struct</span></span><span
lang=EN-US style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'> symbianFile {<o:p></o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
lang=EN-US style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'><span style='mso-spacerun:yes'>  </span><span
class=GramE>int</span> isOpen;<o:p></o:p></span></pre><pre style='margin-top:
3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;text-align:justify;
line-height:110%;background:#EEEEEE;border:none;mso-border-alt:solid #CCCCCC .75pt;
padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span lang=EN-US
style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'><span style='mso-spacerun:yes'>  </span><span
class=GramE>unsigned</span> char locktype; /* Type of lock currently held on this file */<o:p></o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
lang=EN-US style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'><span style='mso-spacerun:yes'>  </span><span
class=GramE>short</span> sharedLockByte;<span style='mso-spacerun:yes'>   </span>/* Randomly chosen byte used as a shared lock */<o:p></o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
lang=EN-US style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'><span style='mso-spacerun:yes'>  </span><span
class=GramE>char</span> fileName[512];<o:p></o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
lang=EN-US style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'><span style='mso-spacerun:yes'>  </span>RFs session;<o:p></o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
lang=EN-US style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'><span style='mso-spacerun:yes'>  </span>RFile file;<o:p></o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
lang=EN-US style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'>};<o:p></o:p></span></pre></div>

<p class=MsoNormal><span lang=EN-US style='mso-ansi-language:EN-US'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='mso-ansi-language:EN-US'>Finally all
the methods that SQLite needs to handle file operations must be rewritten by
using this structure and the RFile methods. The following example shows how to
close an open file and the file server session.<o:p></o:p></span></p>

<div style='mso-element:para-border-div;border:solid #CCCCCC 1.0pt;mso-border-alt:
solid #CCCCCC .75pt;padding:3.0pt 3.0pt 3.0pt 3.0pt;background:#EEEEEE;
margin-left:3.4pt;margin-right:3.4pt'><pre style='margin-top:3.4pt;margin-right:
0cm;margin-bottom:3.4pt;margin-left:0cm;text-align:justify;line-height:110%;
background:#EEEEEE;border:none;mso-border-alt:solid #CCCCCC .75pt;padding:0cm;
mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span class=GramE><span lang=EN-US
style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'>int</span></span><span
lang=EN-US style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'> Close(sqlite3_file *id){<o:p></o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
lang=EN-US style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'><span style='mso-spacerun:yes'>  </span><span
class=GramE>int</span> rc, cnt = 0;<o:p></o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
lang=EN-US style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'><span style='mso-spacerun:yes'>  </span><span
class=GramE>symbianFile</span> *pFile = (symbianFile*)id;<o:p></o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
lang=EN-US style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'><span style='mso-spacerun:yes'>  </span><span
class=GramE>pFile</span>-&gt;file.Close();<o:p></o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
lang=EN-US style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'><span style='mso-spacerun:yes'>  </span><span
class=GramE>pFile</span>-&gt;session.Close();<o:p></o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
lang=EN-US style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'><span style='mso-spacerun:yes'>  </span><span
class=GramE>return</span> SQLITE_OK;<o:p></o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
lang=EN-US style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'>}<o:p></o:p></span></pre></div>

<p class=MsoNormal><span lang=EN-US style='mso-ansi-language:EN-US'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='mso-ansi-language:EN-US'>The other file
IO operations are similar to the <b style='mso-bidi-font-weight:normal'>close</b>
method. The <b style='mso-bidi-font-weight:normal'>open</b> method of RFile expects
a Unicode string that contains the name of the database file. A conversion of
the ASCII format to Unicode must be done before calling the <b
style='mso-bidi-font-weight:normal'>open</b> method. For such a conversion the <b
style='mso-bidi-font-weight:normal'>CCnvCharacterSetConverter</b> class can be
used. This class needs the file server session handle and the string to convert
to Unicode. The following example shows the converter method used in SQLite.<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='mso-ansi-language:EN-US'><o:p>&nbsp;</o:p></span></p>

<div style='mso-element:para-border-div;border:solid #CCCCCC 1.0pt;mso-border-alt:
solid #CCCCCC .75pt;padding:3.0pt 3.0pt 3.0pt 3.0pt;background:#EEEEEE;
margin-left:3.4pt;margin-right:3.4pt'><pre style='margin-top:3.4pt;margin-right:
0cm;margin-bottom:3.4pt;margin-left:0cm;text-align:justify;line-height:110%;
background:#EEEEEE;border:none;mso-border-alt:solid #CCCCCC .75pt;padding:0cm;
mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span class=GramE><span lang=EN-US
style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'>void</span></span><span
lang=EN-US style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'> ConvertToUnicode(RFs session, TDes16&amp; aUnicode, const char *str)<o:p></o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
lang=EN-US style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'>{<o:p></o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
lang=EN-US style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'><span style='mso-spacerun:yes'>  </span>CCnvCharacterSetConverter *converter = CCnvCharacterSetConverter::<span
class=GramE>NewL(</span>);<o:p></o:p></span></pre><pre style='margin-top:3.4pt;
margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;text-align:justify;
line-height:110%;background:#EEEEEE;border:none;mso-border-alt:solid #CCCCCC .75pt;
padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span lang=EN-US
style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'><span style='mso-spacerun:yes'>  </span><span
class=GramE>converter</span>-&gt;PrepareToConvertToOrFromL(KCharacterSetIdentifierUtf8, session);<o:p></o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
lang=EN-US style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'><span style='mso-spacerun:yes'>  </span><o:p></o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
lang=EN-US style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'><span style='mso-spacerun:yes'>  </span>TPtrC8 <span
class=GramE>ptr(</span>(const unsigned char*)str);<o:p></o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
lang=EN-US style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'><o:p>&nbsp;</o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
lang=EN-US style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'><span style='mso-spacerun:yes'>  </span><span
class=GramE>int</span> state = CCnvCharacterSetConverter::KStateDefault;<o:p></o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
lang=EN-US style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'><span style='mso-spacerun:yes'>  </span><span
class=GramE>converter</span>-&gt;ConvertToUnicode(aUnicode, ptr, state);<o:p></o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
lang=EN-US style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'>}<o:p></o:p></span></pre></div>

<p class=MsoNormal><span lang=EN-US style='mso-ansi-language:EN-US'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='mso-ansi-language:EN-US'>After
rewriting all operations used by SQLite to use the RFile class, in the os_symbian.cpp
<span class=GramE>file ,</span> the project can be compiled by the Symbian C
compiler (which has been included in the build chain by installing the Carbide
plug in for Visual Studio) and a Symbian Library is created that can be used on
a S60 device as a database. This library takes the form of a native Symbian DLL
called sqlite.dll.<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='mso-ansi-language:EN-US'>The
database file that the sqlite.dll generates can be used by any other
implementation of SQLite. So it will be possible to transfer all stored data
from a smart device to a database server in a company network.<o:p></o:p></span></p>

<p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span lang=EN-US
style='mso-ansi-language:EN-US'>Compiling sqlite.dll from the SQLiteS60 project<o:p></o:p></span></b></p>

<p class=MsoNormal><span lang=EN-US style='mso-ansi-language:EN-US'>It is
possible to compile the sqlite.dll using Visual Studio with the Carbide plugin.
<o:p></o:p></span></p>

<p class=MsoNormal><span class=GramE><span lang=EN-US style='mso-ansi-language:
EN-US'>Another<span style='mso-spacerun:yes'>  </span>easier</span></span><span
lang=EN-US style='mso-ansi-language:EN-US'> possibility is to type the
following command lines in the ‘group’ directory of the SqliteS60 folder.<span
style='mso-spacerun:yes'>  </span><o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='mso-ansi-language:EN-US'>To compile
for the S60 device (GCCE compiler) and as a release version:<b
style='mso-bidi-font-weight:normal'><o:p></o:p></b></span></p>

<div style='mso-element:para-border-div;border:solid #CCCCCC 1.0pt;mso-border-alt:
solid #CCCCCC .75pt;padding:3.0pt 3.0pt 3.0pt 3.0pt;background:#EEEEEE;
margin-left:0cm;margin-right:3.4pt'><pre style='margin-top:3.4pt;margin-right:
0cm;margin-bottom:3.4pt;margin-left:0cm;text-align:justify;line-height:110%;
background:#EEEEEE;border:none;mso-border-alt:solid #CCCCCC .75pt;padding:0cm;
mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span lang=EN-US style='font-size:
7.5pt;line-height:110%;mso-ansi-language:EN-US'>&gt; Bldmake bldfiles [enter]<o:p></o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><b
style='mso-bidi-font-weight:normal'><span lang=EN-US style='font-size:7.5pt;
line-height:110%;mso-ansi-language:EN-US'><o:p>&nbsp;</o:p></span></b></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><b
style='mso-bidi-font-weight:normal'><span lang=EN-US style='font-size:7.5pt;
line-height:110%;mso-ansi-language:EN-US'>&gt; <span class=GramE>abld</span> build gcce urel<o:p></o:p></span></b></pre></div>

<p class=MsoNormal><span lang=EN-US style='mso-ansi-language:EN-US'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='mso-ansi-language:EN-US'>For the
emulator with debug information:<span style='mso-spacerun:yes'>  </span><o:p></o:p></span></p>

<div style='mso-element:para-border-div;border:solid #CCCCCC 1.0pt;mso-border-alt:
solid #CCCCCC .75pt;padding:3.0pt 3.0pt 3.0pt 3.0pt;background:#EEEEEE;
margin-left:0cm;margin-right:3.4pt'><pre style='margin-top:3.4pt;margin-right:
0cm;margin-bottom:3.4pt;margin-left:0cm;text-align:justify;line-height:110%;
background:#EEEEEE;border:none;mso-border-alt:solid #CCCCCC .75pt;padding:0cm;
mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span lang=EN-US style='font-size:
7.5pt;line-height:110%;mso-ansi-language:EN-US'>&gt; Bldmake bldfiles [enter]<o:p></o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
lang=EN-US style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'><o:p>&nbsp;</o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
lang=EN-US style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'>&gt; <span
class=GramE>abld</span> build winscw udeb [enter]<o:p></o:p></span></pre></div>

<p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span lang=EN-US
style='mso-ansi-language:EN-US'><o:p>&nbsp;</o:p></span></b></p>

<p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span lang=EN-US
style='mso-ansi-language:EN-US'>Note:</span></b><span lang=EN-US
style='mso-ansi-language:EN-US'> <span style='mso-spacerun:yes'> </span>No
spaces must be present in the directory path where the SQliteS60 project is
located. Also, the command line console must be run with “Admin” privileges.<o:p></o:p></span></p>

<p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span lang=EN-US
style='mso-ansi-language:EN-US'><br>
Writing an ADO.NET Provider using Net60 Compact Framework 1.0<o:p></o:p></span></b></p>

<p class=MsoNormal><span lang=EN-US style='mso-ansi-language:EN-US'>After the
successful conversion of the SQLite code to the S60 platform, the development
of an ADO.NET provider for Net60 that uses the SQLite library for Symbian OS can
be started. As there are some existing implementations of an ADO.NET provider
for the .NET Framework, this development did not have to start at the grass
roots level. Mono, for example, contains such an implementation <span
class=GramE>( </span><a href="http://www.mono-project.com">www.mono-project.com</a>
). This could be used as a base for the ADO.NET provider for Net60.<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='mso-ansi-language:EN-US'>The .NET Compact
Framework 1.0 only provides the basic interfaces like IDbConnection,
IDbCommand, <span class=GramE>IDbParameter</span> and so on. Other
functionality such as the base classes in the System.Data.Common namespace <span
class=GramE>are</span> not provided. Also the DbDataAdapter base class is not implemented.
So this implementation cannot support DataAdapters, however with these basic
interfaces it is possible to develop an ADO.NET Provider that supports all
basic features of the .NET Framework 1.1 for the desktop.<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='mso-ansi-language:EN-US'>The
SQLiteS60 project results in a native Symbian DLL, sqlite.dll, which must be
used from within managed .NET code. Net60, and the .NET Compact Framework,
supports interoperability between managed and unmanaged code through a
mechanism called P/Invoke.<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='mso-ansi-language:EN-US'>The diagram
below shows the interaction between the various components of the solution:<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='mso-ansi-language:EN-US'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><!--[if gte vml 1]><v:shapetype id="_x0000_t202"
 coordsize="21600,21600" o:spt="202" path="m,l,21600r21600,l21600,xe">
 <v:stroke joinstyle="miter"/>
 <v:path gradientshapeok="t" o:connecttype="rect"/>
</v:shapetype><v:shape id="_x0000_s1027" type="#_x0000_t202" style='position:absolute;
 margin-left:62.95pt;margin-top:62.25pt;width:285.5pt;height:107.65pt;
 z-index:1;mso-width-relative:margin;mso-height-relative:margin'>
 <v:textbox style='mso-next-textbox:#_x0000_s1027'>
  <![if !mso]>
  <table cellpadding=0 cellspacing=0 width="100%">
   <tr>
    <td><![endif]>
    <div>
    <p class=MsoNormal align=center style='text-align:center'><span lang=EN-US
    style='mso-ansi-language:EN-US'><o:p>&nbsp;</o:p></span></p>
    <p class=MsoNormal align=center style='text-align:center'><span lang=EN-US
    style='font-size:14.0pt;mso-bidi-font-size:11.0pt;line-height:115%;
    mso-ansi-language:EN-US'>Net60<o:p></o:p></span></p>
    </div>
    <![if !mso]></td>
   </tr>
  </table>
  <![endif]></v:textbox>
</v:shape><v:shape id="_x0000_s1030" type="#_x0000_t202" style='position:absolute;
 margin-left:215.8pt;margin-top:126.3pt;width:132.85pt;height:43.75pt;
 z-index:2;mso-width-relative:margin;mso-height-relative:margin'>
 <v:textbox style='mso-next-textbox:#_x0000_s1030'>
  <![if !mso]>
  <table cellpadding=0 cellspacing=0 width="100%">
   <tr>
    <td><![endif]>
    <div>
    <p class=MsoNormal align=center style='text-align:center'><span lang=EN-US
    style='mso-ansi-language:EN-US'>SQLiteS60.dll<o:p></o:p></span></p>
    </div>
    <![if !mso]></td>
   </tr>
  </table>
  <![endif]></v:textbox>
</v:shape><v:shape id="_x0000_s1026" type="#_x0000_t202" style='position:absolute;
 margin-left:62.95pt;margin-top:173.55pt;width:287.05pt;height:33.45pt;
 z-index:3;mso-height-percent:200;mso-height-percent:200;mso-width-relative:margin;
 mso-height-relative:margin'>
 <v:textbox style='mso-fit-shape-to-text:t'>
  <![if !mso]>
  <table cellpadding=0 cellspacing=0 width="100%">
   <tr>
    <td><![endif]>
    <div>
    <p class=MsoNormal align=center style='text-align:center'>Symbian OS</p>
    </div>
    <![if !mso]></td>
   </tr>
  </table>
  <![endif]></v:textbox>
</v:shape><v:shape id="_x0000_s1028" type="#_x0000_t202" style='position:absolute;
 margin-left:62.95pt;margin-top:24.15pt;width:285.7pt;height:33.45pt;z-index:4;
 mso-height-percent:200;mso-height-percent:200;mso-width-relative:margin;
 mso-height-relative:margin'>
 <v:textbox style='mso-next-textbox:#_x0000_s1028;mso-fit-shape-to-text:t'>
  <![if !mso]>
  <table cellpadding=0 cellspacing=0 width="100%">
   <tr>
    <td><![endif]>
    <div>
    <p class=MsoNormal align=center style='text-align:center'><span lang=EN-US
    style='mso-ansi-language:EN-US'>.NET CF 1.0 App using SQLite<o:p></o:p></span></p>
    </div>
    <![if !mso]></td>
   </tr>
  </table>
  <![endif]></v:textbox>
</v:shape><v:shape id="_x0000_s1029" type="#_x0000_t202" style='position:absolute;
 margin-left:278.25pt;margin-top:149.15pt;width:70.2pt;height:20.9pt;z-index:5;
 mso-width-relative:margin;mso-height-relative:margin'>
 <v:textbox>
  <![if !mso]>
  <table cellpadding=0 cellspacing=0 width="100%">
   <tr>
    <td><![endif]>
    <div>
    <p class=MsoNormal align=center style='text-align:center'><span lang=EN-US
    style='mso-ansi-language:EN-US'>PIPS <o:p></o:p></span></p>
    </div>
    <![if !mso]></td>
   </tr>
  </table>
  <![endif]></v:textbox>
</v:shape><v:shape id="_x0000_s1031" type="#_x0000_t202" style='position:absolute;
 margin-left:246.9pt;margin-top:62.25pt;width:101.75pt;height:38.55pt;
 z-index:6;mso-width-relative:margin;mso-height-relative:margin'>
 <v:textbox style='mso-next-textbox:#_x0000_s1031'>
  <![if !mso]>
  <table cellpadding=0 cellspacing=0 width="100%">
   <tr>
    <td><![endif]>
    <div>
    <p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;mso-bidi-font-size:
    11.0pt;line-height:115%;mso-ansi-language:EN-US'>System.Data.SQLiteClient.dll</span><span
    style='font-size:10.0pt;mso-bidi-font-size:11.0pt;line-height:115%'><o:p></o:p></span></p>
    </div>
    <![if !mso]></td>
   </tr>
  </table>
  <![endif]></v:textbox>
</v:shape><v:shape id="_x0000_s1034" type="#_x0000_t202" style='position:absolute;
 margin-left:355.45pt;margin-top:67.25pt;width:118.1pt;height:33.55pt;
 z-index:7;mso-width-relative:margin;mso-height-relative:margin' filled="f"
 stroked="f">
 <v:textbox style='mso-next-textbox:#_x0000_s1034'>
  <![if !mso]>
  <table cellpadding=0 cellspacing=0 width="100%">
   <tr>
    <td><![endif]>
    <div>
    <p class=MsoNormal align=center style='text-align:center'><span lang=EN-US
    style='font-size:9.0pt;mso-bidi-font-size:11.0pt;line-height:115%;
    mso-ansi-language:EN-US'>P/Invoke from managed code to native Symbian DLL</span><span
    lang=EN-US style='mso-ansi-language:EN-US'><o:p></o:p></span></p>
    </div>
    <![if !mso]></td>
   </tr>
  </table>
  <![endif]></v:textbox>
</v:shape><v:shape id="_x0000_s1037" type="#_x0000_t202" style='position:absolute;
 margin-left:308.15pt;margin-top:98.15pt;width:39.7pt;height:15.65pt;z-index:8'
 strokecolor="white">
 <v:textbox>
  <![if !mso]>
  <table cellpadding=0 cellspacing=0 width="100%">
   <tr>
    <td><![endif]>
    <div>
    <p class=MsoNormal><o:p>&nbsp;</o:p></p>
    </div>
    <![if !mso]></td>
   </tr>
  </table>
  <![endif]></v:textbox>
</v:shape><v:shapetype id="_x0000_t32" coordsize="21600,21600" o:spt="32"
 o:oned="t" path="m,l21600,21600e" filled="f">
 <v:path arrowok="t" fillok="f" o:connecttype="none"/>
 <o:lock v:ext="edit" shapetype="t"/>
</v:shapetype><v:shape id="_x0000_s1036" type="#_x0000_t32" style='position:absolute;
 margin-left:307.2pt;margin-top:100.9pt;width:0;height:25.35pt;z-index:9'
 o:connectortype="straight"/><v:shape id="_x0000_s1033" type="#_x0000_t32"
 style='position:absolute;margin-left:335.7pt;margin-top:90.2pt;width:25.95pt;
 height:23.6pt;flip:x;z-index:10' o:connectortype="straight">
 <v:stroke dashstyle="1 1" endarrow="block" endcap="round"/>
</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout'>

<table cellpadding=0 cellspacing=0 align=left>
 <tr>
  <td width=83 height=31></td>
 </tr>
 <tr>
  <td></td>
  <td><img width=552 height=250 src="sqlite_port-Dateien/image001.gif" v:shapes="_x0000_s1027 _x0000_s1030 _x0000_s1026 _x0000_s1028 _x0000_s1029 _x0000_s1031 _x0000_s1034 _x0000_s1037 _x0000_s1036 _x0000_s1033"></td>
 </tr>
</table>

</span><![endif]><span lang=EN-US style='mso-ansi-language:EN-US'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='mso-ansi-language:EN-US'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='mso-ansi-language:EN-US'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='mso-ansi-language:EN-US'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='mso-ansi-language:EN-US'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='mso-ansi-language:EN-US'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='mso-ansi-language:EN-US'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='mso-ansi-language:EN-US'><o:p>&nbsp;</o:p></span></p>

<br style='mso-ignore:vglayout' clear=ALL>

<p class=MsoNormal><span lang=EN-US style='mso-ansi-language:EN-US'>The native SQLite
methods, such as <b style='mso-bidi-font-weight:normal'>libversion</b>, <b
style='mso-bidi-font-weight:normal'>open</b> etc., are called using the
P/Invoke mechanism in the .NET code. To do this, the entry point of the corresponding
method in the SQLite library must be known. Symbian has a specific entry point
model. All methods are exported from a library by ordinal numbers instead of
method names. The relation of method name and export number can be found in the
generated .DEF file of the SQLite.dll or by using a dump tool.<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='mso-ansi-language:EN-US'>The
following example shows how a native SQLite method is defined in .NET. The <b
style='mso-bidi-font-weight:normal'>DLLImort</b> attribute defines the library
name and the entry points were the method is located in the library. The CallingConvention
defines the type of data exchange between the unmanaged SQLite and the managed
.NET code. <o:p></o:p></span></p>

<div style='mso-element:para-border-div;border:solid #CCCCCC 1.0pt;mso-border-alt:
solid #CCCCCC .75pt;padding:3.0pt 3.0pt 3.0pt 3.0pt;background:#EEEEEE;
margin-left:3.4pt;margin-right:3.4pt'><pre style='margin-top:3.4pt;margin-right:
0cm;margin-bottom:3.4pt;margin-left:0cm;text-align:justify;line-height:110%;
background:#EEEEEE;border:none;mso-border-alt:solid #CCCCCC .75pt;padding:0cm;
mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span lang=EN-US style='font-size:
7.5pt;line-height:110%;mso-ansi-language:EN-US'>[<span class=GramE>DllImport(</span>&quot;sqlite.dll&quot;, EntryPoint = &quot;#86&quot;, CallingConvention = _Convention)]<o:p></o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
class=GramE><span lang=EN-US style='font-size:7.5pt;line-height:110%;
mso-ansi-language:EN-US'>public</span></span><span lang=EN-US style='font-size:
7.5pt;line-height:110%;mso-ansi-language:EN-US'> static extern SQLiteCode sqlite3_open(IntPtr filename, out IntPtr db);<o:p></o:p></span></pre></div>

<p class=MsoNormal><span lang=EN-US style='mso-ansi-language:EN-US'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='mso-ansi-language:EN-US'>Based on
the existing implementations of SQLite for .NET it was easy to develop an
ADO.NET Provider that runs on the Compact Framework. To test the behavior of a
.NET application, this implementation provides a P/Invoke call for each <b
style='mso-bidi-font-weight:normal'>sqlite3_</b> method call to the Symbian
version contained in the sqlite.dll. <span class=GramE>These</span> P/Invokes
are performed in the SymbianMethods.cs file in the managed System.Data.SQLiteClient.dll
extension class.<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='mso-ansi-language:EN-US'>Interestingly,
all applications are also executable on the smartphone device emulator. To
change between the emulator and device, only the emulator flag in the
connection string must be set to true or false. For the emulator the Windows
version of SQLite is required <span class=GramE>( </span><a
href="http://www.sqlite.org">www.sqlite.org</a> ), the emulator flag links the
P/Invoke call to that library.<o:p></o:p></span></p>

<p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span lang=EN-US
style='mso-ansi-language:EN-US'>Deploying SQLiteS60 to the device<o:p></o:p></span></b></p>

<p class=MsoNormal><span lang=EN-US style='mso-ansi-language:EN-US'>In order to
deploy the SQLite database to device, the sqlite.dll must be deployed to the \sys\bin
directory and the System.Data.SQLiteClient.dll to the Red Five Labs GAC
repository on the device which is \Resource\RedFiveLabs\Gac. The sqlite.pkg is
used together with the Symbian makesis.exe to create an installable SQLite.SIS
file which deploys these two libraries to their respective destinations. If the
sqlite.dll and System.Data.SQLiteClient.dll are placed in the same directory as
the sqlite.pcg file, an example command line to generate the Sqlite.sis is <o:p></o:p></span></p>

<div style='mso-element:para-border-div;border:solid #CCCCCC 1.0pt;mso-border-alt:
solid #CCCCCC .75pt;padding:3.0pt 3.0pt 3.0pt 3.0pt;background:#EEEEEE;
margin-left:3.4pt;margin-right:3.4pt'><pre style='margin-top:3.4pt;margin-right:
0cm;margin-bottom:3.4pt;margin-left:0cm;text-align:justify;line-height:110%;
background:#EEEEEE;border:none;mso-border-alt:solid #CCCCCC .75pt;padding:0cm;
mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span lang=EN-US style='font-size:
7.5pt;line-height:110%;mso-ansi-language:EN-US'>C:\temp\sis&gt;makesis sqlite.pkg<o:p></o:p></span></pre></div>

<p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span lang=EN-US
style='mso-ansi-language:EN-US'><o:p>&nbsp;</o:p></span></b></p>

<p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span lang=EN-US
style='mso-ansi-language:EN-US'>Using SQLite<o:p></o:p></span></b></p>

<p class=MsoNormal><span lang=EN-US style='mso-ansi-language:EN-US'>The
implementation for Compact Framework 1.0 contains the SQLiteConnection class
that handles the connection to the sqlite database and creates new
SQLiteCommand instances. With these instances database queries can be sent to
and the results received from the database. As a result a SQLiteDataReader set instance
can be returned. This class provides the functionality to step through the rows
of the result sets. Transactional processing can be performed by using the
SQLiteTransaction class. An instance for that class can be created over the
SQLiteConnection instance. Any SQLiteCommand can contain one or more SQL statements.
These statements are handled in the SQLiteStatement class. Each statement is
represented by an instance of that class. This class calls the native SQLite
methods to perform the database operations.<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='mso-ansi-language:EN-US'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='mso-ansi-language:EN-US'>The
following example shows how to open a database by using the SQLiteConnection
class.<o:p></o:p></span></p>

<div style='mso-element:para-border-div;border:solid #CCCCCC 1.0pt;mso-border-alt:
solid #CCCCCC .75pt;padding:3.0pt 3.0pt 3.0pt 3.0pt;background:#EEEEEE;
margin-left:3.4pt;margin-right:3.4pt'><pre style='margin-top:3.4pt;margin-right:
0cm;margin-bottom:3.4pt;margin-left:0cm;text-align:justify;line-height:110%;
background:#EEEEEE;border:none;mso-border-alt:solid #CCCCCC .75pt;padding:0cm;
mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span lang=EN-US style='font-size:
7.5pt;line-height:110%;mso-ansi-language:EN-US'>SQLiteConnection _Connection = new <span
class=GramE>SQLiteConnection(</span>&quot;Data Source=test1.db;NewDatabase=True;<o:p></o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
lang=EN-US style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'><span
style='mso-tab-count:5'>                                                  </span>Synchronous=Off<span
class=GramE>;Encoding</span>=UTF8;Emulator=true&quot;);<o:p></o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
lang=EN-US style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'>_<span
class=GramE>Connection.Open(</span>);<o:p></o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
lang=EN-US style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'><o:p>&nbsp;</o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
lang=EN-US style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'>SQLiteCommand cmd = _<span
class=GramE>Connection.CreateCommand(</span>);<o:p></o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
lang=EN-US style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'>cmd.CommandText = &quot;select id, orderid, article from orderdetails where OrderId = @OrderId&quot;;<o:p></o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
class=GramE><span lang=EN-US style='font-size:7.5pt;line-height:110%;
mso-ansi-language:EN-US'>cmd.Parameters.Add(</span></span><span lang=EN-US
style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'>&quot;@OrderId&quot;, DbType.Int32).Value = orderId;<o:p></o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
lang=EN-US style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'><o:p>&nbsp;</o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
lang=EN-US style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'>DataTable table = new <span
class=GramE>DataTable(</span>);<o:p></o:p></span></pre><pre style='margin-top:
3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;text-align:justify;
line-height:110%;background:#EEEEEE;border:none;mso-border-alt:solid #CCCCCC .75pt;
padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span lang=EN-US
style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'><o:p>&nbsp;</o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
class=GramE><span lang=EN-US style='font-size:7.5pt;line-height:110%;
mso-ansi-language:EN-US'>table.Columns.Add(</span></span><span lang=EN-US
style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'>&quot;Id&quot;);<o:p></o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
class=GramE><span lang=EN-US style='font-size:7.5pt;line-height:110%;
mso-ansi-language:EN-US'>table.Columns.Add(</span></span><span lang=EN-US
style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'>&quot;OrderId&quot;);<o:p></o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
class=GramE><span lang=EN-US style='font-size:7.5pt;line-height:110%;
mso-ansi-language:EN-US'>table.Columns.Add(</span></span><span lang=EN-US
style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'>&quot;Article&quot;);<o:p></o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
lang=EN-US style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'><o:p>&nbsp;</o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
lang=EN-US style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'>SQLiteDataReader reader = <span
class=GramE>cmd.ExecuteReader(</span>);<o:p></o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
lang=EN-US style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'><o:p>&nbsp;</o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
class=GramE><span lang=EN-US style='font-size:7.5pt;line-height:110%;
mso-ansi-language:EN-US'>while</span></span><span lang=EN-US style='font-size:
7.5pt;line-height:110%;mso-ansi-language:EN-US'> (reader.Read())<o:p></o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
lang=EN-US style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'>{<o:p></o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
lang=EN-US style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'><span style='mso-spacerun:yes'>    </span>DataRow row = <span
class=GramE>table.NewRow(</span>);<o:p></o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
lang=EN-US style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'><span style='mso-spacerun:yes'>    </span><span
class=GramE>row[</span>&quot;Id&quot;] = reader.GetInt32(0);<o:p></o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
lang=EN-US style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'><span style='mso-spacerun:yes'>    </span><span
class=GramE>row[</span>&quot;OrderId&quot;] = reader.GetInt32(1);<o:p></o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
lang=EN-US style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'><span style='mso-spacerun:yes'>    </span><span
class=GramE>row[</span>&quot;Article&quot;] = reader.GetString(2);<o:p></o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
lang=EN-US style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'><span style='mso-spacerun:yes'>    </span><span
class=GramE>table.Rows.Add(</span>row);<o:p></o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
lang=EN-US style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'>}<o:p></o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
lang=EN-US style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'><o:p>&nbsp;</o:p></span></pre><pre
style='margin-top:3.4pt;margin-right:0cm;margin-bottom:3.4pt;margin-left:0cm;
text-align:justify;line-height:110%;background:#EEEEEE;border:none;mso-border-alt:
solid #CCCCCC .75pt;padding:0cm;mso-padding-alt:3.0pt 3.0pt 3.0pt 3.0pt'><span
lang=EN-US style='font-size:7.5pt;line-height:110%;mso-ansi-language:EN-US'>dataGridView.DataSource = table;<o:p></o:p></span></pre></div>

<p class=MsoNormal><span lang=EN-US style='mso-ansi-language:EN-US'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='mso-ansi-language:EN-US'>The
SQLiteCommand instance contains a select statement that loads the orders with
the specified OrderId. The result set of this query is then filled in a data
table that is databinded to <span class=GramE>an</span> dataGridView that
displays the result. An example application is provided in the form of
SqlMobileTest project.<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='mso-ansi-language:EN-US'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span lang=EN-US
style='mso-ansi-language:EN-US'>Conclusion<o:p></o:p></span></b></p>

<p class=MsoNormal><span lang=EN-US style='mso-ansi-language:EN-US'>With this
conversion of SQLite, it is now possible to create .NET applications with database
support for the great family of Symbian S60 smartphones. With the upcoming release
of version 9.4 the Symbian OS provides an implementation of SQLite but this
version is not released yet and only new devices will get this database
support. With this conversion all S60 3<sup>rd</sup> Edition devices will be able
to use SQLite. Together with the Red Five Labs Net60 implementation of the .NET
Compact Framework it is possible to run .NET applications on Symbian OS. Together
with the ADO.NET provider for this SQLite implementation these applications can
use database functionality like any other application on a personal computer.<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='mso-ansi-language:EN-US'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span lang=EN-US
style='mso-ansi-language:EN-US'>Tools Used for this project<o:p></o:p></span></b></p>

<p class=MsoNormal><span lang=EN-US style='mso-ansi-language:EN-US'>Microsoft
Visual Studio 2005 together with the Carbide.vs Plugin (http://www.forum.nokia.com/main/resources/tools_and_sdks/carbide/<span
class=GramE>index.html )</span> were used in this project.<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='mso-ansi-language:EN-US'><span
style='mso-spacerun:yes'> </span>Additionally the S60 SDK and the Symbian PIPS
SDK are required to compile the project. With the Carbide plug in it is
possible to develop native Symbian applications in the Visual Studio IDE and to
debug on the S60 emulator. To convert a S60 project (f.e. a BLD or MMP file) to
a Visual Studio project, the Import Wizard of the carbide plugin could be used.
It is located under the File menu. The user only has to select the s60 project
and to assign an S60 SDK (f.e. maintenance release or FP1/FP2). The rest of the
transformation does the wizard. So it is easy to convert existing projects to
use the carbide plugin.<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='mso-ansi-language:EN-US'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='mso-ansi-language:EN-US'><o:p>&nbsp;</o:p></span></p>

</div>

</body>

</html>