<?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>Blog de Nico-pyright(c) &#187; Sql Serveur</title>
	<atom:link href="https://blog.developpez.com/nico-pyright/pcategory/sql-serveur/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/nico-pyright</link>
	<description></description>
	<lastBuildDate>Mon, 08 Apr 2013 09:26:35 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.42</generator>
	<item>
		<title>[C#] [Sql Serveur 2008] Le type HierarchyID et les datasets typés, suite</title>
		<link>https://blog.developpez.com/nico-pyright/p8091/c/c_sql_serveur_2008_le_type_hierarchyid_e</link>
		<comments>https://blog.developpez.com/nico-pyright/p8091/c/c_sql_serveur_2008_le_type_hierarchyid_e#comments</comments>
		<pubDate>Tue, 22 Sep 2009 20:47:58 +0000</pubDate>
		<dc:creator><![CDATA[nico-pyright(c)]]></dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Sql Serveur]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Suite à ce billet [.NET][SGBD][SQL Server]&#160; [Sql Serveur 2008] Le type HierarchyID et les datasets typés, j’ai crée une petite fonction, incomplète pour l’instant, qui permet d’appeler une procédure stockée avec les bons paramètres, dont les paramètres de type HierarchyID. &#160; L’”astuce” consiste en l’utilisation du tableau typeAndSqlTypeAndUdt qui permet de faire la relation entre un type .Net et son type SQL Server (agrémenté de l’UDT si besoin). &#160; Voici le code de démo : [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Suite à ce billet <a href="http://blog.developpez.com/nico-pyright/p7331/sql-serveur/sql-serveur-2008-le-type-hierarchyid-et/#more7331">[.NET][SGBD][SQL Server]&#160; [Sql Serveur 2008] Le type HierarchyID et les datasets typés</a>, j’ai crée une petite fonction, incomplète pour l’instant, qui permet d’appeler une procédure stockée avec les bons paramètres, dont les paramètres de type HierarchyID.</p>
