UdtTypeName and .NET data types in SQL
Posted by Sergio
on 2008-06-11
We are working on SQL 2008 for a new project with the intent to leverage the
new
data types, in this case especially the HIERARCHYID
data type.
One of the stored procedures we created had a parameter of type HIERARCHYID
.
The code that calls the stored procedure was something like this.
SqlHierarchyId nodeValue = GetNodeValueFromSomewhere(); var cmd =new SqlCommand("usp_EnableNode"); cmd.CommandType = CommandType.StoredProcedure; var nodeParam = myCommand.Parameters.Add("@Node", SqlDbType.SqlHierarchyId); nodeParam.Value = nodeValue; var enableParam = myCommand.Parameters.Add("@Enable", SqlDbType.SqlBit); enableParam.Value = true; cmd.ExecuteNonQuery();
When running this code we were getting the error "UdtTypeName property must be set for UDT parameters."
Since the HIERARCHYID
data type is a .NET type in SQL 2008 and we had not played with .NET
types in SQL 2005 yet, we scratched our heads for a few minutes.
We tried both:
nodeParam.UdtTypeName = typeof(SqlHierarchyId).Name;
And
nodeParam.UdtTypeName = typeof(SqlHierarchyId).FullName;
But the solution was much simpler:
nodeParam.UdtTypeName = "HierarchyId";
This should be needed for the new GEOMETRY
and GEOGRAPHY
data types as well.
Maybe this helps someone else.