<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>Michael Maddox - Software Development</title>
    <link>http://www.capprime.com/software_development_weblog/</link>
    <description>Best Practices, Knowlegde Base Type Articles, General Tech Opinions, etc.</description>
    <language>en-us</language>
    <copyright>Michael Maddox</copyright>
    <lastBuildDate>Mon, 15 Mar 2010 12:56:31 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 1.8.5223.2</generator>
    <managingEditor>Michael.P.Maddox@gmail.com</managingEditor>
    <webMaster>Michael.P.Maddox@gmail.com</webMaster>
    <item>
      <trackback:ping>http://www.capprime.com/software_development_weblog/Trackback.aspx?guid=14f458ec-f15c-4406-aff7-6942bd9fa92f</trackback:ping>
      <pingback:server>http://www.capprime.com/software_development_weblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.capprime.com/software_development_weblog/PermaLink,guid,14f458ec-f15c-4406-aff7-6942bd9fa92f.aspx</pingback:target>
      <dc:creator>Michael.P.Maddox@gmail.com (Michael Maddox)</dc:creator>
      <wfw:comment>http://www.capprime.com/software_development_weblog/CommentView,guid,14f458ec-f15c-4406-aff7-6942bd9fa92f.aspx</wfw:comment>
      <wfw:commentRss>http://www.capprime.com/software_development_weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=14f458ec-f15c-4406-aff7-6942bd9fa92f</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      Apparently SMO can't get the SqlDataType of a UserDefinedDataType.
   </p>
        <p>
          <a href="http://msdn.microsoft.com/en-us/library/ms162169.aspx">SQL Server Management
      Objects (SMO)</a> is a pretty powerful API into Microsoft SQL Server.  I've
      been pretty happy using it in various scenarios over the years.
   </p>
        <p>
      Recently, I was surprised to find out that SMO can't get the SqlDataType underlying
      a UserDefinedDataType.  This is reproducible using the Microsoft Pubs sample
      database.
   </p>
        <p>
      Attempt #1:
   </p>
        <font color="#0000ff" size="2">
          <font color="#0000ff" size="2">
            <p>
      string
   </p>
          </font>
        </font>
        <font color="#000000" size="2"> databaseName = </font>
        <font color="#a31515" size="2">
          <font color="#a31515" size="2">"pubs"</font>
        </font>
        <font size="2">
          <font color="#000000">;<br /></font>
        </font>
        <font color="#0000ff" size="2">
          <font color="#0000ff" size="2">string</font>
        </font>
        <font color="#000000" size="2"> connectionString
   = System.Configuration.</font>
        <font color="#2b91af" size="2">
          <font color="#2b91af" size="2">ConfigurationManager</font>
        </font>
        <font size="2">
          <font color="#000000">.ConnectionStrings[databaseName].ToString();</font>
        </font>
        <p>
          <font color="#2b91af" size="2">
            <font color="#2b91af" size="2">SqlConnection</font>
          </font>
          <font color="#000000" size="2"> oneSqlConnection
      = </font>
          <font color="#0000ff" size="2">
            <font color="#0000ff" size="2">new</font>
          </font>
          <font color="#000000" size="2">
          </font>
          <font color="#2b91af" size="2">
            <font color="#2b91af" size="2">SqlConnection</font>
          </font>
          <font size="2">
            <font color="#000000">(connectionString);<br /></font>
          </font>
          <font color="#2b91af" size="2">
            <font color="#2b91af" size="2">ServerConnection</font>
          </font>
          <font color="#000000" size="2"> oneServerConnection
      = </font>
          <font color="#0000ff" size="2">
            <font color="#0000ff" size="2">new</font>
          </font>
          <font color="#000000" size="2">
          </font>
          <font color="#2b91af" size="2">
            <font color="#2b91af" size="2">ServerConnection</font>
          </font>
          <font size="2">
            <font color="#000000">(oneSqlConnection);<br /></font>
          </font>
          <font color="#2b91af" size="2">
            <font color="#2b91af" size="2">Server</font>
          </font>
          <font color="#000000" size="2"> oneServer
      = </font>
          <font color="#0000ff" size="2">
            <font color="#0000ff" size="2">new</font>
          </font>
          <font color="#000000" size="2">
          </font>
          <font color="#2b91af" size="2">
            <font color="#2b91af" size="2">Server</font>
          </font>
          <font size="2">
            <font color="#000000">(oneServerConnection);<br /></font>
          </font>
          <font color="#2b91af" size="2">
            <font color="#2b91af" size="2">Database</font>
          </font>
          <font color="#000000" size="2"> oneDatabase
      = </font>
          <font color="#0000ff" size="2">
            <font color="#0000ff" size="2">new</font>
          </font>
          <font color="#000000" size="2">
          </font>
          <font color="#2b91af" size="2">
            <font color="#2b91af" size="2">Database</font>
          </font>
          <font size="2">
            <font color="#000000">(oneServer,
      databaseName);<br /></font>oneDatabase.Refresh();
      </font>
        </p>
        <font color="#2b91af" size="2">
          <font color="#2b91af" size="2">
            <p>
      UserDefinedDataType
   </p>
          </font>
        </font>
        <font color="#000000" size="2"> tidUserDefinedDataType =<br />
    </font>
        <font color="#000000" size="2">   </font>
        <font color="#0000ff" size="2">
          <font color="#0000ff" size="2">new</font>
        </font>
        <font color="#000000" size="2"> Microsoft.SqlServer.Management.Smo.</font>
        <font color="#2b91af" size="2">
          <font color="#2b91af" size="2">UserDefinedDataType</font>
        </font>
        <font color="#000000" size="2">(oneDatabase, </font>
        <font color="#a31515" size="2">
          <font color="#a31515" size="2">"tid"</font>
        </font>
        <font color="#000000" size="2">, </font>
        <font color="#a31515" size="2">
          <font color="#a31515" size="2">"dbo"</font>
        </font>
        <font size="2">
          <font color="#000000">);<br /></font>
        </font>
        <font color="#0000ff" size="2">
          <font color="#0000ff" size="2">bool</font>
        </font>
        <font color="#000000" size="2"> initializeDidSucceed
   = tidUserDefinedDataType.Initialize(</font>
        <font color="#0000ff" size="2">
          <font color="#0000ff" size="2">true</font>
        </font>
        <font size="2">
          <font color="#000000">);</font>
        </font>
        <p>
      In this scenario, for reasons unknown to me, initializeDidSucceed is false!
   </p>
        <p>
      Now, if we try to access tidUserDefinedDataType.SystemType which seems like the appropriate
      data item, we get this exception:
   </p>
        <p>
      Microsoft.SqlServer.Management.Smo.PropertyNotSetException: To accomplish this action,
      set property SystemType. 
      <br />
         at Microsoft.SqlServer.Management.Smo.SqlSmoObject.OnPropertyMissing(String
      propname, Boolean useDefaultValue) 
      <br />
         at Microsoft.SqlServer.Management.Smo.PropertyCollection.RetrieveProperty(Int32
      index, Boolean useDefaultOnMissingValue) 
      <br />
         at Microsoft.SqlServer.Management.Smo.PropertyCollection.GetValueWithNullReplacement(String
      propertyName, Boolean throwOnNullValue, Boolean useDefaultOnMissingValue) 
      <br />
         at Microsoft.SqlServer.Management.Smo.UserDefinedDataType.get_SystemType() 
   </p>
        <p>
          <br />
      Attempt #2:
   </p>
        <font color="#0000ff" size="2">
          <font color="#0000ff" size="2">
            <p>
      string
   </p>
          </font>
        </font>
        <font color="#000000" size="2"> databaseName = </font>
        <font color="#a31515" size="2">
          <font color="#a31515" size="2">"pubs"</font>
        </font>
        <font size="2">
          <font color="#000000">;<br /></font>
        </font>
        <font color="#0000ff" size="2">
          <font color="#0000ff" size="2">string</font>
        </font>
        <font color="#000000" size="2"> connectionString
   = System.Configuration.</font>
        <font color="#2b91af" size="2">
          <font color="#2b91af" size="2">ConfigurationManager</font>
        </font>
        <font size="2">
          <font color="#000000">.ConnectionStrings[databaseName].ToString();</font>
        </font>
        <p>
          <font color="#2b91af" size="2">
            <font color="#2b91af" size="2">SqlConnection</font>
          </font>
          <font color="#000000" size="2"> oneSqlConnection
      = </font>
          <font color="#0000ff" size="2">
            <font color="#0000ff" size="2">new</font>
          </font>
          <font color="#000000" size="2">
          </font>
          <font color="#2b91af" size="2">
            <font color="#2b91af" size="2">SqlConnection</font>
          </font>
          <font size="2">
            <font color="#000000">(connectionString);<br /></font>
          </font>
          <font color="#2b91af" size="2">
            <font color="#2b91af" size="2">ServerConnection</font>
          </font>
          <font color="#000000" size="2"> oneServerConnection
      = </font>
          <font color="#0000ff" size="2">
            <font color="#0000ff" size="2">new</font>
          </font>
          <font color="#000000" size="2">
          </font>
          <font color="#2b91af" size="2">
            <font color="#2b91af" size="2">ServerConnection</font>
          </font>
          <font size="2">
            <font color="#000000">(oneSqlConnection);</font>
          </font>
        </p>
        <font color="#2b91af" size="2">
          <font color="#2b91af" size="2">
            <p>
      Server
   </p>
          </font>
        </font>
        <font color="#000000" size="2"> oneServer = </font>
        <font color="#0000ff" size="2">
          <font color="#0000ff" size="2">new</font>
        </font>
        <font color="#000000" size="2">
        </font>
        <font color="#2b91af" size="2">
          <font color="#2b91af" size="2">Server</font>
        </font>
        <font size="2">
          <font color="#000000">(oneServerConnection);<br /></font>
        </font>
        <font color="#2b91af" size="2">
          <font color="#2b91af" size="2">Database</font>
        </font>
        <font color="#000000" size="2"> oneDatabase
   = </font>
        <font color="#0000ff" size="2">
          <font color="#0000ff" size="2">new</font>
        </font>
        <font color="#000000" size="2">
        </font>
        <font color="#2b91af" size="2">
          <font color="#2b91af" size="2">Database</font>
        </font>
        <font size="2">
          <font color="#000000">(oneServer,
   databaseName);<br /></font>oneDatabase.Refresh();
   </font>
        <font color="#2b91af" size="2">
          <font color="#2b91af" size="2">
            <p>
      Table
   </p>
          </font>
        </font>
        <font color="#000000" size="2"> oneTable = </font>
        <font color="#0000ff" size="2">
          <font color="#0000ff" size="2">new</font>
        </font>
        <font color="#000000" size="2">
        </font>
        <font color="#2b91af" size="2">
          <font color="#2b91af" size="2">Table</font>
        </font>
        <font color="#000000" size="2">(oneDatabase, </font>
        <font color="#a31515" size="2">
          <font color="#a31515" size="2">"titles"</font>
        </font>
        <font color="#000000" size="2">, </font>
        <font color="#a31515" size="2">
          <font color="#a31515" size="2">"dbo"</font>
        </font>
        <font size="2">
          <font color="#000000">);<br /></font>oneTable.Refresh();
   </font>
        <p>
      Now the following values are returned:
   </p>
        <p>
      oneTable.Columns[0].Name                            
      = title_id<br />
      oneTable.Columns[0].DataType.Name               =
      tid<br />
      oneTable.Columns[0].DataType.SqlDataType      = UserDefinedDataType<br />
      oneTable.Columns[0].DataType.MaximumLength  = 6
   </p>
        <p>
      So, we can successfully get the length of the underlying data type, but we can't get
      the SqlDataType.
   </p>
        <p>
          <br />
      Attempt #3:
   </p>
        <font color="#0000ff" size="2">
          <font color="#0000ff" size="2">
            <p>
      USE
   </p>
          </font>
        </font>
        <font size="2">
          <font color="#000000"> pubs</font>
        </font>
        <font color="#0000ff" size="2">
          <font color="#0000ff" size="2">
            <p>
      DECLARE
   </p>
          </font>
        </font>
        <font color="#000000" size="2"> @CurrentSchemaName </font>
        <font color="#0000ff" size="2">
          <font color="#0000ff" size="2">VARCHAR</font>
        </font>
        <font color="#808080" size="2">
          <font color="#808080" size="2">(</font>
        </font>
        <font color="#000000" size="2">128</font>
        <font color="#808080" size="2">
          <font color="#808080" size="2">)<br /></font>
        </font>
        <font color="#0000ff" size="2">
          <font color="#0000ff" size="2">DECLARE</font>
        </font>
        <font color="#000000" size="2"> @UserDefinedDataTypeName </font>
        <font color="#0000ff" size="2">
          <font color="#0000ff" size="2">VARCHAR</font>
        </font>
        <font color="#808080" size="2">
          <font color="#808080" size="2">(</font>
        </font>
        <font color="#000000" size="2">128</font>
        <font color="#808080" size="2">
          <font color="#808080" size="2">)
   </font>
        </font>
        <font color="#0000ff" size="2">
          <font color="#0000ff" size="2">
            <p>
      SET
   </p>
          </font>
        </font>
        <font color="#000000" size="2"> @CurrentSchemaName </font>
        <font color="#808080" size="2">
          <font color="#808080" size="2">=</font>
        </font>
        <font color="#000000" size="2">
        </font>
        <font color="#ff0000" size="2">
          <font color="#ff0000" size="2">'dbo'<br /></font>
        </font>
        <font color="#0000ff" size="2">
          <font color="#0000ff" size="2">SET</font>
        </font>
        <font color="#000000" size="2"> @UserDefinedDataTypeName </font>
        <font color="#808080" size="2">
          <font color="#808080" size="2">=</font>
        </font>
        <font color="#000000" size="2">
        </font>
        <font color="#ff0000" size="2">
          <font color="#ff0000" size="2">'tid'
   </font>
        </font>
        <font color="#0000ff" size="2">
          <font color="#0000ff" size="2">
            <p>
      SELECT
   </p>
          </font>
        </font>
        <font size="2">
          <font color="#000000"> name<br /></font>
        </font>
        <font color="#0000ff" size="2">
          <font color="#0000ff" size="2">FROM</font>
        </font>
        <font color="#000000" size="2">
        </font>
        <font color="#008000" size="2">
          <font color="#008000" size="2">sys</font>
        </font>
        <font color="#808080" size="2">
          <font color="#808080" size="2">.</font>
        </font>
        <font color="#008000" size="2">
          <font color="#008000" size="2">types<br /></font>
        </font>
        <font color="#0000ff" size="2">
          <font color="#0000ff" size="2">WHERE</font>
        </font>
        <font color="#000000" size="2"> user_type_id </font>
        <font color="#808080" size="2">
          <font color="#808080" size="2">=<br /></font>
        </font>
        <font color="#808080" size="2">
          <font color="#808080" size="2"> 
   (<br /></font>
        </font>
        <font color="#0000ff" size="2">
          <font color="#0000ff" size="2">  
   SELECT</font>
        </font>
        <font size="2"> system_type_id<br /></font>
        <font color="#0000ff" size="2">
          <font color="#0000ff" size="2">  
   FROM</font>
        </font>
        <font size="2">
        </font>
        <font color="#008000" size="2">
          <font color="#008000" size="2">sys</font>
        </font>
        <font color="#808080" size="2">
          <font color="#808080" size="2">.</font>
        </font>
        <font color="#008000" size="2">
          <font color="#008000" size="2">types<br /></font>
        </font>
        <font color="#808080" size="2">
          <font color="#808080" size="2">  
     INNER</font>
        </font>
        <font size="2">
        </font>
        <font color="#808080" size="2">
          <font color="#808080" size="2">JOIN</font>
        </font>
        <font size="2">
        </font>
        <font color="#008000" size="2">
          <font color="#008000" size="2">sys</font>
        </font>
        <font color="#808080" size="2">
          <font color="#808080" size="2">.</font>
        </font>
        <font color="#008000" size="2">
          <font color="#008000" size="2">schemas<br /></font>
        </font>
        <font color="#0000ff" size="2">
          <font color="#0000ff" size="2">      
   ON</font>
        </font>
        <font size="2">
        </font>
        <font color="#008000" size="2">
          <font color="#008000" size="2">sys</font>
        </font>
        <font color="#808080" size="2">
          <font color="#808080" size="2">.</font>
        </font>
        <font color="#008000" size="2">
          <font color="#008000" size="2">types</font>
        </font>
        <font color="#808080" size="2">
          <font color="#808080" size="2">.</font>
        </font>
        <font color="#ff00ff" size="2">
          <font color="#ff00ff" size="2">schema_id</font>
        </font>
        <font size="2">
        </font>
        <font color="#808080" size="2">
          <font color="#808080" size="2">=</font>
        </font>
        <font size="2">
        </font>
        <font color="#008000" size="2">
          <font color="#008000" size="2">sys</font>
        </font>
        <font color="#808080" size="2">
          <font color="#808080" size="2">.</font>
        </font>
        <font color="#008000" size="2">
          <font color="#008000" size="2">schemas</font>
        </font>
        <font color="#808080" size="2">
          <font color="#808080" size="2">.</font>
        </font>
        <font color="#ff00ff" size="2">
          <font color="#ff00ff" size="2">schema_id<br /></font>
        </font>
        <font color="#0000ff" size="2">
          <font color="#0000ff" size="2">  
   WHERE</font>
        </font>
        <font size="2">
        </font>
        <font color="#008000" size="2">
          <font color="#008000" size="2">sys</font>
        </font>
        <font color="#808080" size="2">
          <font color="#808080" size="2">.</font>
        </font>
        <font color="#008000" size="2">
          <font color="#008000" size="2">schemas</font>
        </font>
        <font color="#808080" size="2">
          <font color="#808080" size="2">.</font>
        </font>
        <font size="2">name </font>
        <font color="#808080" size="2">
          <font color="#808080" size="2">=</font>
        </font>
        <font size="2"> @CurrentSchemaName<br /></font>
        <font color="#808080" size="2">
          <font color="#808080" size="2">    
   AND</font>
        </font>
        <font size="2">
        </font>
        <font color="#008000" size="2">
          <font color="#008000" size="2">sys</font>
        </font>
        <font color="#808080" size="2">
          <font color="#808080" size="2">.</font>
        </font>
        <font color="#008000" size="2">
          <font color="#008000" size="2">types</font>
        </font>
        <font color="#808080" size="2">
          <font color="#808080" size="2">.</font>
        </font>
        <font size="2">name </font>
        <font color="#808080" size="2">
          <font color="#808080" size="2">=</font>
        </font>
        <font size="2"> @UserDefinedDataTypeName<br /></font>
        <font color="#808080" size="2">
          <font color="#808080" size="2">  )
   </font>
        </font>
        <p>
      Using straight SQL, we appear to be able to get the answer we are looking for: "varchar".
   </p>
        <p>
          <br />
      I wonder why SMO is missing this capability?
   </p>
        <img width="0" height="0" src="http://www.capprime.com/software_development_weblog/aggbug.ashx?id=14f458ec-f15c-4406-aff7-6942bd9fa92f" />
      </body>
      <title>Using SMO (and failing) to get the SqlDataType of a UserDefinedDataType</title>
      <guid>http://www.capprime.com/software_development_weblog/PermaLink,guid,14f458ec-f15c-4406-aff7-6942bd9fa92f.aspx</guid>
      <link>http://www.capprime.com/software_development_weblog/PermaLink,guid,14f458ec-f15c-4406-aff7-6942bd9fa92f.aspx</link>
      <pubDate>Mon, 15 Mar 2010 12:56:31 GMT</pubDate>
      <description>&lt;p&gt;
   Apparently SMO can't get the SqlDataType of a UserDefinedDataType.
