Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从C检索用户定义表类型的架构#_C#_Sql Server_Schema - Fatal编程技术网

C# 从C检索用户定义表类型的架构#

C# 从C检索用户定义表类型的架构#,c#,sql-server,schema,C#,Sql Server,Schema,我想知道在C#中是否有方法从SQL数据库实例检索用户定义表类型的模式。我看到DbConnection类提供了一个GetSchema()方法来获取表模式信息,但是我还没有找到一种方法来获取用户定义的表类型的模式信息。我感兴趣的是检索类型的名称,以及有关数据类型、nullable、name等列的信息。有人有过这样做的经验吗?谢谢 注意:这个问题不是问如何将用户定义的表类型作为参数从C#传递到存储过程使用该过程 sp_列“表名” 要在SqlServer中获取架构信息,请使用SMO。我只是一名DBA,因

我想知道在C#中是否有方法从SQL数据库实例检索用户定义表类型的模式。我看到
DbConnection
类提供了一个
GetSchema()
方法来获取表模式信息,但是我还没有找到一种方法来获取用户定义的表类型的模式信息。我感兴趣的是检索类型的名称,以及有关数据类型、nullable、name等列的信息。有人有过这样做的经验吗?谢谢

注意:这个问题不是问如何将用户定义的表类型作为参数从C#

传递到存储过程使用该过程

sp_列“表名”


要在SqlServer中获取架构信息,请使用SMO。我只是一名DBA,因此Powershell是我的首选工具,但这些概念应该可以立即转移:

import-module sqlps -disablenamechecking;
$s = new-object microsoft.sqlserver.management.smo.server '.';
$db = $s.databases['myDatabase'];

$db.UserDefinedTableTypes | select schema, name;

一旦有了UserDefinedTableType SMO对象,就可以对给定类型使用Columns方法,该方法将返回列对象的集合。每一个都将包含列的所有相关信息(名称、类型、可空性等)

这不是一个完美的解决方案。但这是可行的。假设您使用的已定义表类型名称为“UDT\U Sample”


我知道如何通过SQL获取模式信息,但我很好奇是否有办法从C#获取模式(不需要C#调用存储过程)。例如,我知道Entity Framework数据库首先能够从数据库中获取大量模式信息,而不必调用存储过程。我认为这个Powershell正在使用一些.NET库,所以也许我可以尝试引用该库,看看它提供了什么。我会让你知道情况的,绝对是这样。名称空间是SMO(在新的对象行中引用)。这非常有效!我需要引用三个SQL Server程序集:Microsoft.SqlServer.ConnectionInfo、Microsoft.SqlServer.Management.Sdk.Sfc和Microsoft.SqlServer.Smo。我现在可以获得所需的所有元数据。那么最终的解决方案是什么呢?我还尝试动态创建datatable。不在c#零件上复制结构。我应该添加哪些库以及一些示例片段会是什么样子?@Yauhen.F:你不是在问同一个问题,因此在这里提供答案对于未来希望解决同一问题的人来说不是最好的。提交一个新问题,我相信它会得到回答(由我或其他人)。另外,要准备好展示你已经尝试过的东西……用“为我解决我的问题”来表达的问题在这里并不常见。你能解释一下你的代码中发生了什么吗?这对您和其他有经验的程序员来说可能是显而易见的,但是当您添加一些解释时,它会使答案变得更好,并最终导致更多的投票。
DECLARE @UDT UDT_Sample
SELECT * INTO tempUDT FROM @UDT
EXECUTE sp_columns 'tempUDT'
DROP TABLE tempUDT
        using (var connection = CreateConnection())
        {
            connection.Open();
            UserDefinedSchemaTable = connection.GetSchema("StructuredTypeMembers", new string[] { null, null, null,null });
        }