<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Geospecialling &#187; ODP.NET</title>
	<atom:link href="http://www.geospecialling.com/index.php/tag/odp-net/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.geospecialling.com</link>
	<description>Being a (G)IS Developer...</description>
	<lastBuildDate>Thu, 26 Jan 2012 04:11:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>OracleCommand and parameterized update statements</title>
		<link>http://www.geospecialling.com/index.php/2011/11/oraclecommand-and-parameterized-update-statements/</link>
		<comments>http://www.geospecialling.com/index.php/2011/11/oraclecommand-and-parameterized-update-statements/#comments</comments>
		<pubDate>Tue, 08 Nov 2011 22:07:53 +0000</pubDate>
		<dc:creator>Darrin Maidlow</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[RADE]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[ODP.NET]]></category>
		<category><![CDATA[Parameterized Queries]]></category>

		<guid isPermaLink="false">http://www.geospecialling.com/index.php/2011/11/oraclecommand-and-parameterized-update-statements/</guid>
		<description><![CDATA[This week I encountered an irritating situation with Oracle while working on code in the RADE application logic.&#160; In a nutshell I am building dynamically created parameterized insert and update statements based on the RADE metadata and the values entered by the user.&#160; The first call InsertNewRecord works perfectly.&#160; The next call UpdateExistingRecord however was [...]]]></description>
			<content:encoded><![CDATA[<p>This week I encountered an irritating situation with Oracle while working on code in the <a title="RADE" href="http://www.geospecialling.com/index.php/2008/06/rade-build-custom-web-applications-without-writing-custom-code/" rel="tag" target="_blank">RADE</a> application logic.&#160; In a nutshell I am building dynamically created parameterized insert and update statements based on the RADE metadata and the values entered by the user.&#160; The first call InsertNewRecord works perfectly.&#160; The next call UpdateExistingRecord however was not.&#160; The parameterized SQL was being created.&#160; The parameters were being created and assigned to the <a title="DbCommand" href="http://msdn.microsoft.com/en-us/library/system.data.common.dbcommand.aspx" rel="tag" target="_blank">DbCommand</a>.&#160; The ExecuteNonQuery() call was executing without returning an error.&#160; Oracle just would not update.&#160;&#160; Even more frustrating – this “just worked” in SQL server.</p>
<h2>What were the differences?</h2>
<p>The basic logic for insert was this (parts omitted because you probably just don’t care):</p>
<ol>
<li>Get table metadata </li>
<li>Loop through fields in table </li>
<li>for each field retrieve the value from the UI </li>
<li>Add field to parameterized SQL statement with placeholder </li>
<li>Create new parameter with appropriate name and value.&#160;&#160; Add parameter to collection </li>
<li>Loop through parameters in the collection and add to the DbCommand </li>
<li>Finally execute the parameterized SQL statement </li>
</ol>
<p>As I mentioned this worked great.&#160; Fields were inserted and there was much rejoicing.</p>
<p>The logic for an update was similar but there was one big difference:</p>
<ol>
<li>Get Table </li>
<li>Loop through fields in table </li>
<li>for each field retrieve the value from the UI </li>
<li>If the field is a key add the placeholder to the where condition, otherwise add the field name and value to the update fields part of the SQL </li>
<li>Create new parameter with appropriate name and value.&#160; Add parameter to collection </li>
<li>Loop through parameters in the collection and add to the DbCommand </li>
<li>Finally execute the parameterized SQL statement. </li>
</ol>
<p>The branch in step 4 and the if statement ended up causing the problem.</p>
<h2>The Problem</h2>
<p><a title="OracleCommand" href="http://msdn.microsoft.com/en-us/library/system.data.oracleclient.oraclecommand(v=VS.100).aspx" rel="tag" target="_blank">OracleCommand</a> defaults to “bind by order” – making the order in which the parameters exist in the SQL statement match the order in which the parameters are added to the OracleCommand. This was happening during the insert because of the structure of an insert statement being so linear. However in the update statement I was building the SQL in a more dynamic way. I was maintaining a list field=value conditions and a separate where condition. In the ended up merging them :</p>
<div>
<div style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px">
<pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060">   1:</span> String parameterizedSQL = <span style="color: #006080">&quot;UPDATE &quot;</span> + table.Name + <span style="color: #006080">&quot; SET &quot;</span> + updateStatement + <span style="color: #006080">&quot; WHERE &quot;</span> + whereStatement;</pre>
</p></div>
</div>
<p>So unless my key field( s) all lined up at the end of the table metadata definitions,&#160; appending that where condition at the end my parameter order got all out of whack in the DbCommand.&#160; So my where condition was actually being set to the wrong value – which could have resulted in the wrong records being updated. Nasty.&#160;&#160; Fortunately this can be resolved.</p>
<h2>The Fix – BindByName=true</h2>
<p>To correct this I had to set the Oracle specific BindByName property to true.&#160; (btw this being the default behavior is just silly.&#160; All the other big data providers default to bind by name and Oracle should too.&#160; That’s a rant for another day though.)&#160;&#160; My initial solution was to check if the command is an OracleCommand and if found do a little casting to set the BindByName property then recast it back to DbCommand before executing the query.&#160; Constructive feedback is always welcome!</p>
<div>
<div style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px">
<pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060">   1:</span> <span style="color: #008000">/// &lt;summary&gt;</span></pre>
<pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060">   2:</span> <span style="color: #008000">/// Execute the parameterized query</span></pre>
<pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060">   3:</span> <span style="color: #008000">/// &lt;/summary&gt;</span></pre>
<pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060">   4:</span> <span style="color: #008000">/// &lt;param name=&quot;conn&quot;&gt;open and active DbConnection&lt;/param&gt;</span></pre>
<pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060">   5:</span> <span style="color: #008000">/// &lt;param name=&quot;trans&quot;&gt;Active DbTransaction&lt;/param&gt;</span></pre>
<pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060">   6:</span> <span style="color: #008000">/// &lt;param name=&quot;parameterizedSQL&quot;&gt;the parameterized SQL&lt;/param&gt;</span></pre>
<pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060">   7:</span> <span style="color: #008000">/// &lt;param name=&quot;paramList&quot;&gt;List of OledDbParameter&lt;/param&gt;</span></pre>
<pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060">   8:</span> <span style="color: #008000">/// &lt;returns&gt;DataTable containing the results&lt;/returns&gt;</span></pre>
<pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060">   9:</span> <span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">void</span> RunParameterizedInsertUpdate(DbConnection conn, DbTransaction trans, String parameterizedSQL, List&lt;DbParameter&gt; paramList)</pre>
<pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060">  10:</span> {</pre>
<pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060">  11:</span>     <span style="color: #008000">//create the db command and set the parameterized SQL as a property</span></pre>
<pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060">  12:</span>     DbCommand command = conn.CreateCommand();</pre>
<pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060">  13:</span>     <span style="color: #0000ff">if</span>(trans != <span style="color: #0000ff">null</span>)</pre>
<pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060">  14:</span>     {</pre>
<pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060">  15:</span>         command.Transaction = trans;</pre>
<pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060">  16:</span>     }</pre>
<pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060">  17:</span>     <span style="color: #008000">//hack attack!  By default, Oracle requires its parameters to be placed into the command</span></pre>
<pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060">  18:</span>     <span style="color: #008000">//in the order the parameters appear in the parameterized SQL.  Little hackery here</span></pre>
<pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060">  19:</span>     <span style="color: #008000">//to set the Oracle Command to bind by name</span></pre>
<pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060">  20:</span>     <span style="color: #0000ff">if</span> (command <span style="color: #0000ff">is</span> Oracle.DataAccess.Client.OracleCommand)</pre>
<pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060">  21:</span>     {</pre>
<pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060">  22:</span>         OracleCommand oraCmd = (OracleCommand) command;</pre>
<pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060">  23:</span>         oraCmd.BindByName = <span style="color: #0000ff">true</span>;</pre>
<pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060">  24:</span>         command = oraCmd;</pre>
<pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060">  25:</span>     }</pre>
<pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060">  26:</span>     command.CommandText = parameterizedSQL;</pre>
<pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060">  27:</span>     command.CommandType = CommandType.Text;</pre>
<pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060">  28:</span>&#160; </pre>
<pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060">  29:</span>     <span style="color: #008000">//loop through the params and add them to the command</span></pre>
<pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060">  30:</span>     <span style="color: #0000ff">foreach</span> (DbParameter parameter <span style="color: #0000ff">in</span> paramList)</pre>
<pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060">  31:</span>     {</pre>
<pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060">  32:</span>         command.Parameters.Add(parameter);</pre>
<pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060">  33:</span>     }</pre>
<pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060">  34:</span>     <span style="color: #0000ff">try</span></pre>
<pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060">  35:</span>     {</pre>
<pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060">  36:</span>         command.Prepare();</pre>
<pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060">  37:</span>         command.ExecuteNonQuery();</pre>
<pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060">  38:</span>     }</pre>
<pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060">  39:</span>     <span style="color: #0000ff">catch</span> (Exception ex)</pre>
<pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060">  40:</span>     {</pre>
<pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060">  41:</span>         command.Dispose();</pre>
<pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060">  42:</span>         <span style="color: #0000ff">throw</span>;</pre>
<pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060">  43:</span>     }</pre>
<pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"><span style="color: #606060">  44:</span> }</pre>
</p></div>
</div>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:65e08d4f-940e-4b86-baf5-ae193e7dbe34" class="wlWriterEditableSmartContent">Technorati Tags: <a href="http://technorati.com/tags/Oracle.+ODP.NET" rel="tag">Oracle. ODP.NET</a>,<a href="http://technorati.com/tags/c%23" rel="tag">c#</a>,<a href="http://technorati.com/tags/parameterized+query" rel="tag">parameterized query</a></div>
]]></content:encoded>
			<wfw:commentRss>http://www.geospecialling.com/index.php/2011/11/oraclecommand-and-parameterized-update-statements/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Oracle Client/ODAC on Vista x64 Mostly Working&#8230; Finally</title>
		<link>http://www.geospecialling.com/index.php/2008/10/oracle-clientodac-on-vista-x64-mostly-working-finally/</link>
		<comments>http://www.geospecialling.com/index.php/2008/10/oracle-clientodac-on-vista-x64-mostly-working-finally/#comments</comments>
		<pubDate>Fri, 24 Oct 2008 05:25:00 +0000</pubDate>
		<dc:creator>Darrin Maidlow</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[ODP.NET]]></category>

		<guid isPermaLink="false">http://www.geospecialling.com/index.php/2008/10/oracle-clientodac-on-vista-x64-mostly-working-finally/</guid>
		<description><![CDATA[So, finally I got fed up with working from a 32 bit XP virtual machine and spent a little more time on this issue.&#160; I’ve managed to get my Vista Ultimate a la x64 mostly working.&#160; Where I went wrong the last time (aside from trying to figure this out in the middle of the [...]]]></description>
			<content:encoded><![CDATA[<p>So, finally I got fed up with working from a 32 bit XP virtual machine and spent a little more time on this issue.&#160; I’ve managed to get my Vista Ultimate a la x64 mostly working.&#160; Where I went wrong <a title="Vista Ultimate x64 and Oracle Client Fun" href="http://www.geospecialling.com/index.php/2008/07/odacodp-net-on-vista-x64/" target="_blank" rel="tag">the last time</a> (aside from trying to figure this out in the middle of the night in a shitty mood because I had spent so much time head banging with a wall) was using the 64 bit client.&#160; </p>
<p>The correct path to Oracle happiness in my case was the 11g client.&#160; It works great with my 10.2 server.&#160; The important bit in was to use the 32 bit install rather than the 64 bit install.&#160; One of my primary tools for accessing Oracle is <a title="Toad for Oracle" href="http://www.quest.com/toad-for-oracle/" target="_blank" rel="tag">Toad for Oracle</a> 9.x.&#160; Quest Software states that Toad for Oracle 9.6 is the first version to really support the 11g client.&#160; However, it does NOT support the x64 client.</p>
<p>So the last time I tried to solve this, after a long day, and a fun night of head banging with a wall – when I tried the 11g client, I used x64 cbuild – and saw that Toad wouldn’t work, I threw a little hissyfit and went to bed.&#160; Long story short, installing both the 32bit <a title="Oracle 11g client" href="http://www.oracle.com/technology/software/products/database/oracle11g/111060_win32soft.html" target="_blank" rel="tag">11g client</a> and <a title="Oracle 11g ODAC/ODP" href="http://www.oracle.com/technology/software/tech/windows/odpnet/index.html" target="_blank" rel="tag">11g ODAC/ODP</a> seems to have done the trick.&#160; Now – there is one important little piece o’ information that you will need to know.&#160; Though I have not confirmed this, I suspect that x64 applications will not be able to use the driver.&#160; </p>
<p>That said, from a development point of view you will need to set IIS to run at 32 bit.&#160; On IIS 5.x/6.x this is a server wide setting from a dos window:</p>
<div>
<div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: rgb(244,244,244); border-bottom-style: none">
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: rgb(96,96,96)">   1:</span> cscript %SYSTEMDRIVE%\inetpub\adminscripts\adsutil.vbs SET W3SVC/AppPools/Enable32bitAppOnWin64 1</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: rgb(244,244,244); border-bottom-style: none"><span style="color: rgb(96,96,96)">   2:</span> %SYSTEMROOT%\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -i</pre>
</p></div>
</div>
<p>&#160;</p>
<p>If you’re running Vista or Server 2008 with IIS7, you have things a little better.&#160; You can configure each application pool to run as 32 or 64 bit.&#160; For winform development, change the compile properties of the project to set the target platform to be x86.</p>
<p>I’m really glad that’s over…but I still want a proper x64 ODAC.&#160; Come on Oracle .. =)</p>
<p><font color="#ff0000">Update February 2009</font> – I have made a happy ending post on <a title="Geospecialling" href="http://www.geospecialling.com" target="_blank" rel="tag">my new blog</a>.&#160; Got Oracle client working in both <a title="Oracle client working in both 32 and 64 bit" href="http://www.geospecialling.com/blogs/darrin/index.php/2009/05/finally-an-oracle-x64-client-that-works-on-vista-aka-getting-map-2010-x64-running-with-oracle/" target="_blank" rel="tag">32 and 64 bit mode</a>.&#160; Check it out. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.geospecialling.com/index.php/2008/10/oracle-clientodac-on-vista-x64-mostly-working-finally/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ODAC/ODP.NET on Vista x64</title>
		<link>http://www.geospecialling.com/index.php/2008/07/odacodp-net-on-vista-x64/</link>
		<comments>http://www.geospecialling.com/index.php/2008/07/odacodp-net-on-vista-x64/#comments</comments>
		<pubDate>Fri, 11 Jul 2008 13:11:00 +0000</pubDate>
		<dc:creator>Darrin Maidlow</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[ODP.NET]]></category>
		<category><![CDATA[Vista]]></category>
		<category><![CDATA[x64]]></category>

		<guid isPermaLink="false">http://www.geospecialling.com/index.php/2008/07/odacodp-net-on-vista-x64/</guid>
		<description><![CDATA[Since moving to Vista x64 I&#8217;ve had a heck of a time with Oracle clients.&#160; The one thing I could not get working until tonight was ODP with Visual Studio / .NET.&#160; Finally I found a solution. First, download and install Oracle 11g ODAC and Oracle Developer Tools for Visual Studio. (Link requires registration)&#160;&#160; This [...]]]></description>
			<content:encoded><![CDATA[<p>Since moving to Vista x64 I&#8217;ve had a heck of a time with Oracle clients.&#160; The one thing I could not get working until tonight was ODP with Visual Studio / .NET.&#160; Finally I found a solution. </p>
<p>First, download and install <a title="Oracle ODAC 11g" href="http://www.oracle.com/technology/software/tech/dotnet/utilsoft.html" target="_blank" rel="tag">Oracle 11g ODAC and Oracle Developer Tools for Visual Studio</a>. (Link requires registration)&#160;&#160; This should get the 32bit stuff installed.&#160;&#160; I&#8217;m still using an Oracle 10g R2 server.&#160; You will likely need to grab a copy of the TNSnames.ora for your existing client folder and place it in the appropriate tree of the 11g product home.</p>
<p>This however is not enough to get .NET working with ODP.&#160; Go to the folder where you extracted the zip.&#160; We need to find the Oracle.DataAccess.dll.&#160; This can be found in the file named filegroup4.jar, in the stage\components\oracle.ntoledb.odp_net_2.&#160; Winrar will open .jar files if needed.&#160; Extract the Oracle.DataAscess.dll file.</p>
<p>For now, I&#8217;ve put a copy of this file in my projects lib folder.&#160; I then added a reference directly to this file from all projects that need ODP access.&#160; </p>
<p>Keep in mind &#8211; before you ship you may want to remove this reference and ensure that the .DLL file doesn&#8217;t get included in your build.&#160; This should get your Vista x64 box developing with ODP.</p>
<p>To Oracle &#8211; come on guys.&#160; Give us some Vista x64 love!</p>
<div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:123a6d8a-f567-47ae-a3ec-b8a415d2eaf3" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">Technorati Tags: <a href="http://technorati.com/tags/.NET" rel="tag">.NET</a>,<a href="http://technorati.com/tags/ODP.NET" rel="tag">ODP.NET</a>,<a href="http://technorati.com/tags/Oracle" rel="tag">Oracle</a>,<a href="http://technorati.com/tags/Vista" rel="tag">Vista</a>,<a href="http://technorati.com/tags/X64" rel="tag">X64</a></div>
]]></content:encoded>
			<wfw:commentRss>http://www.geospecialling.com/index.php/2008/07/odacodp-net-on-vista-x64/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