&lt;/p&gt;
&lt;p&gt;
   &lt;a href="http://msdn.microsoft.com/en-us/library/ms162169.aspx"&gt;SQL Server Management
   Objects (SMO)&lt;/a&gt;&amp;nbsp;is a pretty powerful API into Microsoft SQL Server.&amp;nbsp; I've
   been pretty happy using it in various scenarios over the years.
&lt;/p&gt;
&lt;p&gt;
   Recently, I was surprised to find out that SMO can't get the SqlDataType underlying
   a UserDefinedDataType.&amp;nbsp; This is reproducible using the Microsoft Pubs sample
   database.
&lt;/p&gt;
&lt;p&gt;
   Attempt #1:
&lt;/p&gt;
&lt;font color=#0000ff size=2&gt;&lt;font color=#0000ff size=2&gt; 
&lt;p&gt;
   string
&lt;/font&gt;&lt;/font&gt;&lt;font color=#000000 size=2&gt; databaseName = &lt;/font&gt;&lt;font color=#a31515 size=2&gt;&lt;font color=#a31515 size=2&gt;"pubs"&lt;/font&gt;&lt;/font&gt;&lt;font size=2&gt;&lt;font color=#000000&gt;;&lt;br&gt;
&lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2&gt;&lt;font color=#0000ff size=2&gt;string&lt;/font&gt;&lt;/font&gt;&lt;font color=#000000 size=2&gt; connectionString
= System.Configuration.&lt;/font&gt;&lt;font color=#2b91af size=2&gt;&lt;font color=#2b91af size=2&gt;ConfigurationManager&lt;/font&gt;&lt;/font&gt;&lt;font size=2&gt;&lt;font color=#000000&gt;.ConnectionStrings[databaseName].ToString();&lt;/font&gt;&lt;/font&gt;&gt;
&lt;p&gt;
   &lt;font color=#2b91af size=2&gt;&lt;font color=#2b91af size=2&gt;SqlConnection&lt;/font&gt;&lt;/font&gt;&lt;font color=#000000 size=2&gt; oneSqlConnection
   = &lt;/font&gt;&lt;font color=#0000ff size=2&gt;&lt;font color=#0000ff size=2&gt;new&lt;/font&gt;&lt;/font&gt;&lt;font color=#000000 size=2&gt; &lt;/font&gt;&lt;font color=#2b91af size=2&gt;&lt;font color=#2b91af size=2&gt;SqlConnection&lt;/font&gt;&lt;/font&gt;&lt;font size=2&gt;&lt;font color=#000000&gt;(connectionString);&lt;br&gt;
   &lt;/font&gt;&lt;/font&gt;&lt;font color=#2b91af size=2&gt;&lt;font color=#2b91af size=2&gt;ServerConnection&lt;/font&gt;&lt;/font&gt;&lt;font color=#000000 size=2&gt; oneServerConnection
   = &lt;/font&gt;&lt;font color=#0000ff size=2&gt;&lt;font color=#0000ff size=2&gt;new&lt;/font&gt;&lt;/font&gt;&lt;font color=#000000 size=2&gt; &lt;/font&gt;&lt;font color=#2b91af size=2&gt;&lt;font color=#2b91af size=2&gt;ServerConnection&lt;/font&gt;&lt;/font&gt;&lt;font size=2&gt;&lt;font color=#000000&gt;(oneSqlConnection);&lt;br&gt;
   &lt;/font&gt;&lt;/font&gt;&lt;font color=#2b91af size=2&gt;&lt;font color=#2b91af size=2&gt;Server&lt;/font&gt;&lt;/font&gt;&lt;font color=#000000 size=2&gt; oneServer
   = &lt;/font&gt;&lt;font color=#0000ff size=2&gt;&lt;font color=#0000ff size=2&gt;new&lt;/font&gt;&lt;/font&gt;&lt;font color=#000000 size=2&gt; &lt;/font&gt;&lt;font color=#2b91af size=2&gt;&lt;font color=#2b91af size=2&gt;Server&lt;/font&gt;&lt;/font&gt;&lt;font size=2&gt;&lt;font color=#000000&gt;(oneServerConnection);&lt;br&gt;
   &lt;/font&gt;&lt;/font&gt;&lt;font color=#2b91af size=2&gt;&lt;font color=#2b91af size=2&gt;Database&lt;/font&gt;&lt;/font&gt;&lt;font color=#000000 size=2&gt; oneDatabase
   = &lt;/font&gt;&lt;font color=#0000ff size=2&gt;&lt;font color=#0000ff size=2&gt;new&lt;/font&gt;&lt;/font&gt;&lt;font color=#000000 size=2&gt; &lt;/font&gt;&lt;font color=#2b91af size=2&gt;&lt;font color=#2b91af size=2&gt;Database&lt;/font&gt;&lt;/font&gt;&lt;font size=2&gt;&lt;font color=#000000&gt;(oneServer,
   databaseName);&lt;br&gt;
   &lt;/font&gt;oneDatabase.Refresh();