<p>&#160;</p>
<p>L’”astuce” consiste en l’utilisation du tableau typeAndSqlTypeAndUdt qui permet de faire la relation entre un type .Net et son type SQL Server (agrémenté de l’UDT si besoin).</p>
<p>&#160;</p>
<p>Voici le code de démo :</p>
<div style="border-bottom: #000000 1px solid; border-left: #000000 1px solid; margin-left: 10pt; border-top: #000000 1px solid; margin-right: 2pt; border-right: #000000 1px solid">
<div style="background-color: #dcdcdc; white-space: nowrap; overflow: scroll"><font face=" Courier New"><font size="2"></font><font color="#0000ff">class</font><font color="#000000">&#160;</font><font color="#2b91af">Program<br />
        </font><font color="#000000">{<br />
        &#160;&#160;&#160; </font><font color="#0000ff">static</font><font color="#000000">&#160;</font><font color="#0000ff">void</font><font color="#000000"> Main()<br />
        &#160;&#160;&#160; {</p>
<p>        &#160;&#160; </font><font color="#2b91af">List</font><font color="#000000">&lt;</font><font color="#2b91af">SqlParamObject</font><font color="#000000">&gt; paramObjects = </font><font color="#0000ff">new</font><font color="#000000">&#160;</font><font color="#2b91af">List</font><font color="#000000">&lt;</font><font color="#2b91af">SqlParamObject</font><font color="#000000">&gt;<br />
        &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {</p>
<p>        &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">new</font><font color="#000000">&#160;</font><font color="#2b91af">SqlParamObject</font><font color="#000000"> { ParameterName = </font><font color="#a31515">&quot;@Guid&quot;</font><font color="#000000">, Type = </font><font color="#0000ff">typeof</font><font color="#000000"> (</font><font color="#2b91af">Guid</font><font color="#000000">), Value = monGuid },<br />
        &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">new</font><font color="#000000">&#160;</font><font color="#2b91af">SqlParamObject</font><font color="#000000"> { ParameterName = </font><font color="#a31515">&quot;@MonEntier&quot;</font><font color="#000000">, Type = </font><font color="#0000ff">typeof</font><font color="#000000"> (</font><font color="#0000ff">int</font><font color="#000000">), Value = monEntier },<br />
        &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">new</font><font color="#000000">&#160;</font><font color="#2b91af">SqlParamObject</font><font color="#000000"> { ParameterName = </font><font color="#a31515">&quot;@HierarchyID&quot;</font><font color="#000000">, Type = </font><font color="#0000ff">typeof</font><font color="#000000"> (</font><font color="#2b91af">SqlHierarchyId</font><font color="#000000">), Value = hierarchyID },<br />
        &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; };</p>
<p>        &#160;&#160;&#160;&#160;&#160;&#160;&#160; ExecuteNonQuery(</font><font color="#2b91af">ConfigurationManager</font><font color="#000000">.ConnectionStrings[</font><font color="#a31515">&quot;MA_CONNEXION&quot;</font><font color="#000000">], </font><font color="#a31515">&quot;maProcedureStockee&quot;</font><font color="#000000">, paramObjects);<br />
        &#160;&#160;&#160; }</p>
<p>        &#160;&#160;&#160; </font><font color="#0000ff">public</font><font color="#000000">&#160;</font><font color="#0000ff">static</font><font color="#000000">&#160;</font><font color="#0000ff">void</font><font color="#000000"> ExecuteNonQuery(</font><font color="#2b91af">ConnectionStringSettings</font><font color="#000000"> connectionStringSettings, </font><font color="#0000ff">string</font><font color="#000000"> storedProcedureName, </font><font color="#2b91af">List</font><font color="#000000">&lt;</font><font color="#2b91af">SqlParamObject</font><font color="#000000">&gt; sqlParamObjects)<br />
        &#160;&#160;&#160; {</p>
<p>        &#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#2b91af">DbProviderFactory</font><font color="#000000"> factory = </font><font color="#2b91af">DbProviderFactories</font><font color="#000000">.GetFactory(connectionStringSettings.ProviderName);<br />
       &#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">using</font><font color="#000000"> (</font><font color="#2b91af">IDbConnection</font><font color="#000000"> connection = factory.CreateConnection())<br />
        &#160;&#160;&#160;&#160;&#160;&#160;&#160; {</p>
<p>        &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; connection.ConnectionString = connectionStringSettings.ConnectionString;</p>
<p>        &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; connection.Open();</p>
<p>        &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">using</font><font color="#000000"> (</font><font color="#2b91af">IDbCommand</font><font color="#000000"> command = factory.CreateCommand())<br />
        &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {</p>
<p>       &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; command.Connection = connection;</p>
<p>        &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">foreach</font><font color="#000000"> (</font><font color="#2b91af">SqlParamObject</font><font color="#000000"> paramObject </font><font color="#0000ff">in</font><font color="#000000"> sqlParamObjects)<br />
        &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {</p>
<p>        &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">string</font><font color="#000000"> paramName = paramObject.ParameterName.StartsWith(</font><font color="#a31515">&quot;@&quot;</font><font color="#000000">) ? paramObject.ParameterName : </font><font color="#0000ff">string</font><font color="#000000">.Format(</font><font color="#a31515">&quot;@{0}&quot;</font><font color="#000000">, paramObject.ParameterName);<br />
        &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">var</font><font color="#000000"> typeAndUdtTypeName = GetTypeAndUdtTypeNameFromType(paramObject.Type);<br />
        &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">object</font><font color="#000000"> value = paramObject.Value ?? </font><font color="#2b91af">DBNull</font><font color="#000000">.Value;<br />
        &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#2b91af">SqlParameter</font><font color="#000000"> sqlParameter = </font><font color="#0000ff">new</font><font color="#000000">&#160;</font><font color="#2b91af">SqlParameter</font><font color="#000000">(paramName, typeAndUdtTypeName.Key) { UdtTypeName = typeAndUdtTypeName.Value, Value = value };<br />
        &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; command.Parameters.Add(sqlParameter);</p>
<p>        &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }</p>
<p>        &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; command.CommandType = </font><font color="#2b91af">CommandType</font><font color="#000000">.StoredProcedure;<br />
        &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; command.CommandText = storedProcedureName;</p>
<p>        &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; command.ExecuteNonQuery();</p>
<p>        &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }</p>
<p>        &#160;&#160;&#160;&#160;&#160;&#160;&#160; }</p>
<p>        &#160;&#160;&#160; }</p>
<p>        &#160;&#160;&#160; </font><font color="#0000ff">private</font><font color="#000000">&#160;</font><font color="#0000ff">static</font><font color="#000000">&#160;</font><font color="#2b91af">KeyValuePair</font><font color="#000000">&lt;</font><font color="#2b91af">SqlDbType</font><font color="#000000">, </font><font color="#0000ff">string</font><font color="#000000">&gt; GetTypeAndUdtTypeNameFromType(</font><font color="#2b91af">Type</font><font color="#000000"> type)<br />
        &#160;&#160;&#160; {</p>
<p>        &#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#2b91af">Dictionary</font><font color="#000000">&lt;</font><font color="#2b91af">Type</font><font color="#000000">, </font><font color="#2b91af">KeyValuePair</font><font color="#000000">&lt;</font><font color="#2b91af">SqlDbType</font><font color="#000000">, </font><font color="#0000ff">string</font><font color="#000000">&gt;&gt; typeAndSqlTypeAndUdt = </font><font color="#0000ff">new</font><font color="#000000">&#160;</font><font color="#2b91af">Dictionary</font><font color="#000000">&lt;</font><font color="#2b91af">Type</font><font color="#000000">, </font><font color="#2b91af">KeyValuePair</font><font color="#000000">&lt;</font><font color="#2b91af">SqlDbType</font><font color="#000000">, </font><font color="#0000ff">string</font><font color="#000000">&gt;&gt;<br />
        &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {</p>
<p>        &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; { </font><font color="#0000ff">typeof</font><font color="#000000">(</font><font color="#0000ff">bool</font><font color="#000000">), </font><font color="#0000ff">new</font><font color="#000000">&#160;</font><font color="#2b91af">KeyValuePair</font><font color="#000000">&lt;</font><font color="#2b91af">SqlDbType</font><font color="#000000">, </font><font color="#0000ff">string</font><font color="#000000">&gt;(</font><font color="#2b91af">SqlDbType</font><font color="#000000">.Bit, </font><font color="#a31515">&quot;&quot;</font><font color="#000000">) },<br />
        &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; { </font><font color="#0000ff">typeof</font><font color="#000000">(</font><font color="#0000ff">byte</font><font color="#000000">), </font><font color="#0000ff">new</font><font color="#000000">&#160;</font><font color="#2b91af">KeyValuePair</font><font color="#000000">&lt;</font><font color="#2b91af">SqlDbType</font><font color="#000000">, </font><font color="#0000ff">string</font><font color="#000000">&gt;(</font><font color="#2b91af">SqlDbType</font><font color="#000000">.TinyInt, </font><font color="#a31515">&quot;&quot;</font><font color="#000000">) },<br />
        &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; { </font><font color="#0000ff">typeof</font><font color="#000000">(</font><font color="#0000ff">byte</font><font color="#000000">[]), </font><font color="#0000ff">new</font><font color="#000000">&#160;</font><font color="#2b91af">KeyValuePair</font><font color="#000000">&lt;</font><font color="#2b91af">SqlDbType</font><font color="#000000">, </font><font color="#0000ff">string</font><font color="#000000">&gt;(</font><font color="#2b91af">SqlDbType</font><font color="#000000">.Image, </font><font color="#a31515">&quot;&quot;</font><font color="#000000">) },<br />
        &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; { </font><font color="#0000ff">typeof</font><font color="#000000">(</font><font color="#2b91af">DateTime</font><font color="#000000">), </font><font color="#0000ff">new</font><font color="#000000">&#160;</font><font color="#2b91af">KeyValuePair</font><font color="#000000">&lt;</font><font color="#2b91af">SqlDbType</font><font color="#000000">, </font><font color="#0000ff">string</font><font color="#000000">&gt;(</font><font color="#2b91af">SqlDbType</font><font color="#000000">.DateTime, </font><font color="#a31515">&quot;&quot;</font><font color="#000000">) },<br />
        &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; { </font><font color="#0000ff">typeof</font><font color="#000000">(</font><font color="#0000ff">decimal</font><font color="#000000">), </font><font color="#0000ff">new</font><font color="#000000">&#160;</font><font color="#2b91af">KeyValuePair</font><font color="#000000">&lt;</font><font color="#2b91af">SqlDbType</font><font color="#000000">, </font><font color="#0000ff">string</font><font color="#000000">&gt;(</font><font color="#2b91af">SqlDbType</font><font color="#000000">.Decimal, </font><font color="#a31515">&quot;&quot;</font><font color="#000000">) },<br />
        &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; { </font><font color="#0000ff">typeof</font><font color="#000000">(</font><font color="#0000ff">double</font><font color="#000000">), </font><font color="#0000ff">new</font><font color="#000000">&#160;</font><font color="#2b91af">KeyValuePair</font><font color="#000000">&lt;</font><font color="#2b91af">SqlDbType</font><font color="#000000">, </font><font color="#0000ff">string</font><font color="#000000">&gt;(</font><font color="#2b91af">SqlDbType</font><font color="#000000">.Float, </font><font color="#a31515">&quot;&quot;</font><font color="#000000">) },<br />
        &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; { </font><font color="#0000ff">typeof</font><font color="#000000">(</font><font color="#2b91af">Guid</font><font color="#000000">), </font><font color="#0000ff">new</font><font color="#000000">&#160;</font><font color="#2b91af">KeyValuePair</font><font color="#000000">&lt;</font><font color="#2b91af">SqlDbType</font><font color="#000000">, </font><font color="#0000ff">string</font><font color="#000000">&gt;(</font><font color="#2b91af">SqlDbType</font><font color="#000000">.UniqueIdentifier, </font><font color="#a31515">&quot;&quot;</font><font color="#000000">) },<br />
        &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; { </font><font color="#0000ff">typeof</font><font color="#000000">(</font><font color="#2b91af">Int16</font><font color="#000000">), </font><font color="#0000ff">new</font><font color="#000000">&#160;</font><font color="#2b91af">KeyValuePair</font><font color="#000000">&lt;</font><font color="#2b91af">SqlDbType</font><font color="#000000">, </font><font color="#0000ff">string</font><font color="#000000">&gt;(</font><font color="#2b91af">SqlDbType</font><font color="#000000">.SmallInt, </font><font color="#a31515">&quot;&quot;</font><font color="#000000">) },<br />
        &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; { </font><font color="#0000ff">typeof</font><font color="#000000">(</font><font color="#2b91af">Int32</font><font color="#000000">), </font><font color="#0000ff">new</font><font color="#000000">&#160;</font><font color="#2b91af">KeyValuePair</font><font color="#000000">&lt;</font><font color="#2b91af">SqlDbType</font><font color="#000000">, </font><font color="#0000ff">string</font><font color="#000000">&gt;(</font><font color="#2b91af">SqlDbType</font><font color="#000000">.Int, </font><font color="#a31515">&quot;&quot;</font><font color="#000000">) },<br />
        &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; { </font><font color="#0000ff">typeof</font><font color="#000000">(</font><font color="#2b91af">Int64</font><font color="#000000">), </font><font color="#0000ff">new</font><font color="#000000">&#160;</font><font color="#2b91af">KeyValuePair</font><font color="#000000">&lt;</font><font color="#2b91af">SqlDbType</font><font color="#000000">, </font><font color="#0000ff">string</font><font color="#000000">&gt;(</font><font color="#2b91af">SqlDbType</font><font color="#000000">.BigInt, </font><font color="#a31515">&quot;&quot;</font><font color="#000000">) },<br />
        &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; { </font><font color="#0000ff">typeof</font><font color="#000000">(</font><font color="#0000ff">object</font><font color="#000000">), </font><font color="#0000ff">new</font><font color="#000000">&#160;</font><font color="#2b91af">KeyValuePair</font><font color="#000000">&lt;</font><font color="#2b91af">SqlDbType</font><font color="#000000">, </font><font color="#0000ff">string</font><font color="#000000">&gt;(</font><font color="#2b91af">SqlDbType</font><font color="#000000">.Variant, </font><font color="#a31515">&quot;&quot;</font><font color="#000000">) },<br />
        &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; { </font><font color="#0000ff">typeof</font><font color="#000000">(</font><font color="#0000ff">string</font><font color="#000000">), </font><font color="#0000ff">new</font><font color="#000000">&#160;</font><font color="#2b91af">KeyValuePair</font><font color="#000000">&lt;</font><font color="#2b91af">SqlDbType</font><font color="#000000">, </font><font color="#0000ff">string</font><font color="#000000">&gt;(</font><font color="#2b91af">SqlDbType</font><font color="#000000">.VarChar, </font><font color="#a31515">&quot;&quot;</font><font color="#000000">) },<br />
        &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; { </font><font color="#0000ff">typeof</font><font color="#000000">(</font><font color="#0000ff">int</font><font color="#000000">?), </font><font color="#0000ff">new</font><font color="#000000">&#160;</font><font color="#2b91af">KeyValuePair</font><font color="#000000">&lt;</font><font color="#2b91af">SqlDbType</font><font color="#000000">, </font><font color="#0000ff">string</font><font color="#000000">&gt;(</font><font color="#2b91af">SqlDbType</font><font color="#000000">.Int, </font><font color="#a31515">&quot;&quot;</font><font color="#000000">) },<br />
        &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; { </font><font color="#0000ff">typeof</font><font color="#000000">(</font><font color="#2b91af">SqlHierarchyId</font><font color="#000000">), </font><font color="#0000ff">new</font><font color="#000000">&#160;</font><font color="#2b91af">KeyValuePair</font><font color="#000000">&lt;</font><font color="#2b91af">SqlDbType</font><font color="#000000">, </font><font color="#0000ff">string</font><font color="#000000">&gt;(</font><font color="#2b91af">SqlDbType</font><font color="#000000">.Udt, </font><font color="#a31515">&quot;HierarchyId&quot;</font><font color="#000000">) }<br />
        &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; };</p>
<p>        &#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">if</font><font color="#000000"> (typeAndSqlTypeAndUdt.ContainsKey(type))<br />
        &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">return</font><font color="#000000"> typeAndSqlTypeAndUdt[type];<br />
        &#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">throw</font><font color="#000000">&#160;</font><font color="#0000ff">new</font><font color="#000000">&#160;</font><font color="#2b91af">NotImplementedException</font><font color="#000000">(</font><font color="#0000ff">string</font><font color="#000000">.Format(</font><font color="#a31515">&quot;Type {0} is not yet supported&quot;</font><font color="#000000">, type));<br />
        &#160;&#160;&#160; }</p>
<p>        }</p>
<p>        </font><font color="#0000ff">public</font><font color="#000000">&#160;</font><font color="#0000ff">class</font><font color="#000000">&#160;</font><font color="#2b91af">SqlParamObject<br />
        </font><font color="#000000">{<br />
        &#160;&#160;&#160; </font><font color="#0000ff">public</font><font color="#000000">&#160;</font><font color="#0000ff">string</font><font color="#000000"> ParameterName { </font><font color="#0000ff">get</font><font color="#000000">; </font><font color="#0000ff">set</font><font color="#000000">; }<br />
        &#160;&#160;&#160; </font><font color="#0000ff">public</font><font color="#000000">&#160;</font><font color="#0000ff">object</font><font color="#000000"> Value { </font><font color="#0000ff">get</font><font color="#000000">; </font><font color="#0000ff">set</font><font color="#000000">; }<br />
        &#160;&#160;&#160; </font><font color="#0000ff">public</font><font color="#000000">&#160;</font><font color="#2b91af">Type</font><font color="#000000"> Type { </font><font color="#0000ff">get</font><font color="#000000">; </font><font color="#0000ff">set</font><font color="#000000">; }<br />
        }</font></font> </div>
</div>
<p>Notez que je ne peux pas faire un GetType de l’objet pour avoir son type, si celui-ci est nul, d’où l’utilisation d’une propriété Type.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[Sql Serveur 2008] Le type HierarchyID et les datasets typés</title>
		<link>https://blog.developpez.com/nico-pyright/p7331/sql-serveur/sql_serveur_2008_le_type_hierarchyid_et</link>
		<comments>https://blog.developpez.com/nico-pyright/p7331/sql-serveur/sql_serveur_2008_le_type_hierarchyid_et#comments</comments>
		<pubDate>Wed, 11 Mar 2009 19:10:00 +0000</pubDate>
		<dc:creator><![CDATA[nico-pyright(c)]]></dc:creator>
				<category><![CDATA[Sql Serveur]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[J&#8217;ai essayé d&#8217;exécuter une procédure stockée qui avait en paramètre un type HierarchyID. Un truc du genre :   ALTER PROCEDURE [Ma_proc_stoc] (                 @guid uniqueidentifier,         @type int,         @parent HIERARCHYID )         AS Et je me suis retrouvé avec cette erreur : La propriété UdtTypeName doit être définie pour les paramètres UDT J&#8217;ai essayé de voir où on pouvait mettre ce fameux paramètre dans mon dataset, mais j&#8217;ai été incapable de le trouver. Si vous [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>J&rsquo;ai essayé d&rsquo;exécuter une procédure stockée qui avait en paramètre un type HierarchyID.    <br />Un truc du genre : </p>
<p> </p>
<div style="border-right: #000000 1px solid; border-top: #000000 1px solid; margin-left: 10pt; border-left: #000000 1px solid; margin-right: 2pt; border-bottom: #000000 1px solid">
<div style="overflow: scroll; white-space: nowrap; background-color: #dcdcdc"><font face=" Courier New"><font size="2"></font><font color="#0000ff">ALTER</font><font color="#000000"> </font><font color="#0000ff">PROCEDURE</font><font color="#000000"> [Ma_proc_stoc]          <br /></font><font color="#808080">(</font><font color="#000000">         <br />        @guid </font><font color="#0000ff">uniqueidentifier</font><font color="#808080">,          <br /></font><font color="#000000">        @type </font><font color="#0000ff">int</font><font color="#808080">,          <br /></font><font color="#000000">        @parent </font><font color="#0000ff">HIERARCHYID          <br /></font><font color="#808080">)</font><font color="#000000">         <br /></font><font color="#0000ff">AS          <br /></font></font></div>
</p></div>
<p>Et je me suis retrouvé avec cette erreur : </p>
<p>La propriété UdtTypeName doit être définie pour les paramètres UDT </p>
<p>J&rsquo;ai essayé de voir où on pouvait mettre ce fameux paramètre dans mon dataset, mais j&rsquo;ai été incapable de le trouver. </p>
<p> <span id="more-113"></span>
<p>Si vous avez le même problème que moi, vous pouvez vous en sortir avec le classique objet IDbCommand. Il faudra utiliser le type SqlDbType.Udt et mettre le paramètre UdtTypeName à HierarchyId. </p>
<p> </p>
<div style="border-right: #000000 1px solid; border-top: #000000 1px solid; margin-left: 10pt; border-left: #000000 1px solid; margin-right: 2pt; border-bottom: #000000 1px solid">
<div style="overflow: scroll; white-space: nowrap; background-color: #dcdcdc"><font face=" Courier New"><font size="2"></font><font color="#2b91af">DbProviderFactory</font><font color="#000000"> factory = </font><font color="#2b91af">DbProviderFactories</font><font color="#000000">.GetFactory(ProviderName);          <br /></font><font color="#0000ff">using</font><font color="#000000"> (</font><font color="#2b91af">IDbConnection</font><font color="#000000"> connection = factory.CreateConnection())          <br />{           <br />    connection.ConnectionString = ConnectionString;           <br />    connection.Open();           <br />    </font><font color="#0000ff">using</font><font color="#000000"> (</font><font color="#2b91af">IDbCommand</font><font color="#000000"> command = factory.CreateCommand())          <br />    {           <br />        command.Connection = connection;           </p>
<p>        </font><font color="#2b91af">SqlParameter</font><font color="#000000"> guidParameter = </font><font color="#0000ff">new</font><font color="#000000"> </font><font color="#2b91af">SqlParameter</font><font color="#000000">(</font><font color="#a31515">&laquo;&nbsp;@guid&nbsp;&raquo;</font><font color="#000000">, </font><font color="#2b91af">SqlDbType</font><font color="#000000">.UniqueIdentifier) { Value = Guid.NewGuid()};          <br />        </font><font color="#2b91af">SqlParameter</font><font color="#000000"> typeParameter = </font><font color="#0000ff">new</font><font color="#000000"> </font><font color="#2b91af">SqlParameter</font><font color="#000000">(</font><font color="#a31515">&laquo;&nbsp;@type&nbsp;&raquo;</font><font color="#000000">, </font><font color="#2b91af">SqlDbType</font><font color="#000000">.Int) { Value = type };          <br />        </font><font color="#2b91af">SqlParameter</font><font color="#000000"> parentParameter = </font><font color="#0000ff">new</font><font color="#000000"> </font><font color="#2b91af">SqlParameter</font><font color="#000000">(</font><font color="#a31515">&laquo;&nbsp;@parent&nbsp;&raquo;</font><font color="#000000">, </font><font color="#2b91af">SqlDbType</font><font color="#000000">.Udt) { UdtTypeName = </font><font color="#a31515">&laquo;&nbsp;HierarchyId&nbsp;&raquo;</font><font color="#000000">, Value = level};          <br />        command.Parameters.Add(guidParameter);           <br />        command.Parameters.Add(typeParameter );           <br />        command.Parameters.Add(parentParameter );           </p>
<p>        command.CommandType = </font><font color="#2b91af">CommandType</font><font color="#000000">.StoredProcedure;          <br />        command.CommandText = </font><font color="#a31515">&laquo;&nbsp;Ma_proc_stoc&nbsp;&raquo;</font><font color="#000000">;          <br />        command.ExecuteNonQuery();           <br />    }           <br />}</font></font> </div>
</p></div>
<p> </p>
<p>Si vous connaissez un moyen pour paramétrer le dataset typés, je suis à l&rsquo;écoute <img src="https://blog.developpez.com/nico-pyright/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Le type HierarchyID de sql serveur 2008</title>
		<link>https://blog.developpez.com/nico-pyright/p7317/sql-serveur/le_type_hierarchyid_de_sql_serveur_2008</link>
		<comments>https://blog.developpez.com/nico-pyright/p7317/sql-serveur/le_type_hierarchyid_de_sql_serveur_2008#comments</comments>
		<pubDate>Thu, 05 Mar 2009 19:00:00 +0000</pubDate>
		<dc:creator><![CDATA[nico-pyright(c)]]></dc:creator>
				<category><![CDATA[Sql Serveur]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Nonon, ca ne sera pas un cours sur le type HierarchyID, je ne suis aucunement DBA Mais comme tout développeur, j&#8217;ai besoin de modéliser des tables de base de données et d&#8217;écrire du SQL. J&#8217;ai pu lire 2-3 petites choses sur le net sur les HierarchyID mais toujours le même exemple, celui de la hiérarchie entre les employés d&#8217;une boite. Je vous livre ici le fruit de mes recherches. Je me propose ici de modéliser [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Nonon, ca ne sera pas un cours sur le type HierarchyID, je ne suis aucunement DBA <img src="https://blog.developpez.com/nico-pyright/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /></p>
<p>Mais comme tout développeur, j&rsquo;ai besoin de modéliser des tables de base de données et d&rsquo;écrire du SQL.</p>
<p>J&rsquo;ai pu lire 2-3 petites choses sur le net sur les HierarchyID mais toujours le même exemple, celui de la hiérarchie entre les employés d&rsquo;une boite.</p>
<p>Je vous livre ici le fruit de mes recherches.</p>
<p>Je me propose ici de modéliser un disque dur, c&rsquo;est à dire un volume, composé de dossiers ou de fichiers, qui peuvent eux même contenir des sous-dossiers ou des fichiers.</p>
<p>On aura donc trois tables :</p>
<p>  <span id="more-112"></span>
<p> </p>
<p><a href="http://blog.developpez.com/media/140/WindowsLiveWriter/b7bc55d1d642_BC41/tables_2.png"><img title="tables" style="border-top-width: 0px; display: block; border-left-width: 0px; float: none; border-bottom-width: 0px; margin-left: auto; margin-right: auto; border-right-width: 0px" height="188" alt="tables" src="http://blog.developpez.com/media/140/WindowsLiveWriter/b7bc55d1d642_BC41/tables_thumb.png" width="244" border="0" /></a> </p>
<p>Qu&rsquo;on va créer ainsi</p>
<div style="border-right: #000000 1px solid; border-top: #000000 1px solid; margin-left: 10pt; border-left: #000000 1px solid; margin-right: 2pt; border-bottom: #000000 1px solid">
<div style="overflow: scroll; white-space: nowrap; background-color: #dcdcdc"><font face=" Courier New"><font size="2"></font><font color="#0000ff">CREATE TABLE </font><font color="#000000">Repertoire          <br />(IDRepertoire </font><font color="#0000ff">INT PRIMARY KEY NOT NULL IDENTITY</font><font color="#000000">,          <br />Nom </font><font color="#0000ff">VARCHAR</font><font color="#000000">(255) </font><font color="#0000ff">NOT NULL</font><font color="#000000">,          <br />NiveauRepertoire HIERARCHYID)           </p>
<p></font><font color="#0000ff">CREATE TABLE </font><font color="#000000">Disque          <br />(IDDisque </font><font color="#0000ff">INT PRIMARY KEY NOT NULL IDENTITY</font><font color="#000000">,          <br />Nom </font><font color="#0000ff">VARCHAR</font><font color="#000000">(255) </font><font color="#0000ff">NOT NULL</font><font color="#000000">,          <br />IDRepertoire </font><font color="#0000ff">int NOT NULL</font><font color="#000000">,  <br /> </font><font color="#0000ff">constraint </font><font color="#000000">FK_REP_DISK </font><font color="#0000ff">foreign key </font><font color="#000000">(IDRepertoire) </font><font color="#0000ff">references </font><font color="#000000">Repertoire (IDRepertoire) )          <br />  <br /></font><font color="#0000ff">CREATE TABLE </font><font color="#000000">Fichier          <br />(IDFichier </font><font color="#0000ff">INT PRIMARY KEY NOT NULL IDENTITY</font><font color="#000000">,          <br />Nom </font><font color="#0000ff">VARCHAR</font><font color="#000000">(255) </font><font color="#0000ff">NOT NULL</font><font color="#000000">,          <br />IDRepertoire </font><font color="#0000ff">int NOT NULL</font><font color="#000000">,  <br /> </font><font color="#0000ff">constraint </font><font color="#000000">FK_REP_FICHIER </font><font color="#0000ff">foreign key </font><font color="#000000">(IDRepertoire) </font><font color="#0000ff">references </font><font color="#000000">Repertoire (IDRepertoire) )          <br />  <br /></font><font color="#0000ff">INSERT INTO </font><font color="#000000">Repertoire (Nom, NiveauRepertoire)          <br />            </font><font color="#0000ff">VALUES </font><font color="#000000">(</font><font color="#a31515">&lsquo;root&rsquo;</font><font color="#000000">, HIERARCHYID::GetRoot())</font></font> </div>
</p></div>
<p>Notez qu&rsquo;on insère au moment de la création des tables, un noeud de niveau root.</p>
<p>Ajouter un disque consistera à créer un répertoire à la racine du root et d&rsquo;insérer une valeur dans la table disque, d&rsquo;où la procédure stockée suivante :</p>
<div style="border-right: #000000 1px solid; border-top: #000000 1px solid; margin-left: 10pt; border-left: #000000 1px solid; margin-right: 2pt; border-bottom: #000000 1px solid">
<div style="overflow: scroll; white-space: nowrap; background-color: #dcdcdc"><font face=" Courier New"><font size="2"></font><font color="#0000ff">CREATE PROCEDURE </font><font color="#000000">AjoutDisque          <br />(         <br />        @nomDisque </font><font color="#0000ff">varchar</font><font color="#000000">(255)          <br />)         <br /></font><font color="#0000ff">AS          <br />BEGIN           </p>
<p></font><font color="#000000">        </font><font color="#0000ff">declare </font><font color="#000000">@niveau hierarchyid          <br />        </font><font color="#0000ff">set </font><font color="#000000">@niveau = HIERARCHYID::GetRoot()          <br />        </font><font color="#0000ff">exec </font><font color="#000000">AjoutRepertoire  @niveau, @nomDisque          <br />        </font><font color="#0000ff">insert into </font><font color="#000000">Disque (Nom, IDRepertoire)          <br />                </font><font color="#0000ff">values </font><font color="#000000">(@nomDisque, @@IDENTITY)          <br /></font><font color="#0000ff">END</font></font> </div>
</p></div>
<p> </p>
<p>Pour créer un répertoire, on ajoutera un noeud sous le noeud parent, et après un éventuel frère :</p>
<p> </p>
<div style="border-right: #000000 1px solid; border-top: #000000 1px solid; margin-left: 10pt; border-left: #000000 1px solid; margin-right: 2pt; border-bottom: #000000 1px solid">
<div style="overflow: scroll; white-space: nowrap; background-color: #dcdcdc"><font face=" Courier New"><font size="2"></font><font color="#0000ff">CREATE PROCEDURE </font><font color="#000000">AjoutRepertoire          <br />(         <br />        @parent Hierarchyid,           <br />        @nomRepertoire </font><font color="#0000ff">varchar</font><font color="#000000">(255)          <br />)         <br /></font><font color="#0000ff">AS          <br />BEGIN           </p>
<p></font><font color="#000000">        </font><font color="#0000ff">declare </font><font color="#000000">@frere HIERARCHYID          <br />        </font><font color="#0000ff">SELECT </font><font color="#000000">@frere = </font><font color="#0000ff">Max</font><font color="#000000">(NiveauRepertoire)          <br />                </font><font color="#0000ff">FROM </font><font color="#000000">Repertoire          <br />                </font><font color="#0000ff">WHERE </font><font color="#000000">NiveauRepertoire.GetAncestor(1) = @parent;          </p>
<p>        </font><font color="#0000ff">INSERT INTO </font><font color="#000000">Repertoire (Nom, NiveauRepertoire)          <br />                </font><font color="#0000ff">VALUES </font><font color="#000000">(@nomRepertoire, @parent.GetDescendant(@frere, </font><font color="#0000ff">NULL</font><font color="#000000">))          </p>
<p></font><font color="#0000ff">END</font></font> </div>
</p></div>
<p> </p>
<p>Enfin, pour créer un fichier, on fera la relation avec son répertoire conteneur :</p>
<div style="border-right: #000000 1px solid; border-top: #000000 1px solid; margin-left: 10pt; border-left: #000000 1px solid; margin-right: 2pt; border-bottom: #000000 1px solid">
<div style="overflow: scroll; white-space: nowrap; background-color: #dcdcdc"><font face=" Courier New"><font size="2"></font><font color="#0000ff">CREATE PROCEDURE </font><font color="#000000">AjoutFichier          <br />(         <br />        @IDRepertoire </font><font color="#0000ff">int</font><font color="#000000">,          <br />        @nomFichier </font><font color="#0000ff">varchar</font><font color="#000000">(255)          <br />)         <br /></font><font color="#0000ff">AS          <br />BEGIN           </p>
<p>INSERT INTO </font><font color="#000000">Fichier (Nom, IDRepertoire)          <br />        </font><font color="#0000ff">VALUES </font><font color="#000000">(@nomFichier, @IDRepertoire)          </p>
<p></font><font color="#0000ff">END</font></font> </div>
</p></div>
<p> </p>
<p>Maintenant, je vais pouvoir créer la structure suivante :</p>
<ul>
<li>c:\test\fichier1.txt </li>
<li>c:\test\fichier2.txt </li>
<li>c:\windows\system32\dll1.dll </li>
<li>c:\windows\system32\dll2.dll </li>
<li>c:\windows\Microsoft.Net\fichier.exe </li>
<li>d:\abc\def.txt </li>
</ul>
<div style="border-right: #000000 1px solid; border-top: #000000 1px solid; margin-left: 10pt; border-left: #000000 1px solid; margin-right: 2pt; border-bottom: #000000 1px solid">
<div style="overflow: scroll; white-space: nowrap; background-color: #dcdcdc"><font face=" Courier New"><font size="2"></font><font color="#008000">&#8211; creation de disque          <br /></font><font color="#000000">        </font><font color="#0000ff">exec </font><font color="#000000">AjoutDisque </font><font color="#a31515">&lsquo;c:\&rsquo;          </p>
<p></font><font color="#0000ff">declare </font><font color="#000000">@idDisque </font><font color="#0000ff">int </font><font color="#000000">= @@IDENTITY          </p>
<p></font><font color="#008000">&#8211; creation du repertoire c:\test\          <br /></font><font color="#0000ff">declare </font><font color="#000000">@niveau hierarchyid          <br /></font><font color="#0000ff">select </font><font color="#000000">@niveau = Repertoire.NiveauRepertoire </font><font color="#0000ff">from </font><font color="#000000">Repertoire </font><font color="#0000ff">where </font><font color="#000000">Repertoire.IDRepertoire = (</font><font color="#0000ff">select </font><font color="#000000">Disque.IDRepertoire </font><font color="#0000ff">from </font><font color="#000000">Disque </font><font color="#0000ff">where </font><font color="#000000">IDDisque = @idDisque)          <br />        </font><font color="#0000ff">exec </font><font color="#000000">[AjoutRepertoire] @niveau, </font><font color="#a31515">&lsquo;test\&rsquo;          </p>
<p></font><font color="#008000">&#8211; creation du fichier c:\test\fichier1.txt          <br />&#8211; creation du fichier c:\test\fichier2.txt           <br /></font><font color="#0000ff">declare </font><font color="#000000">@reperoireID </font><font color="#0000ff">int </font><font color="#000000">= @@IDENTITY          <br />        </font><font color="#0000ff">exec </font><font color="#000000">[AjoutFichier] @reperoireID, </font><font color="#a31515">&lsquo;fichier1.txt&rsquo;          <br /></font><font color="#000000">        </font><font color="#0000ff">exec </font><font color="#000000">[AjoutFichier] @reperoireID, </font><font color="#a31515">&lsquo;fichier2.txt&rsquo;          </p>
<p></font><font color="#008000">&#8211; creation du repertoire c:\windows\          <br /></font><font color="#0000ff">select </font><font color="#000000">@niveau = Repertoire.NiveauRepertoire </font><font color="#0000ff">from </font><font color="#000000">Repertoire </font><font color="#0000ff">where </font><font color="#000000">Repertoire.IDRepertoire = (</font><font color="#0000ff">select </font><font color="#000000">Disque.IDRepertoire </font><font color="#0000ff">from </font><font color="#000000">Disque </font><font color="#0000ff">where </font><font color="#000000">IDDisque = @idDisque)          <br />        </font><font color="#0000ff">exec </font><font color="#000000">[AjoutRepertoire] @niveau, </font><font color="#a31515">&lsquo;windows\&rsquo;          </p>
<p></font><font color="#008000">&#8211; creation du repertoire c:\windows\system32\          <br /></font><font color="#0000ff">declare </font><font color="#000000">@reperoireID2 </font><font color="#0000ff">int          <br />set </font><font color="#000000">@reperoireID2 = @@IDENTITY          <br /></font><font color="#0000ff">select </font><font color="#000000">@niveau = Repertoire.NiveauRepertoire </font><font color="#0000ff">from </font><font color="#000000">Repertoire </font><font color="#0000ff">where </font><font color="#000000">Repertoire.IDRepertoire = @reperoireID2          <br />        </font><font color="#0000ff">exec </font><font color="#000000">[AjoutRepertoire] @niveau, </font><font color="#a31515">&lsquo;system32\&rsquo;          <br /></font><font color="#008000">&#8211; creation du fichier c:\windows\system32\dll1.dll          <br />&#8211; creation du fichier c:\windows\system32\dll2.dll           <br /></font><font color="#0000ff">set </font><font color="#000000">@reperoireID = @@IDENTITY          <br />        </font><font color="#0000ff">exec </font><font color="#000000">[AjoutFichier] @reperoireID, </font><font color="#a31515">&lsquo;dll1.dll&rsquo;          <br /></font><font color="#000000">        </font><font color="#0000ff">exec </font><font color="#000000">[AjoutFichier] @reperoireID, </font><font color="#a31515">&lsquo;dll2.dll&rsquo;          </p>
<p></font><font color="#008000">&#8211; creation du repertoire c:\windows\Microsoft.NET\          <br /></font><font color="#000000">        </font><font color="#0000ff">exec </font><font color="#000000">[AjoutRepertoire] @niveau, </font><font color="#a31515">&lsquo;Microsoft.NET\&rsquo;          <br /></font><font color="#008000">&#8211; creation du fichier c:\windows\Microsoft.NET\fichier.exe          <br /></font><font color="#0000ff">set </font><font color="#000000">@reperoireID = @@IDENTITY          <br />        </font><font color="#0000ff">exec </font><font color="#000000">[AjoutFichier] @reperoireID, </font><font color="#a31515">&lsquo;fichier.exe&rsquo;          <br /></font><font color="#000000">         <br /></font><font color="#008000">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;          </p>
<p>&#8211; creation de disque           <br /></font><font color="#000000">        </font><font color="#0000ff">exec </font><font color="#000000">AjoutDisque </font><font color="#a31515">&lsquo;d:\&rsquo;          </p>
<p></font><font color="#0000ff">set </font><font color="#000000">@idDisque = @@IDENTITY          </p>
<p></font><font color="#008000">&#8211; creation du repertoire d:\abc\          <br /></font><font color="#0000ff">select </font><font color="#000000">@niveau = Repertoire.NiveauRepertoire </font><font color="#0000ff">from </font><font color="#000000">Repertoire </font><font color="#0000ff">where </font><font color="#000000">Repertoire.IDRepertoire = (</font><font color="#0000ff">select </font><font color="#000000">Disque.IDRepertoire </font><font color="#0000ff">from </font><font color="#000000">Disque </font><font color="#0000ff">where </font><font color="#000000">IDDisque = @idDisque)          <br />        </font><font color="#0000ff">exec </font><font color="#000000">[AjoutRepertoire] @niveau, </font><font color="#a31515">&lsquo;abc\&rsquo;          </p>
<p></font><font color="#008000">&#8211; creation du fichier d:\abc\def.txt          <br /></font><font color="#0000ff">set </font><font color="#000000">@reperoireID = @@IDENTITY          <br />        </font><font color="#0000ff">exec </font><font color="#000000">[AjoutFichier] @reperoireID, </font><font color="#a31515">&lsquo;def.txt&rsquo;</font></font> </div>
</p></div>
<p> </p>
<p>Maintenant, on pourra simplement récupérer tous les sous noeuds d&rsquo;un disque, avec : </p>
<div style="border-right: #000000 1px solid; border-top: #000000 1px solid; margin-left: 10pt; border-left: #000000 1px solid; margin-right: 2pt; border-bottom: #000000 1px solid">
<div style="overflow: scroll; white-space: nowrap; background-color: #dcdcdc"><font face=" Courier New"><font size="2"></font><font color="#0000ff">select </font><font color="#000000">@niveau = NiveauRepertoire </font><font color="#0000ff">from </font><font color="#000000">Repertoire  <br />        </font><font color="#0000ff">INNER JOIN </font><font color="#000000">Disque </font><font color="#0000ff">on </font><font color="#000000">Disque.IDRepertoire = Repertoire.IDRepertoire          <br />        </font><font color="#0000ff">where </font><font color="#000000">Disque.Nom = </font><font color="#a31515">&lsquo;c:\&rsquo;          <br /></font><font color="#0000ff">select </font><font color="#000000">*, NiveauRepertoire.GetAncestor(1) </font><font color="#0000ff">as </font><font color="#000000">ancestor  </font><font color="#0000ff">from </font><font color="#000000">Repertoire  <br />        </font><font color="#0000ff">LEFT JOIN </font><font color="#000000">Fichier </font><font color="#0000ff">on </font><font color="#000000">Fichier.IDRepertoire = Repertoire.IDRepertoire          <br />        </font><font color="#0000ff">Where </font><font color="#000000">NiveauRepertoire.IsDescendantOf(@niveau) = 1          </p>
<p></font><font color="#0000ff">select </font><font color="#000000">@niveau = NiveauRepertoire </font><font color="#0000ff">from </font><font color="#000000">Repertoire  <br />        </font><font color="#0000ff">INNER JOIN </font><font color="#000000">Disque </font><font color="#0000ff">on </font><font color="#000000">Disque.IDRepertoire = Repertoire.IDRepertoire          <br />        </font><font color="#0000ff">where </font><font color="#000000">Disque.Nom = </font><font color="#a31515">&lsquo;d:\&rsquo;          <br /></font><font color="#0000ff">select </font><font color="#000000">*, NiveauRepertoire.GetAncestor(1) </font><font color="#0000ff">as </font><font color="#000000">ancestor  </font><font color="#0000ff">from </font><font color="#000000">Repertoire  <br />        </font><font color="#0000ff">LEFT JOIN </font><font color="#000000">Fichier </font><font color="#0000ff">on </font><font color="#000000">Fichier.IDRepertoire = Repertoire.IDRepertoire          <br />        </font><font color="#0000ff">Where </font><font color="#000000">NiveauRepertoire.IsDescendantOf(@niveau) = 1</font></font> </div>
</p></div>
</p>
</p>
<p> </p>
<p>ce qui nous donne comme résultat :</p>
<p><a href="http://blog.developpez.com/media/140/WindowsLiveWriter/b7bc55d1d642_BC41/result_2.png"><img title="result" style="border-top-width: 0px; display: block; border-left-width: 0px; float: none; border-bottom-width: 0px; margin-left: auto; margin-right: auto; border-right-width: 0px" height="109" alt="result" src="http://blog.developpez.com/media/140/WindowsLiveWriter/b7bc55d1d642_BC41/result_thumb.png" width="244" border="0" /></a> </p>
<p> </p>
<p>Voilà pour ma maigre contribution sur les hierarchyID. </p>
<p>Il y a peut-être une meilleure façon de faire, dans ce cas, n&rsquo;hésitez pas à me donner votre solution <img src="https://blog.developpez.com/nico-pyright/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