&lt;/p&gt;
&gt;&lt;font color=#2b91af size=2&gt;&lt;font color=#2b91af size=2&gt; 
&lt;p&gt;
   UserDefinedDataType
&lt;/font&gt;&lt;/font&gt;&lt;font color=#000000 size=2&gt; tidUserDefinedDataType =&lt;br&gt;
&amp;nbsp;&lt;/font&gt;&lt;font color=#000000 size=2&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color=#0000ff size=2&gt;&lt;font color=#0000ff size=2&gt;new&lt;/font&gt;&lt;/font&gt;&lt;font color=#000000 size=2&gt; Microsoft.SqlServer.Management.Smo.&lt;/font&gt;&lt;font color=#2b91af size=2&gt;&lt;font color=#2b91af size=2&gt;UserDefinedDataType&lt;/font&gt;&lt;/font&gt;&lt;font color=#000000 size=2&gt;(oneDatabase, &lt;/font&gt;&lt;font color=#a31515 size=2&gt;&lt;font color=#a31515 size=2&gt;"tid"&lt;/font&gt;&lt;/font&gt;&lt;font color=#000000 size=2&gt;, &lt;/font&gt;&lt;font color=#a31515 size=2&gt;&lt;font color=#a31515 size=2&gt;"dbo"&lt;/font&gt;&lt;/font&gt;&lt;font size=2&gt;&lt;font color=#000000&gt;);&lt;br&gt;
&lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2&gt;&lt;font color=#0000ff size=2&gt;bool&lt;/font&gt;&lt;/font&gt;&lt;font color=#000000 size=2&gt; initializeDidSucceed
= tidUserDefinedDataType.Initialize(&lt;/font&gt;&lt;font color=#0000ff size=2&gt;&lt;font color=#0000ff size=2&gt;true&lt;/font&gt;&lt;/font&gt;&lt;font size=2&gt;&lt;font color=#000000&gt;);&lt;/font&gt;&gt;
&lt;/font&gt; 
&lt;p&gt;
   In this scenario, for reasons unknown to me, initializeDidSucceed is false!
&lt;/p&gt;
&lt;p&gt;
   Now, if we try to access tidUserDefinedDataType.SystemType which seems like the appropriate
   data item, we get this exception:
&lt;/p&gt;
&lt;p&gt;
   Microsoft.SqlServer.Management.Smo.PropertyNotSetException: To accomplish this action,
   set property SystemType. 
   &lt;br&gt;
   &amp;nbsp;&amp;nbsp; at Microsoft.SqlServer.Management.Smo.SqlSmoObject.OnPropertyMissing(String
   propname, Boolean useDefaultValue) 
   &lt;br&gt;
   &amp;nbsp;&amp;nbsp; at Microsoft.SqlServer.Management.Smo.PropertyCollection.RetrieveProperty(Int32
   index, Boolean useDefaultOnMissingValue) 
   &lt;br&gt;
   &amp;nbsp;&amp;nbsp; at Microsoft.SqlServer.Management.Smo.PropertyCollection.GetValueWithNullReplacement(String
   propertyName, Boolean throwOnNullValue, Boolean useDefaultOnMissingValue) 
   &lt;br&gt;
   &amp;nbsp;&amp;nbsp; at Microsoft.SqlServer.Management.Smo.UserDefinedDataType.get_SystemType() 
&lt;/p&gt;
&lt;p&gt;
   &lt;br&gt;
   Attempt #2:
&lt;/p&gt;
&lt;font color=#0000ff size=2&gt;&lt;font color=#0000ff size=2&gt; 
&lt;p&gt;
   string
&lt;/font&gt;&lt;/font&gt;&lt;font color=#000000 size=2&gt; databaseName = &lt;/font&gt;&lt;font color=#a31515 size=2&gt;&lt;font color=#a31515 size=2&gt;"pubs"&lt;/font&gt;&lt;/font&gt;&lt;font size=2&gt;&lt;font color=#000000&gt;;&lt;br&gt;
&lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2&gt;&lt;font color=#0000ff size=2&gt;string&lt;/font&gt;&lt;/font&gt;&lt;font color=#000000 size=2&gt; connectionString
= System.Configuration.&lt;/font&gt;&lt;font color=#2b91af size=2&gt;&lt;font color=#2b91af size=2&gt;ConfigurationManager&lt;/font&gt;&lt;/font&gt;&lt;font size=2&gt;&lt;font color=#000000&gt;.ConnectionStrings[databaseName].ToString();&lt;/font&gt;&lt;/font&gt;&gt;
&lt;p&gt;
   &lt;font color=#2b91af size=2&gt;&lt;font color=#2b91af size=2&gt;SqlConnection&lt;/font&gt;&lt;/font&gt;&lt;font color=#000000 size=2&gt; oneSqlConnection
   = &lt;/font&gt;&lt;font color=#0000ff size=2&gt;&lt;font color=#0000ff size=2&gt;new&lt;/font&gt;&lt;/font&gt;&lt;font color=#000000 size=2&gt; &lt;/font&gt;&lt;font color=#2b91af size=2&gt;&lt;font color=#2b91af size=2&gt;SqlConnection&lt;/font&gt;&lt;/font&gt;&lt;font size=2&gt;&lt;font color=#000000&gt;(connectionString);&lt;br&gt;
   &lt;/font&gt;&lt;/font&gt;&lt;font color=#2b91af size=2&gt;&lt;font color=#2b91af size=2&gt;ServerConnection&lt;/font&gt;&lt;/font&gt;&lt;font color=#000000 size=2&gt; oneServerConnection
   = &lt;/font&gt;&lt;font color=#0000ff size=2&gt;&lt;font color=#0000ff size=2&gt;new&lt;/font&gt;&lt;/font&gt;&lt;font color=#000000 size=2&gt; &lt;/font&gt;&lt;font color=#2b91af size=2&gt;&lt;font color=#2b91af size=2&gt;ServerConnection&lt;/font&gt;&lt;/font&gt;&lt;font size=2&gt;&lt;font color=#000000&gt;(oneSqlConnection);&lt;/font&gt;
&lt;/p&gt;
&gt;&lt;font color=#2b91af size=2&gt;&lt;font color=#2b91af size=2&gt; 
&lt;p&gt;
   Server
&lt;/font&gt;&lt;/font&gt;&lt;font color=#000000 size=2&gt; oneServer = &lt;/font&gt;&lt;font color=#0000ff size=2&gt;&lt;font color=#0000ff size=2&gt;new&lt;/font&gt;&lt;/font&gt;&lt;font color=#000000 size=2&gt; &lt;/font&gt;&lt;font color=#2b91af size=2&gt;&lt;font color=#2b91af size=2&gt;Server&lt;/font&gt;&lt;/font&gt;&lt;font size=2&gt;&lt;font color=#000000&gt;(oneServerConnection);&lt;br&gt;
&lt;/font&gt;&lt;/font&gt;&lt;font color=#2b91af size=2&gt;&lt;font color=#2b91af size=2&gt;Database&lt;/font&gt;&lt;/font&gt;&lt;font color=#000000 size=2&gt; oneDatabase
= &lt;/font&gt;&lt;font color=#0000ff size=2&gt;&lt;font color=#0000ff size=2&gt;new&lt;/font&gt;&lt;/font&gt;&lt;font color=#000000 size=2&gt; &lt;/font&gt;&lt;font color=#2b91af size=2&gt;&lt;font color=#2b91af size=2&gt;Database&lt;/font&gt;&lt;/font&gt;&lt;font size=2&gt;&lt;font color=#000000&gt;(oneServer,
databaseName);&lt;br&gt;
&lt;/font&gt;oneDatabase.Refresh();&gt;
&lt;/font&gt;&lt;font color=#2b91af size=2&gt;&lt;font color=#2b91af size=2&gt; 
&lt;p&gt;
   Table
&lt;/font&gt;&lt;/font&gt;&lt;font color=#000000 size=2&gt; oneTable = &lt;/font&gt;&lt;font color=#0000ff size=2&gt;&lt;font color=#0000ff size=2&gt;new&lt;/font&gt;&lt;/font&gt;&lt;font color=#000000 size=2&gt; &lt;/font&gt;&lt;font color=#2b91af size=2&gt;&lt;font color=#2b91af size=2&gt;Table&lt;/font&gt;&lt;/font&gt;&lt;font color=#000000 size=2&gt;(oneDatabase, &lt;/font&gt;&lt;font color=#a31515 size=2&gt;&lt;font color=#a31515 size=2&gt;"titles"&lt;/font&gt;&lt;/font&gt;&lt;font color=#000000 size=2&gt;, &lt;/font&gt;&lt;font color=#a31515 size=2&gt;&lt;font color=#a31515 size=2&gt;"dbo"&lt;/font&gt;&lt;/font&gt;&lt;font size=2&gt;&lt;font color=#000000&gt;);&lt;br&gt;
&lt;/font&gt;oneTable.Refresh();&gt;
&lt;/font&gt; 
&lt;p&gt;
   Now the following values are returned:
&lt;/p&gt;
&lt;p&gt;
   oneTable.Columns[0].Name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
   = title_id&lt;br&gt;
   oneTable.Columns[0].DataType.Name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;=
   tid&lt;br&gt;
   oneTable.Columns[0].DataType.SqlDataType&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; = UserDefinedDataType&lt;br&gt;
   oneTable.Columns[0].DataType.MaximumLength&amp;nbsp; = 6
&lt;/p&gt;
&lt;p&gt;
   So, we can successfully get the length of the underlying data type, but we can't get
   the SqlDataType.
&lt;/p&gt;
&lt;p&gt;
   &lt;br&gt;
   Attempt #3:
&lt;/p&gt;
&lt;font color=#0000ff size=2&gt;&lt;font color=#0000ff size=2&gt; 
&lt;p&gt;
   USE
&lt;/font&gt;&lt;/font&gt;&lt;font size=2&gt;&lt;font color=#000000&gt; pubs&lt;/font&gt;&gt;
&lt;/font&gt;&lt;font color=#0000ff size=2&gt;&lt;font color=#0000ff size=2&gt; 
&lt;p&gt;
   DECLARE
&lt;/font&gt;&lt;/font&gt;&lt;font color=#000000 size=2&gt; @CurrentSchemaName &lt;/font&gt;&lt;font color=#0000ff size=2&gt;&lt;font color=#0000ff size=2&gt;VARCHAR&lt;/font&gt;&lt;/font&gt;&lt;font color=#808080 size=2&gt;&lt;font color=#808080 size=2&gt;(&lt;/font&gt;&lt;/font&gt;&lt;font color=#000000 size=2&gt;128&lt;/font&gt;&lt;font color=#808080 size=2&gt;&lt;font color=#808080 size=2&gt;)&lt;br&gt;
&lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2&gt;&lt;font color=#0000ff size=2&gt;DECLARE&lt;/font&gt;&lt;/font&gt;&lt;font color=#000000 size=2&gt; @UserDefinedDataTypeName &lt;/font&gt;&lt;font color=#0000ff size=2&gt;&lt;font color=#0000ff size=2&gt;VARCHAR&lt;/font&gt;&lt;/font&gt;&lt;font color=#808080 size=2&gt;&lt;font color=#808080 size=2&gt;(&lt;/font&gt;&lt;/font&gt;&lt;font color=#000000 size=2&gt;128&lt;/font&gt;&lt;font color=#808080 size=2&gt;&lt;font color=#808080 size=2&gt;)&gt;
&lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2&gt;&lt;font color=#0000ff size=2&gt; 
&lt;p&gt;
   SET
&lt;/font&gt;&lt;/font&gt;&lt;font color=#000000 size=2&gt; @CurrentSchemaName &lt;/font&gt;&lt;font color=#808080 size=2&gt;&lt;font color=#808080 size=2&gt;=&lt;/font&gt;&lt;/font&gt;&lt;font color=#000000 size=2&gt; &lt;/font&gt;&lt;font color=#ff0000 size=2&gt;&lt;font color=#ff0000 size=2&gt;'dbo'&lt;br&gt;
&lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2&gt;&lt;font color=#0000ff size=2&gt;SET&lt;/font&gt;&lt;/font&gt;&lt;font color=#000000 size=2&gt; @UserDefinedDataTypeName &lt;/font&gt;&lt;font color=#808080 size=2&gt;&lt;font color=#808080 size=2&gt;=&lt;/font&gt;&lt;/font&gt;&lt;font color=#000000 size=2&gt; &lt;/font&gt;&lt;font color=#ff0000 size=2&gt;&lt;font color=#ff0000 size=2&gt;'tid'&gt;
&lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2&gt;&lt;font color=#0000ff size=2&gt; 
&lt;p&gt;
   SELECT
&lt;/font&gt;&lt;/font&gt;&lt;font size=2&gt;&lt;font color=#000000&gt; name&lt;br&gt;
&lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2&gt;&lt;font color=#0000ff size=2&gt;FROM&lt;/font&gt;&lt;/font&gt;&lt;font color=#000000 size=2&gt; &lt;/font&gt;&lt;font color=#008000 size=2&gt;&lt;font color=#008000 size=2&gt;sys&lt;/font&gt;&lt;/font&gt;&lt;font color=#808080 size=2&gt;&lt;font color=#808080 size=2&gt;.&lt;/font&gt;&lt;/font&gt;&lt;font color=#008000 size=2&gt;&lt;font color=#008000 size=2&gt;types&lt;br&gt;
&lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2&gt;&lt;font color=#0000ff size=2&gt;WHERE&lt;/font&gt;&lt;/font&gt;&lt;font color=#000000 size=2&gt; user_type_id &lt;/font&gt;&lt;font color=#808080 size=2&gt;&lt;font color=#808080 size=2&gt;=&lt;br&gt;
&lt;/font&gt;&lt;/font&gt;&lt;font color=#808080 size=2&gt;&lt;font color=#808080 size=2&gt;&amp;nbsp; (&lt;br&gt;
&lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2&gt;&lt;font color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp; SELECT&lt;/font&gt;&lt;/font&gt;&lt;font size=2&gt; system_type_id&lt;br&gt;
&lt;/font&gt;&lt;font color=#0000ff size=2&gt;&lt;font color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp; FROM&lt;/font&gt;&lt;/font&gt;&lt;font size=2&gt; &lt;/font&gt;&lt;font color=#008000 size=2&gt;&lt;font color=#008000 size=2&gt;sys&lt;/font&gt;&lt;/font&gt;&lt;font color=#808080 size=2&gt;&lt;font color=#808080 size=2&gt;.&lt;/font&gt;&lt;/font&gt;&lt;font color=#008000 size=2&gt;&lt;font color=#008000 size=2&gt;types&lt;br&gt;
&lt;/font&gt;&lt;/font&gt;&lt;font color=#808080 size=2&gt;&lt;font color=#808080 size=2&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;
INNER&lt;/font&gt;&lt;/font&gt;&lt;font size=2&gt; &lt;/font&gt;&lt;font color=#808080 size=2&gt;&lt;font color=#808080 size=2&gt;JOIN&lt;/font&gt;&lt;/font&gt;&lt;font size=2&gt; &lt;/font&gt;&lt;font color=#008000 size=2&gt;&lt;font color=#008000 size=2&gt;sys&lt;/font&gt;&lt;/font&gt;&lt;font color=#808080 size=2&gt;&lt;font color=#808080 size=2&gt;.&lt;/font&gt;&lt;/font&gt;&lt;font color=#008000 size=2&gt;&lt;font color=#008000 size=2&gt;schemas&lt;br&gt;
&lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2&gt;&lt;font color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
ON&lt;/font&gt;&lt;/font&gt;&lt;font size=2&gt; &lt;/font&gt;&lt;font color=#008000 size=2&gt;&lt;font color=#008000 size=2&gt;sys&lt;/font&gt;&lt;/font&gt;&lt;font color=#808080 size=2&gt;&lt;font color=#808080 size=2&gt;.&lt;/font&gt;&lt;/font&gt;&lt;font color=#008000 size=2&gt;&lt;font color=#008000 size=2&gt;types&lt;/font&gt;&lt;/font&gt;&lt;font color=#808080 size=2&gt;&lt;font color=#808080 size=2&gt;.&lt;/font&gt;&lt;/font&gt;&lt;font color=#ff00ff size=2&gt;&lt;font color=#ff00ff size=2&gt;schema_id&lt;/font&gt;&lt;/font&gt;&lt;font size=2&gt; &lt;/font&gt;&lt;font color=#808080 size=2&gt;&lt;font color=#808080 size=2&gt;=&lt;/font&gt;&lt;/font&gt;&lt;font size=2&gt; &lt;/font&gt;&lt;font color=#008000 size=2&gt;&lt;font color=#008000 size=2&gt;sys&lt;/font&gt;&lt;/font&gt;&lt;font color=#808080 size=2&gt;&lt;font color=#808080 size=2&gt;.&lt;/font&gt;&lt;/font&gt;&lt;font color=#008000 size=2&gt;&lt;font color=#008000 size=2&gt;schemas&lt;/font&gt;&lt;/font&gt;&lt;font color=#808080 size=2&gt;&lt;font color=#808080 size=2&gt;.&lt;/font&gt;&lt;/font&gt;&lt;font color=#ff00ff size=2&gt;&lt;font color=#ff00ff size=2&gt;schema_id&lt;br&gt;
&lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2&gt;&lt;font color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp; WHERE&lt;/font&gt;&lt;/font&gt;&lt;font size=2&gt; &lt;/font&gt;&lt;font color=#008000 size=2&gt;&lt;font color=#008000 size=2&gt;sys&lt;/font&gt;&lt;/font&gt;&lt;font color=#808080 size=2&gt;&lt;font color=#808080 size=2&gt;.&lt;/font&gt;&lt;/font&gt;&lt;font color=#008000 size=2&gt;&lt;font color=#008000 size=2&gt;schemas&lt;/font&gt;&lt;/font&gt;&lt;font color=#808080 size=2&gt;&lt;font color=#808080 size=2&gt;.&lt;/font&gt;&lt;/font&gt;&lt;font size=2&gt;name &lt;/font&gt;&lt;font color=#808080 size=2&gt;&lt;font color=#808080 size=2&gt;=&lt;/font&gt;&lt;/font&gt;&lt;font size=2&gt; @CurrentSchemaName&lt;br&gt;
&lt;/font&gt;&lt;font color=#808080 size=2&gt;&lt;font color=#808080 size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
AND&lt;/font&gt;&lt;/font&gt;&lt;font size=2&gt; &lt;/font&gt;&lt;font color=#008000 size=2&gt;&lt;font color=#008000 size=2&gt;sys&lt;/font&gt;&lt;/font&gt;&lt;font color=#808080 size=2&gt;&lt;font color=#808080 size=2&gt;.&lt;/font&gt;&lt;/font&gt;&lt;font color=#008000 size=2&gt;&lt;font color=#008000 size=2&gt;types&lt;/font&gt;&lt;/font&gt;&lt;font color=#808080 size=2&gt;&lt;font color=#808080 size=2&gt;.&lt;/font&gt;&lt;/font&gt;&lt;font size=2&gt;name &lt;/font&gt;&lt;font color=#808080 size=2&gt;&lt;font color=#808080 size=2&gt;=&lt;/font&gt;&lt;/font&gt;&lt;font size=2&gt; @UserDefinedDataTypeName&lt;br&gt;
&lt;/font&gt;&lt;font color=#808080 size=2&gt;&lt;font color=#808080 size=2&gt;&amp;nbsp; )&gt;
&lt;/font&gt;&lt;/font&gt; 
&lt;p&gt;
   Using straight SQL, we appear to be able to get the answer we are looking for: "varchar".
&lt;/p&gt;
&lt;p&gt;
   &lt;br&gt;
   I wonder why SMO is missing this capability?
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.capprime.com/software_development_weblog/aggbug.ashx?id=14f458ec-f15c-4406-aff7-6942bd9fa92f" /&gt;</description>
      <comments>http://www.capprime.com/software_development_weblog/CommentView,guid,14f458ec-f15c-4406-aff7-6942bd9fa92f.aspx</comments>
      <category>Knowledge Base;SQL Server;Visual Studio 2008;SQL Server 2008</category>
    </item>
  </channel>
</rss>